File indexing completed on 2024-04-21 03:55:02

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2000 Stephan Kulow <coolo@kde.org>
0004     SPDX-FileCopyrightText: 2000-2009 David Faure <faure@kde.org>
0005     SPDX-FileCopyrightText: 2014 Mathias Tillman <master.homer@gmail.com>
0006 
0007     SPDX-License-Identifier: LGPL-2.0-or-later
0008 */
0009 
0010 #include "filesystemfreespacejob.h"
0011 #include "job.h"
0012 #include "job_p.h"
0013 #include <worker_p.h>
0014 
0015 using namespace KIO;
0016 
0017 class KIO::FileSystemFreeSpaceJobPrivate : public SimpleJobPrivate
0018 {
0019 public:
0020     FileSystemFreeSpaceJobPrivate(const QUrl &url, int command, const QByteArray &packedArgs)
0021         : SimpleJobPrivate(url, command, packedArgs)
0022     {
0023     }
0024 
0025     /**
0026      * @internal
0027      * Called by the scheduler when a @p worker gets to
0028      * work on this job.
0029      * @param worker the worker that starts working on this job
0030      */
0031     void start(Worker *worker) override;
0032 
0033     Q_DECLARE_PUBLIC(FileSystemFreeSpaceJob)
0034 
0035     static inline FileSystemFreeSpaceJob *newJob(const QUrl &url, int command, const QByteArray &packedArgs)
0036     {
0037         FileSystemFreeSpaceJob *job = new FileSystemFreeSpaceJob(*new FileSystemFreeSpaceJobPrivate(url, command, packedArgs));
0038         job->setUiDelegate(KIO::createDefaultJobUiDelegate());
0039         return job;
0040     }
0041     KIO::filesize_t size = -1;
0042     KIO::filesize_t availableSize = -1;
0043 };
0044 
0045 FileSystemFreeSpaceJob::FileSystemFreeSpaceJob(FileSystemFreeSpaceJobPrivate &dd)
0046     : SimpleJob(dd)
0047 {
0048 }
0049 
0050 FileSystemFreeSpaceJob::~FileSystemFreeSpaceJob()
0051 {
0052 }
0053 KIO::filesize_t FileSystemFreeSpaceJob::size() const
0054 {
0055     Q_D(const FileSystemFreeSpaceJob);
0056     return d->size;
0057 }
0058 KIO::filesize_t FileSystemFreeSpaceJob::availableSize() const
0059 {
0060     Q_D(const FileSystemFreeSpaceJob);
0061     return d->availableSize;
0062 }
0063 
0064 void FileSystemFreeSpaceJobPrivate::start(Worker *worker)
0065 {
0066     SimpleJobPrivate::start(worker);
0067 }
0068 
0069 void FileSystemFreeSpaceJob::slotFinished()
0070 {
0071     Q_D(FileSystemFreeSpaceJob);
0072     const QString totalStr = queryMetaData(QStringLiteral("total"));
0073     const QString availableStr = queryMetaData(QStringLiteral("available"));
0074 
0075     if (availableStr.isEmpty()) { // CopyJob only cares for available. "total" is optional
0076         setError(KIO::ERR_UNSUPPORTED_ACTION);
0077     }
0078     d->size = totalStr.toULongLong();
0079     d->availableSize = availableStr.toULongLong();
0080 
0081     // Return worker to the scheduler
0082     SimpleJob::slotFinished();
0083 }
0084 
0085 KIO::FileSystemFreeSpaceJob *KIO::fileSystemFreeSpace(const QUrl &url)
0086 {
0087     KIO_ARGS << url;
0088     return FileSystemFreeSpaceJobPrivate::newJob(url, CMD_FILESYSTEMFREESPACE, packedArgs);
0089 }
0090 
0091 #include "moc_filesystemfreespacejob.cpp"