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"