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"