X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/7a593fc92bf28fbdcdec0e241e18ee8ba2ad7334..a4240f6c2285c87de5763b4924fbc1c954b4408c:/src/statusbar/mountpointobservercache.cpp diff --git a/src/statusbar/mountpointobservercache.cpp b/src/statusbar/mountpointobservercache.cpp index aff0c8e2f..348df4a07 100644 --- a/src/statusbar/mountpointobservercache.cpp +++ b/src/statusbar/mountpointobservercache.cpp @@ -1,27 +1,13 @@ -/*************************************************************************** - * Copyright (C) 2014 by Frank Reininghaus * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2014 Frank Reininghaus + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "mountpointobservercache.h" #include "mountpointobserver.h" -#include #include #include @@ -31,13 +17,12 @@ class MountPointObserverCacheSingleton public: MountPointObserverCache instance; }; -K_GLOBAL_STATIC(MountPointObserverCacheSingleton, s_MountPointObserverCache) +Q_GLOBAL_STATIC(MountPointObserverCacheSingleton, s_MountPointObserverCache) - -MountPointObserverCache::MountPointObserverCache() : - m_observerForMountPoint(), - m_mountPointForObserver(), - m_updateTimer(0) +MountPointObserverCache::MountPointObserverCache() + : m_observerForMountPoint() + , m_mountPointForObserver() + , m_updateTimer(nullptr) { m_updateTimer = new QTimer(this); } @@ -46,49 +31,54 @@ MountPointObserverCache::~MountPointObserverCache() { } -MountPointObserverCache* MountPointObserverCache::instance() +MountPointObserverCache *MountPointObserverCache::instance() { return &s_MountPointObserverCache->instance; } -MountPointObserver* MountPointObserverCache::observerForPath(const QString& path) +MountPointObserver *MountPointObserverCache::observerForUrl(const QUrl &url) { - // Try to share the observer with other paths that have the same mount point. - QString mountPointPath; - KMountPoint::Ptr mountPoint = KMountPoint::currentMountPoints().findByPath(path); - if (mountPoint) { - mountPointPath = mountPoint->mountPoint(); + QUrl cachedObserverUrl; + // If the url is a local path we can extract the root dir by checking the mount points. + if (url.isLocalFile()) { + // Try to share the observer with other paths that have the same mount point. + KMountPoint::Ptr mountPoint = KMountPoint::currentMountPoints().findByPath(url.toLocalFile()); + if (mountPoint) { + cachedObserverUrl = QUrl::fromLocalFile(mountPoint->mountPoint()); + } else { + // Even if determining the mount point failed, the observer might still + // be able to retrieve information about the url. + cachedObserverUrl = url; + } } else { - // Even if determining the mount point failed, KDiskFreeSpaceInfo might still - // be able to retrieve information about the path. - mountPointPath = path; + cachedObserverUrl = url; } - MountPointObserver* observer = m_observerForMountPoint.value(mountPointPath); + MountPointObserver *observer = m_observerForMountPoint.value(cachedObserverUrl); if (!observer) { - observer = new MountPointObserver(mountPointPath, this); - m_observerForMountPoint.insert(mountPointPath, observer); - m_mountPointForObserver.insert(observer, mountPointPath); + observer = new MountPointObserver(cachedObserverUrl, this); + m_observerForMountPoint.insert(cachedObserverUrl, observer); + m_mountPointForObserver.insert(observer, cachedObserverUrl); Q_ASSERT(m_observerForMountPoint.count() == m_mountPointForObserver.count()); - connect(observer, SIGNAL(destroyed(QObject*)), this, SLOT(slotObserverDestroyed(QObject*))); + connect(observer, &MountPointObserver::destroyed, this, &MountPointObserverCache::slotObserverDestroyed); if (!m_updateTimer->isActive()) { - m_updateTimer->start(10000); + m_updateTimer->start(60000); // 1 minute } - connect(m_updateTimer, SIGNAL(timeout()), observer, SLOT(update())); + connect(m_updateTimer, &QTimer::timeout, observer, &MountPointObserver::update); } return observer; } -void MountPointObserverCache::slotObserverDestroyed(QObject* observer) +void MountPointObserverCache::slotObserverDestroyed(QObject *observer) { Q_ASSERT(m_mountPointForObserver.contains(observer)); - const QString& path = m_mountPointForObserver.value(observer); - Q_ASSERT(m_observerForMountPoint.contains(path)); - m_observerForMountPoint.remove(path); + const QUrl &url = m_mountPointForObserver.value(observer); + Q_ASSERT(m_observerForMountPoint.contains(url)); + m_observerForMountPoint.remove(url); m_mountPointForObserver.remove(observer); Q_ASSERT(m_observerForMountPoint.count() == m_mountPointForObserver.count()); @@ -97,3 +87,5 @@ void MountPointObserverCache::slotObserverDestroyed(QObject* observer) m_updateTimer->stop(); } } + +#include "moc_mountpointobservercache.cpp"