X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ea713e7a791e4685be6d3c22756d59cef91fa77a..cbb35681f51b58eb7fb20b201869138cc5d45b65:/src/statusbar/spaceinfoobserver.cpp diff --git a/src/statusbar/spaceinfoobserver.cpp b/src/statusbar/spaceinfoobserver.cpp index 9125a9308..692eba7e7 100644 --- a/src/statusbar/spaceinfoobserver.cpp +++ b/src/statusbar/spaceinfoobserver.cpp @@ -21,69 +21,70 @@ #include "mountpointobserver.h" -#include - -SpaceInfoObserver::SpaceInfoObserver(const KUrl& url, QObject* parent) : +SpaceInfoObserver::SpaceInfoObserver(const QUrl& url, QObject* parent) : QObject(parent), - m_mountPointObserver(0) + m_mountPointObserver(nullptr), + m_dataSize(0), + m_dataAvailable(0) { - if (url.isLocalFile()) { - m_mountPointObserver = MountPointObserver::observerForPath(url.toLocalFile()); - m_mountPointObserver->ref(); - connect(m_mountPointObserver, SIGNAL(spaceInfoChanged()), this, SIGNAL(valuesChanged())); - } + m_mountPointObserver = MountPointObserver::observerForUrl(url); + m_mountPointObserver->ref(); + connect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged); + m_mountPointObserver->update(); } SpaceInfoObserver::~SpaceInfoObserver() { if (m_mountPointObserver) { m_mountPointObserver->deref(); - m_mountPointObserver = 0; + m_mountPointObserver = nullptr; } } quint64 SpaceInfoObserver::size() const { - if (m_mountPointObserver && m_mountPointObserver->spaceInfo().isValid()) { - return m_mountPointObserver->spaceInfo().size(); - } else { - return 0; - } + return m_dataSize; } quint64 SpaceInfoObserver::available() const { - if (m_mountPointObserver && m_mountPointObserver->spaceInfo().isValid()) { - return m_mountPointObserver->spaceInfo().available(); - } else { - return 0; - } + return m_dataAvailable; } -void SpaceInfoObserver::setUrl(const KUrl& url) +void SpaceInfoObserver::setUrl(const QUrl& url) { - if (url.isLocalFile()) { - MountPointObserver* newObserver = MountPointObserver::observerForPath(url.toLocalFile()); - if (newObserver != m_mountPointObserver) { - if (m_mountPointObserver) { - disconnect(m_mountPointObserver, SIGNAL(spaceInfoChanged()), this, SIGNAL(valuesChanged())); - m_mountPointObserver->deref(); - m_mountPointObserver = 0; - } - - m_mountPointObserver = newObserver; - m_mountPointObserver->ref(); - connect(m_mountPointObserver, SIGNAL(spaceInfoChanged()), this, SIGNAL(valuesChanged())); - - emit valuesChanged(); - } - } else { + MountPointObserver* newObserver = MountPointObserver::observerForUrl(url); + if (newObserver != m_mountPointObserver) { if (m_mountPointObserver) { - disconnect(m_mountPointObserver, SIGNAL(spaceInfoChanged()), this, SIGNAL(valuesChanged())); + disconnect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged); m_mountPointObserver->deref(); - m_mountPointObserver = 0; - - emit valuesChanged(); + m_mountPointObserver = nullptr; } + + m_mountPointObserver = newObserver; + m_mountPointObserver->ref(); + connect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged); + + // If newObserver is cached it won't call update until the next timer update, + // so update the observer now. + m_mountPointObserver->update(); + } +} + +void SpaceInfoObserver::update() +{ + if (m_mountPointObserver) { + m_mountPointObserver->update(); + } +} + +void SpaceInfoObserver::spaceInfoChanged(quint64 size, quint64 available) +{ + // Make sure that the size has actually changed + if (m_dataSize != size || m_dataAvailable != available) { + m_dataSize = size; + m_dataAvailable = available; + + emit valuesChanged(); } }