File indexing completed on 2024-04-28 05:45:18

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Frank Reininghaus <frank78ac@googlemail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "mountpointobserver.h"
0008 
0009 #include "mountpointobservercache.h"
0010 
0011 #include <KIO/FileSystemFreeSpaceJob>
0012 
0013 MountPointObserver::MountPointObserver(const QUrl &url, QObject *parent)
0014     : QObject(parent)
0015     , m_url(url)
0016     , m_referenceCount(0)
0017 {
0018 }
0019 
0020 MountPointObserver *MountPointObserver::observerForUrl(const QUrl &url)
0021 {
0022     MountPointObserver *observer = MountPointObserverCache::instance()->observerForUrl(url);
0023     return observer;
0024 }
0025 
0026 void MountPointObserver::update()
0027 {
0028     if (m_referenceCount == 0) {
0029         delete this;
0030     } else {
0031         KIO::FileSystemFreeSpaceJob *job = KIO::fileSystemFreeSpace(m_url);
0032         connect(job, &KJob::result, this, &MountPointObserver::freeSpaceResult);
0033     }
0034 }
0035 
0036 void MountPointObserver::freeSpaceResult(KJob *job)
0037 {
0038     if (!job->error()) {
0039         KIO::FileSystemFreeSpaceJob *freeSpaceJob = qobject_cast<KIO::FileSystemFreeSpaceJob *>(job);
0040         Q_ASSERT(freeSpaceJob);
0041         Q_EMIT spaceInfoChanged(freeSpaceJob->size(), freeSpaceJob->availableSize());
0042     } else {
0043         Q_EMIT spaceInfoChanged(0, 0);
0044     }
0045 }
0046 
0047 #include "moc_mountpointobserver.cpp"