]> cloud.milkyroute.net Git - dolphin.git/blob - src/statusbar/spaceinfoobserver.cpp
Minor code improvement
[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 m_mountPointObserver = MountPointObserver::observerForUrl(url);
19 m_mountPointObserver->ref();
20 connect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged);
21 m_mountPointObserver->update();
22 }
23
24 SpaceInfoObserver::~SpaceInfoObserver()
25 {
26 if (m_mountPointObserver) {
27 m_mountPointObserver->deref();
28 m_mountPointObserver = nullptr;
29 }
30 }
31
32 quint64 SpaceInfoObserver::size() const
33 {
34 return m_dataSize;
35 }
36
37 quint64 SpaceInfoObserver::available() const
38 {
39 return m_dataAvailable;
40 }
41
42 void SpaceInfoObserver::setUrl(const QUrl &url)
43 {
44 MountPointObserver *newObserver = MountPointObserver::observerForUrl(url);
45 if (newObserver != m_mountPointObserver) {
46 if (m_mountPointObserver) {
47 disconnect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged);
48 m_mountPointObserver->deref();
49 m_mountPointObserver = nullptr;
50 }
51
52 m_mountPointObserver = newObserver;
53 m_mountPointObserver->ref();
54 connect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged);
55
56 // If newObserver is cached it won't call update until the next timer update,
57 // so update the observer now.
58 m_mountPointObserver->update();
59 }
60 }
61
62 void SpaceInfoObserver::update()
63 {
64 if (m_mountPointObserver) {
65 m_mountPointObserver->update();
66 }
67 }
68
69 void SpaceInfoObserver::spaceInfoChanged(quint64 size, quint64 available)
70 {
71 // Make sure that the size has actually changed
72 if (m_dataSize != size || m_dataAvailable != available || !m_hasData) {
73 m_hasData = true;
74 m_dataSize = size;
75 m_dataAvailable = available;
76
77 Q_EMIT valuesChanged();
78 }
79 }
80
81 #include "moc_spaceinfoobserver.cpp"