File indexing completed on 2024-05-12 05:22:20
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 "filemodifyjob.h" 0010 #include "debug.h" 0011 #include "driveservice.h" 0012 #include "file.h" 0013 #include "utils.h" 0014 0015 #include <QNetworkAccessManager> 0016 #include <QNetworkRequest> 0017 #include <QUrlQuery> 0018 0019 using namespace KGAPI2; 0020 using namespace KGAPI2::Drive; 0021 0022 class Q_DECL_HIDDEN FileModifyJob::Private 0023 { 0024 public: 0025 Private(); 0026 0027 QMap<QString /* filepath */, QString /* fileId */> files; 0028 0029 bool createNewRevision = true; 0030 bool changeModifiedDate = false; 0031 bool updateViewedDate = true; 0032 }; 0033 0034 FileModifyJob::Private::Private() 0035 { 0036 } 0037 0038 FileModifyJob::FileModifyJob(const FilePtr &metadata, const AccountPtr &account, QObject *parent) 0039 : FileAbstractUploadJob(metadata, account, parent) 0040 , d(new Private) 0041 { 0042 d->files.insert(QStringLiteral("?=0"), metadata->id()); 0043 setSerializationOptions(File::ExcludeCreationDate); 0044 } 0045 0046 FileModifyJob::FileModifyJob(const QString &filePath, const QString &fileId, const AccountPtr &account, QObject *parent) 0047 : FileAbstractUploadJob(filePath, account, parent) 0048 , d(new Private) 0049 { 0050 d->files.insert(filePath, fileId); 0051 } 0052 0053 FileModifyJob::FileModifyJob(const QString &filePath, const FilePtr &metaData, const AccountPtr &account, QObject *parent) 0054 : FileAbstractUploadJob(filePath, metaData, account, parent) 0055 , d(new Private) 0056 { 0057 d->files.insert(filePath, metaData->id()); 0058 setSerializationOptions(File::ExcludeCreationDate); 0059 } 0060 0061 FileModifyJob::FileModifyJob(const QMap<QString, QString> &files, const AccountPtr &account, QObject *parent) 0062 : FileAbstractUploadJob(files.keys(), account, parent) 0063 , d(new Private) 0064 { 0065 d->files = files; 0066 } 0067 0068 FileModifyJob::FileModifyJob(const QMap<QString, FilePtr> &files, const AccountPtr &account, QObject *parent) 0069 : FileAbstractUploadJob(files, account, parent) 0070 , d(new Private) 0071 { 0072 QMap<QString, FilePtr>::ConstIterator iter = files.constBegin(); 0073 QMap<QString, FilePtr>::ConstIterator iterEnd = files.constEnd(); 0074 for (; iter != iterEnd; ++iter) { 0075 d->files.insert(iter.key(), iter.value()->id()); 0076 } 0077 setSerializationOptions(File::ExcludeCreationDate); 0078 } 0079 0080 FileModifyJob::~FileModifyJob() 0081 { 0082 delete d; 0083 } 0084 0085 bool FileModifyJob::createNewRevision() const 0086 { 0087 return d->createNewRevision; 0088 } 0089 0090 void FileModifyJob::setCreateNewRevision(bool createNewRevision) 0091 { 0092 if (isRunning()) { 0093 qCWarning(KGAPIDebug) << "Can't modify createNewRevision property when the job is running"; 0094 return; 0095 } 0096 0097 d->createNewRevision = createNewRevision; 0098 } 0099 0100 bool FileModifyJob::updateModifiedDate() const 0101 { 0102 return d->updateViewedDate; 0103 } 0104 0105 void FileModifyJob::setUpdateModifiedDate(bool updateModifiedDate) 0106 { 0107 if (isRunning()) { 0108 qCWarning(KGAPIDebug) << "Can't modify updateModifiedDate property when the job is running"; 0109 return; 0110 } 0111 0112 d->updateViewedDate = updateModifiedDate; 0113 } 0114 0115 bool FileModifyJob::updateViewedDate() const 0116 { 0117 return d->updateViewedDate; 0118 } 0119 0120 void FileModifyJob::setUpdateViewedDate(bool updateViewedDate) 0121 { 0122 if (isRunning()) { 0123 qCWarning(KGAPIDebug) << "Can't modify updateViewedDate property when job is running"; 0124 return; 0125 } 0126 0127 d->updateViewedDate = updateViewedDate; 0128 } 0129 0130 QUrl FileModifyJob::createUrl(const QString &filePath, const FilePtr &metaData) 0131 { 0132 QUrl url; 0133 0134 if (metaData.isNull()) { 0135 url = DriveService::uploadMediaFileUrl(d->files.value(filePath)); 0136 } else if (filePath.isEmpty()) { 0137 url = DriveService::uploadMetadataFileUrl(metaData->id()); 0138 } else { 0139 url = DriveService::uploadMultipartFileUrl(d->files.value(filePath)); 0140 } 0141 0142 QUrlQuery query(url); 0143 query.addQueryItem(QStringLiteral("newRevision"), Utils::bool2Str(d->createNewRevision)); 0144 query.addQueryItem(QStringLiteral("setModifiedDate"), Utils::bool2Str(d->changeModifiedDate)); 0145 query.addQueryItem(QStringLiteral("updateViewedDate"), Utils::bool2Str(d->updateViewedDate)); 0146 url.setQuery(query); 0147 0148 return url; 0149 } 0150 0151 QNetworkReply *FileModifyJob::dispatch(QNetworkAccessManager *accessManager, const QNetworkRequest &request, const QByteArray &data) 0152 { 0153 return accessManager->put(request, data); 0154 } 0155 0156 #include "moc_filemodifyjob.cpp"