File indexing completed on 2024-05-12 05:22:18
0001 /* 0002 * This file is part of LibKGAPI library 0003 * 0004 * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "drivesmodifyjob.h" 0010 #include "debug.h" 0011 #include "drives.h" 0012 #include "driveservice.h" 0013 #include "utils.h" 0014 0015 #include <QNetworkReply> 0016 #include <QNetworkRequest> 0017 #include <QUrlQuery> 0018 0019 namespace 0020 { 0021 static const QString UseDomainAdminAccessAttr = QStringLiteral("useDomainAdminAccess"); 0022 } 0023 using namespace KGAPI2; 0024 using namespace KGAPI2::Drive; 0025 0026 class Q_DECL_HIDDEN DrivesModifyJob::Private 0027 { 0028 public: 0029 Private(DrivesModifyJob *parent); 0030 void processNext(); 0031 0032 bool useDomainAdminAccess = false; 0033 0034 DrivesList drives; 0035 0036 private: 0037 DrivesModifyJob *const q; 0038 }; 0039 0040 DrivesModifyJob::Private::Private(DrivesModifyJob *parent) 0041 : q(parent) 0042 { 0043 } 0044 0045 void DrivesModifyJob::setUseDomainAdminAccess(bool useDomainAdminAccess) 0046 { 0047 if (isRunning()) { 0048 qCWarning(KGAPIDebug) << "Can't modify useDomainAdminAccess property when job is running"; 0049 return; 0050 } 0051 0052 d->useDomainAdminAccess = useDomainAdminAccess; 0053 } 0054 0055 bool DrivesModifyJob::useDomainAdminAccess() const 0056 { 0057 return d->useDomainAdminAccess; 0058 } 0059 0060 void DrivesModifyJob::Private::processNext() 0061 { 0062 if (drives.isEmpty()) { 0063 q->emitFinished(); 0064 return; 0065 } 0066 0067 const DrivesPtr drive = drives.takeFirst(); 0068 QUrl url = DriveService::fetchDrivesUrl(drive->id()); 0069 0070 QUrlQuery query(url); 0071 if (useDomainAdminAccess != false) { 0072 query.addQueryItem(UseDomainAdminAccessAttr, Utils::bool2Str(useDomainAdminAccess)); 0073 } 0074 url.setQuery(query); 0075 0076 QNetworkRequest request(url); 0077 0078 const QByteArray rawData = Drives::toJSON(drive); 0079 q->enqueueRequest(request, rawData, QStringLiteral("application/json")); 0080 } 0081 0082 DrivesModifyJob::DrivesModifyJob(const DrivesPtr &drive, const AccountPtr &account, QObject *parent) 0083 : ModifyJob(account, parent) 0084 , d(new Private(this)) 0085 { 0086 d->drives << drive; 0087 } 0088 0089 DrivesModifyJob::DrivesModifyJob(const DrivesList &drives, const AccountPtr &account, QObject *parent) 0090 : ModifyJob(account, parent) 0091 , d(new Private(this)) 0092 { 0093 d->drives << drives; 0094 } 0095 0096 DrivesModifyJob::~DrivesModifyJob() = default; 0097 0098 void DrivesModifyJob::start() 0099 { 0100 d->processNext(); 0101 } 0102 0103 ObjectsList DrivesModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData) 0104 { 0105 const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); 0106 ContentType ct = Utils::stringToContentType(contentType); 0107 ObjectsList items; 0108 if (ct == KGAPI2::JSON) { 0109 items << Drives::fromJSON(rawData); 0110 } else { 0111 setError(KGAPI2::InvalidResponse); 0112 setErrorString(tr("Invalid response content type")); 0113 emitFinished(); 0114 return items; 0115 } 0116 0117 // Enqueue next item or finish 0118 d->processNext(); 0119 0120 return items; 0121 } 0122 0123 #include "moc_drivesmodifyjob.cpp"