File indexing completed on 2024-04-28 11:40:54

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 <slave.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 slave gets to
0028      * work on this job.
0029      * @param slave the slave that starts working on this job
0030      */
0031     void start(Slave *slave) 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 };
0042 
0043 FileSystemFreeSpaceJob::FileSystemFreeSpaceJob(FileSystemFreeSpaceJobPrivate &dd)
0044     : SimpleJob(dd)
0045 {
0046 }
0047 
0048 FileSystemFreeSpaceJob::~FileSystemFreeSpaceJob()
0049 {
0050 }
0051 
0052 void FileSystemFreeSpaceJobPrivate::start(Slave *slave)
0053 {
0054     SimpleJobPrivate::start(slave);
0055 }
0056 
0057 void FileSystemFreeSpaceJob::slotFinished()
0058 {
0059     const QString totalStr = queryMetaData(QStringLiteral("total"));
0060     const QString availableStr = queryMetaData(QStringLiteral("available"));
0061 
0062     if (availableStr.isEmpty()) { // CopyJob only cares for available. "total" is optional
0063         setError(KIO::ERR_UNSUPPORTED_ACTION);
0064     }
0065     const KIO::filesize_t total = totalStr.toULongLong();
0066     const KIO::filesize_t available = availableStr.toULongLong();
0067     Q_EMIT result(this, total, available);
0068 
0069     // Return slave to the scheduler
0070     SimpleJob::slotFinished();
0071 }
0072 
0073 KIO::FileSystemFreeSpaceJob *KIO::fileSystemFreeSpace(const QUrl &url)
0074 {
0075     KIO_ARGS << url;
0076     return FileSystemFreeSpaceJobPrivate::newJob(url, CMD_FILESYSTEMFREESPACE, packedArgs);
0077 }
0078 
0079 #include "moc_filesystemfreespacejob.cpp"