File indexing completed on 2023-09-24 04:08:31
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"