]> cloud.milkyroute.net Git - dolphin.git/blob - src/statusbar/spaceinfoobserver.cpp
SVN_SILENT made messages (.desktop file) - always resolve ours
[dolphin.git] / src / statusbar / spaceinfoobserver.cpp
1 /*
2 * SPDX-FileCopyrightText: 2014 Frank Reininghaus <frank78ac@googlemail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "spaceinfoobserver.h"
8
9 #include "mountpointobserver.h"
10
11 SpaceInfoObserver::SpaceInfoObserver(const QUrl &url, QObject *parent)
12 : QObject(parent)
13 , m_mountPointObserver(nullptr)
14 , m_hasData(false)
15 , m_dataSize(0)
16 , m_dataAvailable(0)
17 {
18 if (!url.isEmpty()) {
19 setUrl(url);
20 }
21 }
22
23 SpaceInfoObserver::~SpaceInfoObserver()
24 {
25 if (m_mountPointObserver) {
26 m_mountPointObserver->deref();
27 m_mountPointObserver = nullptr;
28 }
29 }
30
31 quint64 SpaceInfoObserver::size() const
32 {
33 return m_dataSize;
34 }
35
36 quint64 SpaceInfoObserver::available() const
37 {
38 return m_dataAvailable;
39 }
40
41 void SpaceInfoObserver::setUrl(const QUrl &url)
42 {
43 MountPointObserver *newObserver = MountPointObserver::observerForUrl(url);
44 if (newObserver != m_mountPointObserver) {
45 if (m_mountPointObserver) {
46 disconnect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged);
47 m_mountPointObserver->deref();
48 m_mountPointObserver = nullptr;
49 }
50
51 m_mountPointObserver = newObserver;
52 m_mountPointObserver->ref();
53 connect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged);
54
55 // If newObserver is cached it won't call update until the next timer update,
56 // so update the observer now.
57 m_mountPointObserver->update();
58 }
59 }
60
61 void SpaceInfoObserver::update()
62 {
63 if (m_mountPointObserver) {
64 m_mountPointObserver->update();
65 }
66 }
67
68 void SpaceInfoObserver::spaceInfoChanged(quint64 size, quint64 available)
69 {
70 // Make sure that the size has actually changed
71 if (m_dataSize != size || m_dataAvailable != available || !m_hasData) {
72 m_hasData = true;
73 m_dataSize = size;
74 m_dataAvailable = available;
75
76 Q_EMIT valuesChanged();
77 }
78 }
79
80 #include "moc_spaceinfoobserver.cpp"