File indexing completed on 2024-05-12 05:22:19
0001 /* 0002 * This file is part of LibKGAPI library 0003 * 0004 * SPDX-FileCopyrightText: 2013 Daniel Vrátil <dvratil@redhat.com> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "fileabstractmodifyjob.h" 0010 #include "file.h" 0011 #include "utils.h" 0012 0013 #include <QNetworkReply> 0014 #include <QNetworkRequest> 0015 #include <QUrlQuery> 0016 0017 using namespace KGAPI2; 0018 using namespace KGAPI2::Drive; 0019 0020 class Q_DECL_HIDDEN FileAbstractModifyJob::Private 0021 { 0022 public: 0023 Private(FileAbstractModifyJob *parent); 0024 void processNext(); 0025 0026 QStringList filesIds; 0027 0028 bool supportsAllDrives = true; 0029 0030 private: 0031 FileAbstractModifyJob *const q; 0032 }; 0033 0034 FileAbstractModifyJob::Private::Private(FileAbstractModifyJob *parent) 0035 : q(parent) 0036 { 0037 } 0038 0039 void FileAbstractModifyJob::Private::processNext() 0040 { 0041 if (filesIds.isEmpty()) { 0042 q->emitFinished(); 0043 return; 0044 } 0045 0046 const QString fileId = filesIds.takeFirst(); 0047 QUrl url = q->url(fileId); 0048 0049 QUrlQuery query(url); 0050 query.addQueryItem(QStringLiteral("supportsAllDrives"), Utils::bool2Str(supportsAllDrives)); 0051 url.setQuery(query); 0052 0053 QNetworkRequest request(url); 0054 request.setHeader(QNetworkRequest::ContentLengthHeader, 0); 0055 0056 q->enqueueRequest(request); 0057 } 0058 0059 FileAbstractModifyJob::FileAbstractModifyJob(const QString &fileId, const AccountPtr &account, QObject *parent) 0060 : ModifyJob(account, parent) 0061 , d(new Private(this)) 0062 { 0063 d->filesIds << fileId; 0064 } 0065 0066 FileAbstractModifyJob::FileAbstractModifyJob(const QStringList &filesIds, const AccountPtr &account, QObject *parent) 0067 : ModifyJob(account, parent) 0068 , d(new Private(this)) 0069 { 0070 d->filesIds << filesIds; 0071 } 0072 0073 FileAbstractModifyJob::FileAbstractModifyJob(const FilePtr &file, const AccountPtr &account, QObject *parent) 0074 : ModifyJob(account, parent) 0075 , d(new Private(this)) 0076 { 0077 d->filesIds << file->id(); 0078 } 0079 0080 FileAbstractModifyJob::FileAbstractModifyJob(const FilesList &files, const AccountPtr &account, QObject *parent) 0081 : ModifyJob(account, parent) 0082 , d(new Private(this)) 0083 { 0084 for (const FilePtr &file : std::as_const(files)) { 0085 d->filesIds << file->id(); 0086 } 0087 } 0088 0089 FileAbstractModifyJob::~FileAbstractModifyJob() 0090 { 0091 delete d; 0092 } 0093 0094 void FileAbstractModifyJob::start() 0095 { 0096 d->processNext(); 0097 } 0098 0099 bool FileAbstractModifyJob::supportsAllDrives() const 0100 { 0101 return d->supportsAllDrives; 0102 } 0103 0104 void FileAbstractModifyJob::setSupportsAllDrives(bool supportsAllDrives) 0105 { 0106 d->supportsAllDrives = supportsAllDrives; 0107 } 0108 0109 ObjectsList FileAbstractModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0110 { 0111 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0112 ContentType ct = Utils::stringToContentType(contentType); 0113 ObjectsList items; 0114 if (ct == KGAPI2::JSON) { 0115 items << File::fromJSON(rawData); 0116 } else { 0117 setError(KGAPI2::InvalidResponse); 0118 setErrorString(tr("Invalid response content type")); 0119 emitFinished(); 0120 } 0121 0122 d->processNext(); 0123 0124 return items; 0125 } 0126 0127 #include "moc_fileabstractmodifyjob.cpp"