diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.5)
-set(PIM_VERSION "5.11.40")
+set(PIM_VERSION "5.11.41")
set(KGAPI_LIB_VERSION ${PIM_VERSION})
diff --git a/autotests/drive/aboutfetchjobtest.cpp b/autotests/drive/aboutfetchjobtest.cpp
--- a/autotests/drive/aboutfetchjobtest.cpp
+++ b/autotests/drive/aboutfetchjobtest.cpp
@@ -17,7 +17,7 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see .
*/
-
+#include
#include
#include
@@ -32,7 +32,12 @@
using namespace KGAPI2;
+namespace {
+ static const char *LimitedFieldTag = "limited fields";
+}
+
Q_DECLARE_METATYPE(QList)
+Q_DECLARE_METATYPE(KGAPI2::Drive::AboutPtr)
class AboutFetchJobTest : public QObject
{
@@ -43,17 +48,40 @@
NetworkAccessManagerFactory::setFactory(new FakeNetworkAccessManagerFactory);
}
+ void testFetch_data()
+ {
+ QTest::addColumn>("scenarios");
+ QTest::addColumn("about");
+
+ QTest::newRow("")
+ << QList{
+ scenarioFromFile(QFINDTESTDATA("data/about_fetch_request.txt"),
+ QFINDTESTDATA("data/about_fetch_response.txt"))
+ }
+ << aboutFromFile(QFINDTESTDATA("data/about.json"));
+
+ QTest::newRow(LimitedFieldTag)
+ << QList{
+ scenarioFromFile(QFINDTESTDATA("data/about_fetch_limited_fields_request.txt"),
+ QFINDTESTDATA("data/about_fetch_limited_fields_response.txt"))
+ }
+ << aboutFromFile(QFINDTESTDATA("data/about_limited_fields.json"));
+ }
+
void testFetch()
{
- FakeNetworkAccessManagerFactory::get()->setScenarios({
- scenarioFromFile(QFINDTESTDATA("data/about_fetch_request.txt"),
- QFINDTESTDATA("data/about_fetch_response.txt"))
+ QFETCH(QList, scenarios);
+ QFETCH(KGAPI2::Drive::AboutPtr, about);
- });
- const auto about = aboutFromFile(QFINDTESTDATA("data/about.json"));
+ FakeNetworkAccessManagerFactory::get()->setScenarios(scenarios);
auto account = AccountPtr::create(QStringLiteral("MockAccount"), QStringLiteral("MockToken"));
auto job = new Drive::AboutFetchJob(account, nullptr);
+
+ if (strcmp(LimitedFieldTag, QTest::currentDataTag()) == 0) {
+ job->setFields({ Drive::About::Fields::Kind, Drive::About::Fields::PermissionId});
+ }
+
QVERIFY(execJob(job));
const auto items = job->items();
QCOMPARE(items.count(), 1);
diff --git a/autotests/drive/data/about_fetch_limited_fields_request.txt b/autotests/drive/data/about_fetch_limited_fields_request.txt
new file mode 100644
--- /dev/null
+++ b/autotests/drive/data/about_fetch_limited_fields_request.txt
@@ -0,0 +1 @@
+GET https://www.googleapis.com/drive/v2/about?includeSubscribed=true&fields=kind,permissionId&prettyPrint=false
diff --git a/autotests/drive/data/about_fetch_limited_fields_response.txt b/autotests/drive/data/about_fetch_limited_fields_response.txt
new file mode 100644
--- /dev/null
+++ b/autotests/drive/data/about_fetch_limited_fields_response.txt
@@ -0,0 +1,7 @@
+HTTP/1.1 200 OK
+content-type: application/json; charset=UTF-8
+
+{
+ "kind": "drive#about",
+ "permissionId": "07857126568572968161"
+}
diff --git a/autotests/drive/data/about_limited_fields.json b/autotests/drive/data/about_limited_fields.json
new file mode 100644
--- /dev/null
+++ b/autotests/drive/data/about_limited_fields.json
@@ -0,0 +1,4 @@
+{
+ "kind": "drive#about",
+ "permissionId": "07857126568572968161"
+}
diff --git a/examples/teamdrive/mainwindow.cpp b/examples/teamdrive/mainwindow.cpp
--- a/examples/teamdrive/mainwindow.cpp
+++ b/examples/teamdrive/mainwindow.cpp
@@ -263,10 +263,10 @@
query.addQuery(KGAPI2::Drive::FileSearchQuery::Parents, KGAPI2::Drive::FileSearchQuery::In, id);
KGAPI2::Drive::FileFetchJob *fileFetchJob = new KGAPI2::Drive::FileFetchJob(query, m_account, nullptr);
- fileFetchJob->setFields((KGAPI2::Drive::FileFetchJob::BasicFields & ~KGAPI2::Drive::FileFetchJob::Permissions)
- | KGAPI2::Drive::FileFetchJob::Labels
- | KGAPI2::Drive::FileFetchJob::ExportLinks
- | KGAPI2::Drive::FileFetchJob::LastViewedByMeDate);
+ fileFetchJob->setFields({
+ KGAPI2::Drive::File::Fields::Id,
+ KGAPI2::Drive::File::Fields::Title,
+ });
connect(fileFetchJob, &KGAPI2::Job::finished,
this, &MainWindow::slotTeamdriveFetchJobFinished);
}
@@ -309,10 +309,10 @@
const QString id = m_ui->teamdrivePreviewList->selectedItems().at(0)->data(Qt::UserRole).toString();
KGAPI2::Drive::FileFetchJob *fileFetchJob = new KGAPI2::Drive::FileFetchJob(id, m_account, nullptr);
- fileFetchJob->setFields((KGAPI2::Drive::FileFetchJob::BasicFields & ~KGAPI2::Drive::FileFetchJob::Permissions)
- | KGAPI2::Drive::FileFetchJob::Labels
- | KGAPI2::Drive::FileFetchJob::ExportLinks
- | KGAPI2::Drive::FileFetchJob::LastViewedByMeDate);
+ fileFetchJob->setFields({
+ KGAPI2::Drive::File::Fields::Title,
+ KGAPI2::Drive::File::Fields::FileSize,
+ });
connect(fileFetchJob, &KGAPI2::Job::finished,
this, &MainWindow::slotTeamdriveItemFetchJobFinished);
}
diff --git a/src/core/job.h b/src/core/job.h
--- a/src/core/job.h
+++ b/src/core/job.h
@@ -100,6 +100,7 @@
struct StandardParams {
static const QString PrettyPrint;
+ static const QString Fields;
};
/**
@@ -202,6 +203,24 @@
*/
bool prettyPrint() const;
+ /**
+ * @brief Set subset of fields to include in the response.
+ *
+ * Use for better performance.
+ *
+ * @param fields List of fields
+ */
+ void setFields(const QStringList &fields);
+
+ static QString buildSubfields(const QString &field, const QStringList &fields);
+
+ /**
+ * @brief Returns fields selector.
+ *
+ * @return List of fields
+ */
+ QStringList fields() const;
+
/**
* @brief Restarts this job
*
diff --git a/src/core/job.cpp b/src/core/job.cpp
--- a/src/core/job.cpp
+++ b/src/core/job.cpp
@@ -330,6 +330,9 @@
QUrl url = authorizedRequest.url();
QUrlQuery standardParamQuery(url);
+ if (!fields.isEmpty()) {
+ standardParamQuery.addQueryItem(Job::StandardParams::Fields, fields.join(QStringLiteral(",")));
+ }
if (!standardParamQuery.hasQueryItem(Job::StandardParams::PrettyPrint)) {
standardParamQuery.addQueryItem(Job::StandardParams::PrettyPrint, prettyPrint ? QStringLiteral("true") : QStringLiteral("false"));
@@ -351,6 +354,7 @@
/************************* PUBLIC **********************/
const QString Job::StandardParams::PrettyPrint = QStringLiteral("prettyPrint");
+const QString Job::StandardParams::Fields = QStringLiteral("fields");
Job::Job(QObject* parent):
QObject(parent),
@@ -453,6 +457,21 @@
d->prettyPrint = prettyPrint;
}
+
+QStringList Job::fields() const
+{
+ return d->fields;
+}
+
+void Job::setFields(const QStringList &fields)
+{
+ d->fields = fields;
+}
+
+QString Job::buildSubfields(const QString &field, const QStringList &fields) {
+ return QStringLiteral("%1(%2)").arg(field).arg(fields.join(QStringLiteral(",")));
+}
+
void Job::restart()
{
if (d->isRunning) {
diff --git a/src/core/job_p.h b/src/core/job_p.h
--- a/src/core/job_p.h
+++ b/src/core/job_p.h
@@ -82,6 +82,7 @@
QTimer *dispatchTimer;
int maxTimeout;
bool prettyPrint;
+ QStringList fields;
Request currentRequest;
diff --git a/src/drive/about.h b/src/drive/about.h
--- a/src/drive/about.h
+++ b/src/drive/about.h
@@ -221,8 +221,56 @@
typedef QSharedPointer MaxUploadSizePtr;
typedef QList MaxUploadSizesList;
- explicit About(const About &other);
- virtual ~About();
+ struct Fields {
+ static const QString AdditionalRoleInfo;
+ static const QString AdditionalRoles;
+ static const QString BackgroundImageLink;
+ static const QString BytesUsed;
+ static const QString CanCreateTeamDrives;
+ static const QString ColorRgb;
+ static const QString DisplayName;
+ static const QString DomainSharingPolicy;
+ static const QString EmailAddress;
+ static const QString Etag;
+ static const QString ExportFormats;
+ static const QString FeatureName;
+ static const QString FeatureRate;
+ static const QString Features;
+ static const QString FolderColorPalette;
+ static const QString Id;
+ static const QString ImportFormats;
+ static const QString IsAuthenticatedUser;
+ static const QString IsCurrentAppInstalled;
+ static const QString Kind;
+ static const QString LanguageCode;
+ static const QString LargestChangeId;
+ static const QString MaxUploadSizes;
+ static const QString Name;
+ static const QString PermissionId;
+ static const QString Picture;
+ static const QString PrimaryRole;
+ static const QString QuotaBytesByService;
+ static const QString QuotaBytesTotal;
+ static const QString QuotaBytesUsed;
+ static const QString QuotaBytesUsedAggregate;
+ static const QString QuotaBytesUsedInTrash;
+ static const QString QuotaType;
+ static const QString RemainingChangeIds;
+ static const QString RoleSets;
+ static const QString RootFolderId;
+ static const QString SelfLink;
+ static const QString ServiceName;
+ static const QString Size;
+ static const QString Source;
+ static const QString Targets;
+ static const QString TeamDriveThemes;
+ static const QString Type;
+ static const QString Url;
+ static const QString User;
+ };
+
+ About(const About &other);
+ ~About() override;
bool operator==(const About &other) const;
bool operator!=(const About &other) const { return !operator==(other); }
@@ -340,10 +388,10 @@
static AboutPtr fromJSON(const QByteArray &jsonData);
private:
- explicit About();
+ About();
class Private;
- Private *const d;
+ QScopedPointer const d;
friend class Private;
};
diff --git a/src/drive/about.cpp b/src/drive/about.cpp
--- a/src/drive/about.cpp
+++ b/src/drive/about.cpp
@@ -361,6 +361,52 @@
{
}
+const QString About::Fields::AdditionalRoleInfo = QStringLiteral("additionalRoleInfo");
+const QString About::Fields::AdditionalRoles = QStringLiteral("additionalRoles");
+const QString About::Fields::BackgroundImageLink = QStringLiteral("backgroundImageLink");
+const QString About::Fields::BytesUsed = QStringLiteral("bytesUsed");
+const QString About::Fields::CanCreateTeamDrives = QStringLiteral("canCreateTeamDrives");
+const QString About::Fields::ColorRgb = QStringLiteral("colorRgb");
+const QString About::Fields::DisplayName = QStringLiteral("displayName");
+const QString About::Fields::DomainSharingPolicy = QStringLiteral("domainSharingPolicy");
+const QString About::Fields::EmailAddress = QStringLiteral("emailAddress");
+const QString About::Fields::Etag = QStringLiteral("etag");
+const QString About::Fields::ExportFormats = QStringLiteral("exportFormats");
+const QString About::Fields::FeatureName = QStringLiteral("featureName");
+const QString About::Fields::FeatureRate = QStringLiteral("featureRate");
+const QString About::Fields::Features = QStringLiteral("features");
+const QString About::Fields::FolderColorPalette = QStringLiteral("folderColorPalette");
+const QString About::Fields::Id = QStringLiteral("id");
+const QString About::Fields::ImportFormats = QStringLiteral("importFormats");
+const QString About::Fields::IsAuthenticatedUser = QStringLiteral("isAuthenticatedUser");
+const QString About::Fields::IsCurrentAppInstalled = QStringLiteral("isCurrentAppInstalled");
+const QString About::Fields::Kind = QStringLiteral("kind");
+const QString About::Fields::LanguageCode = QStringLiteral("languageCode");
+const QString About::Fields::LargestChangeId = QStringLiteral("largestChangeId");
+const QString About::Fields::MaxUploadSizes = QStringLiteral("maxUploadSizes");
+const QString About::Fields::Name = QStringLiteral("name");
+const QString About::Fields::PermissionId = QStringLiteral("permissionId");
+const QString About::Fields::Picture = QStringLiteral("picture");
+const QString About::Fields::PrimaryRole = QStringLiteral("primaryRole");
+const QString About::Fields::QuotaBytesByService = QStringLiteral("quotaBytesByService");
+const QString About::Fields::QuotaBytesTotal = QStringLiteral("quotaBytesTotal");
+const QString About::Fields::QuotaBytesUsedAggregate = QStringLiteral("quotaBytesUsedAggregate");
+const QString About::Fields::QuotaBytesUsedInTrash = QStringLiteral("quotaBytesUsedInTrash");
+const QString About::Fields::QuotaBytesUsed = QStringLiteral("quotaBytesUsed");
+const QString About::Fields::QuotaType = QStringLiteral("quotaType");
+const QString About::Fields::RemainingChangeIds = QStringLiteral("remainingChangeIds");
+const QString About::Fields::RoleSets = QStringLiteral("roleSets");
+const QString About::Fields::RootFolderId = QStringLiteral("rootFolderId");
+const QString About::Fields::SelfLink = QStringLiteral("selfLink");
+const QString About::Fields::ServiceName = QStringLiteral("serviceName");
+const QString About::Fields::Size = QStringLiteral("size");
+const QString About::Fields::Source = QStringLiteral("source");
+const QString About::Fields::Targets = QStringLiteral("targets");
+const QString About::Fields::TeamDriveThemes = QStringLiteral("teamDriveThemes");
+const QString About::Fields::Type = QStringLiteral("type");
+const QString About::Fields::Url = QStringLiteral("url");
+const QString About::Fields::User = QStringLiteral("user");
+
About::About():
KGAPI2::Object(),
d(new Private)
@@ -373,10 +419,7 @@
{
}
-About::~About()
-{
- delete d;
-}
+About::~About() = default;
bool About::operator==(const About &other) const
{
diff --git a/src/drive/file.h b/src/drive/file.h
--- a/src/drive/file.h
+++ b/src/drive/file.h
@@ -602,6 +602,60 @@
bool isFolder() const;
+ struct Fields {
+ static const QString Items;
+ static const QString SelfLink;
+ static const QString Etag;
+ static const QString Kind;
+ static const QString NextLink;
+ static const QString NextPageToken;
+ static const QString Id;
+ static const QString Title;
+ static const QString MimeType;
+ static const QString Description;
+ static const QString Labels;
+ static const QString CreatedDate;
+ static const QString ModifiedDate;
+ static const QString ModifiedByMeDate;
+ static const QString DownloadUrl;
+ static const QString IndexableText;
+ static const QString UserPermission;
+ static const QString FileExtension;
+ static const QString Md5Checksum;
+ static const QString FileSize;
+ static const QString AlternateLink;
+ static const QString EmbedLink;
+ static const QString SharedWithMeDate;
+ static const QString Parents;
+ static const QString ExportLinks;
+ static const QString OriginalFilename;
+ static const QString OwnerNames;
+ static const QString LastModifiedByMeDate;
+ static const QString Editable;
+ static const QString WritersCanShare;
+ static const QString ThumbnailLink;
+ static const QString LastViewedByMeDate;
+ static const QString WebContentLink;
+ static const QString ExplicitlyTrashed;
+ static const QString ImageMediaMetadata;
+ static const QString Thumbnail;
+ static const QString WebViewLink;
+ static const QString IconLink;
+ static const QString Shared;
+ static const QString Owners;
+ static const QString LastModifyingUser;
+ static const QString AppDataContents;
+ static const QString OpenWithLinks;
+ static const QString DefaultOpenWithLink;
+ static const QString HeadRevisionId;
+ static const QString Copyable;
+ static const QString Properties;
+ static const QString MarkedViewedByMeDate;
+ static const QString Version;
+ static const QString SharingUser;
+ static const QString Permissions;
+ };
+
static FilePtr fromJSON(const QByteArray &jsonData);
static FilesList fromJSONFeed(const QByteArray &jsonData, FeedData &feedData);
static QByteArray toJSON(const FilePtr &file, SerializationOptions options = NoOptions);
diff --git a/src/drive/file.cpp b/src/drive/file.cpp
--- a/src/drive/file.cpp
+++ b/src/drive/file.cpp
@@ -525,7 +525,7 @@
{
const QByteArray ba = QByteArray::fromBase64(map[QStringLiteral("image")].toByteArray());
d->image = QImage::fromData(ba);
- d->mimeType = map[QStringLiteral("mimeType")].toString();
+ d->mimeType = map[Fields::MimeType].toString();
}
File::Thumbnail::Thumbnail(const File::Thumbnail &other):
@@ -655,21 +655,21 @@
FilePtr File::Private::fromJSON(const QVariantMap &map)
{
- if (!map.contains(QStringLiteral("kind")) ||
- map[QStringLiteral("kind")].toString() != QLatin1String("drive#file"))
+ if (!map.contains(File::Fields::Kind) ||
+ map[File::Fields::Kind].toString() != QLatin1String("drive#file"))
{
return FilePtr();
}
FilePtr file(new File());
- file->setEtag(map[QStringLiteral("etag")].toString());
- file->d->id = map[QStringLiteral("id")].toString();
- file->d->selfLink = map[QStringLiteral("selfLink")].toUrl();
- file->d->title = map[QStringLiteral("title")].toString();
- file->d->mimeType = map[QStringLiteral("mimeType")].toString();
- file->d->description = map[QStringLiteral("description")].toString();
-
- const QVariantMap labelsData = map[QStringLiteral("labels")].toMap();
+ file->setEtag(map[Fields::Etag].toString());
+ file->d->id = map[Fields::Id].toString();
+ file->d->selfLink = map[Fields::SelfLink].toUrl();
+ file->d->title = map[Fields::Title].toString();
+ file->d->mimeType = map[Fields::MimeType].toString();
+ file->d->description = map[Fields::Description].toString();
+
+ const QVariantMap labelsData = map[Fields::Labels].toMap();
File::LabelsPtr labels(new File::Labels());
labels->d->starred = labelsData[QStringLiteral("starred")].toBool();
labels->d->hidden = labelsData[QStringLiteral("hidden")].toBool();
@@ -679,33 +679,33 @@
file->d->labels = labels;
// FIXME FIXME FIXME Verify the date format
- file->d->createdDate = QDateTime::fromString(map[QStringLiteral("createdDate")].toString(), Qt::ISODate);
- file->d->modifiedDate = QDateTime::fromString(map[QStringLiteral("modifiedDate")].toString(), Qt::ISODate);
- file->d->modifiedByMeDate = QDateTime::fromString(map[QStringLiteral("modifiedByMeDate")].toString(), Qt::ISODate);
- file->d->downloadUrl = map[QStringLiteral("downloadUrl")].toUrl();
+ file->d->createdDate = QDateTime::fromString(map[Fields::CreatedDate].toString(), Qt::ISODate);
+ file->d->modifiedDate = QDateTime::fromString(map[Fields::ModifiedDate].toString(), Qt::ISODate);
+ file->d->modifiedByMeDate = QDateTime::fromString(map[Fields::ModifiedByMeDate].toString(), Qt::ISODate);
+ file->d->downloadUrl = map[Fields::DownloadUrl].toUrl();
- const QVariantMap indexableTextData = map[QStringLiteral("indexableText")].toMap();
+ const QVariantMap indexableTextData = map[Fields::IndexableText].toMap();
File::IndexableTextPtr indexableText(new File::IndexableText());
indexableText->d->text = indexableTextData[QStringLiteral("text")].toString();
file->d->indexableText = indexableText;
- const QVariantMap userPermissionData = map[QStringLiteral("userPermission")].toMap();
+ const QVariantMap userPermissionData = map[Fields::UserPermission].toMap();
file->d->userPermission = Permission::Private::fromJSON(userPermissionData);
- file->d->fileExtension = map[QStringLiteral("fileExtension")].toString();
- file->d->md5Checksum = map[QStringLiteral("md5Checksum")].toString();
- file->d->fileSize = map[QStringLiteral("fileSize")].toLongLong();
- file->d->alternateLink = map[QStringLiteral("alternateLink")].toUrl();
- file->d->embedLink = map[QStringLiteral("embedLink")].toUrl();
- file->d->sharedWithMeDate = QDateTime::fromString(map[QStringLiteral("sharedWithMeDate")].toString(), Qt::ISODate);
+ file->d->fileExtension = map[Fields::FileExtension].toString();
+ file->d->md5Checksum = map[Fields::Md5Checksum].toString();
+ file->d->fileSize = map[Fields::FileSize].toLongLong();
+ file->d->alternateLink = map[Fields::AlternateLink].toUrl();
+ file->d->embedLink = map[Fields::EmbedLink].toUrl();
+ file->d->sharedWithMeDate = QDateTime::fromString(map[Fields::SharedWithMeDate].toString(), Qt::ISODate);
- const QVariantList parents = map[QStringLiteral("parents")].toList();
+ const QVariantList parents = map[Fields::Parents].toList();
for (const QVariant &parent : parents)
{
file->d->parents << ParentReference::Private::fromJSON(parent.toMap());
}
- const QVariantMap exportLinksData = map[QStringLiteral("exportLinks")].toMap();
+ const QVariantMap exportLinksData = map[Fields::ExportLinks].toMap();
QVariantMap::ConstIterator iter = exportLinksData.constBegin();
for ( ; iter != exportLinksData.constEnd(); ++iter) {
file->d->exportLinks.insert(iter.key(), iter.value().toUrl());
@@ -713,33 +713,33 @@
file->d->originalFileName = map[QStringLiteral("originalFileName")].toString();
file->d->quotaBytesUsed = map[QStringLiteral("quotaBytesUsed")].toLongLong();
- file->d->ownerNames = map[QStringLiteral("ownerNames")].toStringList();
+ file->d->ownerNames = map[Fields::OwnerNames].toStringList();
file->d->lastModifyingUserName = map[QStringLiteral("lastModifyingUserName")].toString();
- file->d->editable = map[QStringLiteral("editable")].toBool();
- file->d->writersCanShare = map[QStringLiteral("writersCanShare")].toBool();
- file->d->thumbnailLink = map[QStringLiteral("thumbnailLink")].toUrl();
- file->d->lastViewedByMeDate = QDateTime::fromString(map[QStringLiteral("lastViewedByMeDate")].toString(), Qt::ISODate);
- file->d->webContentLink = map[QStringLiteral("webContentLink")].toUrl();
- file->d->explicitlyTrashed = map[QStringLiteral("explicitlyTrashed")].toBool();
-
- const QVariantMap imageMetaData = map[QStringLiteral("imageMediaMetadata")].toMap();
+ file->d->editable = map[Fields::Editable].toBool();
+ file->d->writersCanShare = map[Fields::WritersCanShare].toBool();
+ file->d->thumbnailLink = map[Fields::ThumbnailLink].toUrl();
+ file->d->lastViewedByMeDate = QDateTime::fromString(map[Fields::LastViewedByMeDate].toString(), Qt::ISODate);
+ file->d->webContentLink = map[Fields::WebContentLink].toUrl();
+ file->d->explicitlyTrashed = map[Fields::ExplicitlyTrashed].toBool();
+
+ const QVariantMap imageMetaData = map[Fields::ImageMediaMetadata].toMap();
file->d->imageMediaMetadata =
File::ImageMediaMetadataPtr(new File::ImageMediaMetadata(imageMetaData));
- const QVariantMap thumbnailData = map[QStringLiteral("thumbnail")].toMap();
+ const QVariantMap thumbnailData = map[Fields::Thumbnail].toMap();
File::ThumbnailPtr thumbnail(new File::Thumbnail(thumbnailData));
file->d->thumbnail = thumbnail;
- file->d->webViewLink = map[QStringLiteral("webViewLink")].toUrl();
- file->d->iconLink = map[QStringLiteral("iconLink")].toUrl();
- file->d->shared = map[QStringLiteral("shared")].toBool();
+ file->d->webViewLink = map[Fields::WebViewLink].toUrl();
+ file->d->iconLink = map[Fields::IconLink].toUrl();
+ file->d->shared = map[Fields::Shared].toBool();
- const QVariantList ownersList = map[QStringLiteral("owners")].toList();
+ const QVariantList ownersList = map[Fields::Owners].toList();
for (const QVariant &owner : ownersList) {
file->d->owners << User::fromJSON(owner.toMap());
}
- const QVariantMap lastModifyingUser = map[QStringLiteral("lastModifyingUser")].toMap();
+ const QVariantMap lastModifyingUser = map[Fields::LastModifyingUser].toMap();
file->d->lastModifyingUser = User::fromJSON(lastModifyingUser);
return file;
@@ -991,6 +991,58 @@
return (d->mimeType == File::folderMimeType());
}
+const QString File::Fields::Kind = QStringLiteral("kind");
+const QString File::Fields::Items = QStringLiteral("items");
+const QString File::Fields::NextLink = QStringLiteral("nextLink");
+const QString File::Fields::NextPageToken = QStringLiteral("nextPageToken");
+const QString File::Fields::SelfLink = QStringLiteral("selfLink");
+const QString File::Fields::Etag = QStringLiteral("etag");
+const QString File::Fields::Id = QStringLiteral("id");
+const QString File::Fields::Title = QStringLiteral("title");
+const QString File::Fields::MimeType = QStringLiteral("mimeType");
+const QString File::Fields::Description = QStringLiteral("description");
+const QString File::Fields::Labels = QStringLiteral("labels");
+const QString File::Fields::CreatedDate = QStringLiteral("createdDate");
+const QString File::Fields::ModifiedDate = QStringLiteral("modifiedDate");
+const QString File::Fields::ModifiedByMeDate = QStringLiteral("modifiedByMeDate");
+const QString File::Fields::DownloadUrl = QStringLiteral("downloadUrl");
+const QString File::Fields::IndexableText = QStringLiteral("indexableText");
+const QString File::Fields::UserPermission = QStringLiteral("userPermission");
+const QString File::Fields::FileExtension = QStringLiteral("fileExtension");
+const QString File::Fields::Md5Checksum = QStringLiteral("md5Checksum");
+const QString File::Fields::FileSize = QStringLiteral("fileSize");
+const QString File::Fields::AlternateLink = QStringLiteral("alternateLink");
+const QString File::Fields::EmbedLink = QStringLiteral("embedLink");
+const QString File::Fields::SharedWithMeDate = QStringLiteral("sharedWithMeDate");
+const QString File::Fields::Parents = QStringLiteral("parents");
+const QString File::Fields::ExportLinks = QStringLiteral("exportLinks");
+const QString File::Fields::OriginalFilename = QStringLiteral("originalFilename");
+const QString File::Fields::OwnerNames = QStringLiteral("ownerNames");
+const QString File::Fields::LastModifiedByMeDate = QStringLiteral("lastModifiedByMeDate");
+const QString File::Fields::Editable = QStringLiteral("editable");
+const QString File::Fields::WritersCanShare = QStringLiteral("writersCanShare");
+const QString File::Fields::ThumbnailLink = QStringLiteral("thumbnailLink");
+const QString File::Fields::LastViewedByMeDate = QStringLiteral("lastViewedByMeDate");
+const QString File::Fields::WebContentLink = QStringLiteral("webContentLink");
+const QString File::Fields::ExplicitlyTrashed = QStringLiteral("explicitlyTrashed");
+const QString File::Fields::ImageMediaMetadata = QStringLiteral("imageMediaMetadata");
+const QString File::Fields::Thumbnail = QStringLiteral("thumbnail");
+const QString File::Fields::WebViewLink = QStringLiteral("webViewLink");
+const QString File::Fields::IconLink = QStringLiteral("iconLink");
+const QString File::Fields::Shared = QStringLiteral("shared");
+const QString File::Fields::Owners = QStringLiteral("owners");
+const QString File::Fields::LastModifyingUser = QStringLiteral("lastModifyingUser");
+const QString File::Fields::AppDataContents = QStringLiteral("appDataContents");
+const QString File::Fields::OpenWithLinks = QStringLiteral("openWithLinks");
+const QString File::Fields::DefaultOpenWithLink = QStringLiteral("defaultOpenWithLink");
+const QString File::Fields::HeadRevisionId = QStringLiteral("headRevisionId");
+const QString File::Fields::Copyable = QStringLiteral("copyable");
+const QString File::Fields::Properties = QStringLiteral("properties");
+const QString File::Fields::MarkedViewedByMeDate = QStringLiteral("markedViewedByMeDate");
+const QString File::Fields::Version = QStringLiteral("version");
+const QString File::Fields::SharingUser = QStringLiteral("sharingUser");
+const QString File::Fields::Permissions = QStringLiteral("permissions");
+
FilePtr File::fromJSON(const QByteArray &jsonData)
{
QJsonDocument document = QJsonDocument::fromJson(jsonData);
@@ -1018,14 +1070,14 @@
}
const QVariant data = document.toVariant();
const QVariantMap map = data.toMap();
- if (!map.contains(QStringLiteral("kind")) ||
- map[QStringLiteral("kind")].toString() != QLatin1String("drive#fileList"))
+ if (!map.contains(File::Fields::Kind) ||
+ map[Fields::Kind].toString() != QLatin1String("drive#fileList"))
{
return FilesList();
}
FilesList list;
- const QVariantList items = map[QStringLiteral("items")].toList();
+ const QVariantList items = map[File::Fields::Items].toList();
for (const QVariant &item : items) {
const FilePtr file = Private::fromJSON(item.toMap());
@@ -1034,8 +1086,8 @@
}
}
- if (map.contains(QStringLiteral("nextLink"))) {
- feedData.nextPageUrl = map[QStringLiteral("nextLink")].toUrl();
+ if (map.contains(File::Fields::NextLink)) {
+ feedData.nextPageUrl = map[File::Fields::NextLink].toUrl();
}
return list;
@@ -1045,15 +1097,15 @@
{
QVariantMap map;
- map[QStringLiteral("kind")] = QLatin1String("drive#file");
+ map[File::Fields::Kind] = QLatin1String("drive#file");
if (!file->description().isEmpty()) {
- map[QStringLiteral("description")] = file->description();
+ map[Fields::Description] = file->description();
}
if (file->indexableText() && !file->indexableText()->text().isEmpty()) {
QVariantMap indexableText;
indexableText[QStringLiteral("text")] = file->indexableText()->text();
- map[QStringLiteral("indexableText")] = indexableText;
+ map[Fields::IndexableText] = indexableText;
}
if (file->labels()) {
@@ -1063,33 +1115,33 @@
labels[QStringLiteral("starred")] = file->labels()->starred();
labels[QStringLiteral("trashed")] = file->labels()->trashed();
labels[QStringLiteral("viewed")] = file->labels()->viewed();
- map[QStringLiteral("labels")] = labels;
+ map[Fields::Labels] = labels;
}
if (file->lastViewedByMeDate().isValid()) {
- map[QStringLiteral("lastViewedByMeDate")] = file->lastViewedByMeDate().toString(Qt::ISODate);
+ map[Fields::LastViewedByMeDate] = file->lastViewedByMeDate().toString(Qt::ISODate);
}
if (!file->mimeType().isEmpty()) {
- map[QStringLiteral("mimeType")] = file->mimeType();
+ map[Fields::MimeType] = file->mimeType();
}
if (file->modifiedDate().isValid()) {
- map[QStringLiteral("modifiedDate")] = file->modifiedDate().toString(Qt::ISODate);
+ map[Fields::ModifiedDate] = file->modifiedDate().toString(Qt::ISODate);
}
if (file->createdDate().isValid() && !(options & ExcludeCreationDate)) {
- map[QStringLiteral("createdDate")] = file->createdDate().toString(Qt::ISODate);
+ map[Fields::CreatedDate] = file->createdDate().toString(Qt::ISODate);
}
if (file->modifiedByMeDate().isValid()) {
- map[QStringLiteral("modifiedByMeDate")] = file->modifiedByMeDate().toString(Qt::ISODate);
+ map[Fields::ModifiedByMeDate] = file->modifiedByMeDate().toString(Qt::ISODate);
}
if (file->fileSize() > 0) {
- map[QStringLiteral("fileSize")] = file->fileSize();
+ map[Fields::FileSize] = file->fileSize();
}
if (!file->title().isEmpty()) {
- map[QStringLiteral("title")] = file->title();
+ map[Fields::Title] = file->title();
}
QVariantList parents;
@@ -1099,35 +1151,35 @@
parents << ParentReference::Private::toJSON(parent);
}
if (!parents.isEmpty()) {
- map[QStringLiteral("parents")] = parents;
+ map[Fields::Parents] = parents;
}
if (!file->etag().isEmpty()) {
- map[QStringLiteral("etag")] = file->etag();
+ map[Fields::Etag] = file->etag();
}
if (!file->d->id.isEmpty()) {
- map[QStringLiteral("id")] = file->d->id;
+ map[Fields::Id] = file->d->id;
}
if (!file->d->selfLink.isEmpty()) {
- map[QStringLiteral("selfLink")] = file->d->selfLink;
+ map[Fields::SelfLink] = file->d->selfLink;
}
if (!file->d->downloadUrl.isEmpty()) {
- map[QStringLiteral("downloadUrl")] = file->d->downloadUrl;
+ map[Fields::DownloadUrl] = file->d->downloadUrl;
}
if (!file->d->fileExtension.isEmpty()) {
- map[QStringLiteral("fileExtension")] = file->d->fileExtension;
+ map[Fields::FileExtension] = file->d->fileExtension;
}
if (!file->d->md5Checksum.isEmpty()) {
- map[QStringLiteral("md5Checksum")] = file->d->md5Checksum;
+ map[Fields::Md5Checksum] = file->d->md5Checksum;
}
if (!file->d->alternateLink.isEmpty()) {
- map[QStringLiteral("alternateLink")] = file->d->alternateLink;
+ map[Fields::AlternateLink] = file->d->alternateLink;
}
if (!file->d->embedLink.isEmpty()) {
- map[QStringLiteral("embedLink")] = file->d->embedLink;
+ map[Fields::EmbedLink] = file->d->embedLink;
}
if (!file->d->sharedWithMeDate.isNull()) {
- map[QStringLiteral("sharedWithMeDate")] = file->d->sharedWithMeDate.toString(Qt::ISODate);
+ map[Fields::SharedWithMeDate] = file->d->sharedWithMeDate.toString(Qt::ISODate);
}
@@ -1138,38 +1190,38 @@
map[QStringLiteral("quotaBytesUsed")] = file->d->quotaBytesUsed;
}
if (!file->d->ownerNames.isEmpty()) {
- map[QStringLiteral("ownerNames")] = QVariant(file->d->ownerNames);
+ map[Fields::OwnerNames] = QVariant(file->d->ownerNames);
}
if (!file->d->lastModifyingUserName.isEmpty()) {
map[QStringLiteral("lastModifyingUserName")] = file->d->lastModifyingUserName;
}
if (!file->d->editable) { // default is true
- map[QStringLiteral("editable")] = file->d->editable;
+ map[Fields::Editable] = file->d->editable;
}
if (file->d->writersCanShare) { // default is false
- map[QStringLiteral("writersCanShare")] = file->d->writersCanShare;
+ map[Fields::WritersCanShare] = file->d->writersCanShare;
}
if (!file->d->thumbnailLink.isEmpty()) {
- map[QStringLiteral("thumbnailLink")] = file->d->thumbnailLink;
+ map[Fields::ThumbnailLink] = file->d->thumbnailLink;
}
if (!file->d->lastViewedByMeDate.isNull()) {
- map[QStringLiteral("lastViewedByMeDate")] = file->d->lastViewedByMeDate.toString(Qt::ISODate);
+ map[Fields::LastViewedByMeDate] = file->d->lastViewedByMeDate.toString(Qt::ISODate);
}
if (!file->d->webContentLink.isEmpty()) {
- map[QStringLiteral("webContentLink")] = file->d->webContentLink;
+ map[Fields::WebContentLink] = file->d->webContentLink;
}
if (file->d->explicitlyTrashed) {
- map[QStringLiteral("explicitlyTrashed")] = file->d->explicitlyTrashed;
+ map[Fields::ExplicitlyTrashed] = file->d->explicitlyTrashed;
}
if (!file->d->webViewLink.isEmpty()) {
- map[QStringLiteral("webViewLink")] = file->d->webViewLink;
+ map[Fields::WebViewLink] = file->d->webViewLink;
}
if (!file->d->iconLink.isEmpty()) {
- map[QStringLiteral("iconLink")] = file->d->iconLink;
+ map[Fields::IconLink] = file->d->iconLink;
}
if (file->d->shared) {
- map[QStringLiteral("shared")] = file->d->shared;
+ map[Fields::Shared] = file->d->shared;
}
#if 0
@@ -1211,9 +1263,3 @@
QJsonDocument document = QJsonDocument::fromVariant(map);
return document.toJson(QJsonDocument::Compact);
}
-
-
-
-
-
-
diff --git a/src/drive/filefetchjob.h b/src/drive/filefetchjob.h
--- a/src/drive/filefetchjob.h
+++ b/src/drive/filefetchjob.h
@@ -51,58 +51,10 @@
WRITE setUpdateViewedDate)
public:
- enum Fields {
- AllFields = 0ULL,
- Id = 1ULL << 0,
- Title = 1ULL << 1,
- MimeType = 1ULL << 2,
- Description = 1ULL << 3,
- Labels = 1ULL << 4,
- CreatedDate = 1ULL << 5,
- ModifiedDate = 1ULL << 6,
- ModifiedByMeDate = 1ULL << 7,
- DownloadUrl = 1ULL << 8,
- IndexableText = 1ULL << 9,
- UserPermission = 1ULL << 10,
- FileExtension = 1ULL << 11,
- MD5Checksum = 1ULL << 12,
- FileSize = 1ULL << 13,
- AlternateLink = 1ULL << 14,
- EmbedLink = 1ULL << 15,
- SharedWithMeDate = 1ULL << 16,
- Parents = 1ULL << 17,
- ExportLinks = 1ULL << 18,
- OriginalFilename = 1ULL << 19,
- OwnerNames = 1ULL << 20,
- LastModifiedByMeDate = 1ULL << 21,
- Editable = 1ULL << 22,
- WritersCanShare = 1ULL << 23,
- ThumbnailLink = 1ULL << 24,
- LastViewedByMeDate = 1ULL << 25,
- WebContentLink = 1ULL << 26,
- ExplicitlyTrashed = 1ULL << 27,
- ImageMediaMetadata = 1ULL << 28,
- Thumbnail = 1ULL << 29,
- WebViewLink = 1ULL << 30,
- IconLink = 1ULL << 31,
- Shared = 1ULL << 32,
- Owners = 1ULL << 33,
- LastModifyingUser = 1ULL << 34,
- AppDataContents = 1ULL << 35,
- OpenWithLinks = 1ULL << 36,
- DefaultOpenWithLink = 1ULL << 37,
- HeadRevisionId = 1ULL << 38,
- Copyable = 1ULL << 39,
- Properties = 1ULL << 40,
- MarkedViewedByMeDate = 1ULL << 41,
- Version = 1ULL << 42,
- SharingUser = 1ULL << 43,
- Permissions = 1ULL << 44,
-
- BasicFields = Id | Title | MimeType | CreatedDate | ModifiedDate | FileSize | DownloadUrl | Permissions,
- AccessFields = CreatedDate | ModifiedDate | ModifiedByMeDate | LastModifiedByMeDate | LastViewedByMeDate | MarkedViewedByMeDate,
- SharingFields = SharedWithMeDate | WritersCanShare | Shared | Owners | SharingUser | OwnerNames
- // TODO: More?
+ struct FieldShorthands {
+ static const QStringList BasicFields;
+ static const QStringList AccessFields;
+ static const QStringList SharingFields;
};
explicit FileFetchJob(const QString &fileId,
@@ -114,12 +66,12 @@
explicit FileFetchJob(const AccountPtr &account, QObject *parent = nullptr);
~FileFetchJob() override;
+ void setFields(const QStringList &fields);
+ QStringList fields() const;
+
bool updateViewedDate() const;
void setUpdateViewedDate(bool updateViewedDate);
- void setFields(qulonglong fields);
- qulonglong fields() const;
-
/**
* @brief Whether both My Drive and shared drive items should be included in results.
*
diff --git a/src/drive/filefetchjob.cpp b/src/drive/filefetchjob.cpp
--- a/src/drive/filefetchjob.cpp
+++ b/src/drive/filefetchjob.cpp
@@ -40,7 +40,6 @@
public:
Private(FileFetchJob *parent);
void processNext();
- QStringList fieldsToStrings(qulonglong fields);
FileSearchQuery searchQuery;
QStringList filesIDs;
@@ -50,7 +49,7 @@
bool updateViewedDate;
- qulonglong fields;
+ QStringList fields;
private:
FileFetchJob *const q;
@@ -61,182 +60,41 @@
includeItemsFromAllDrives(true),
supportsAllDrives(true),
updateViewedDate(false),
- fields(FileFetchJob::AllFields),
q(parent)
{
}
-
-QStringList FileFetchJob::Private::fieldsToStrings(qulonglong fields)
-{
- if (fields & AllFields) {
- return QStringList();
- }
-
- QStringList fieldsStrings;
- // Always fetch kind
- fieldsStrings << QStringLiteral("kind");
-
- // FIXME: Use QMetaEnum once it supports enums larger than int
- if (fields & Id) {
- fieldsStrings << QStringLiteral("id");
- }
- if (fields & Title) {
- fieldsStrings << QStringLiteral("title");
- }
- if (fields & MimeType) {
- fieldsStrings << QStringLiteral("mimeType");
- }
- if (fields & Description) {
- fieldsStrings << QStringLiteral("description");
- }
- if (fields & Labels) {
- fieldsStrings << QStringLiteral("labels");
- }
- if (fields & CreatedDate) {
- fieldsStrings << QStringLiteral("createdDate");
- }
- if (fields & ModifiedDate) {
- fieldsStrings << QStringLiteral("modifiedDate");
- }
- if (fields & ModifiedByMeDate) {
- fieldsStrings << QStringLiteral("modifiedByMeDate");
- }
- if (fields & DownloadUrl) {
- fieldsStrings << QStringLiteral("downloadUrl");
- }
- if (fields & IndexableText) {
- fieldsStrings << QStringLiteral("indexableText");
- }
- if (fields & UserPermission) {
- fieldsStrings << QStringLiteral("userPermission");
- }
- if (fields & FileExtension) {
- fieldsStrings << QStringLiteral("fileExtension");
- }
- if (fields & MD5Checksum) {
- fieldsStrings << QStringLiteral("md5Checksum");
- }
- if (fields & FileSize) {
- fieldsStrings << QStringLiteral("fileSize");
- }
- if (fields & AlternateLink) {
- fieldsStrings << QStringLiteral("alternateLink");
- }
- if (fields & EmbedLink) {
- fieldsStrings << QStringLiteral("embedLink");
- }
- if (fields & SharedWithMeDate) {
- fieldsStrings << QStringLiteral("sharedWithMeDate");
- }
- if (fields & Parents) {
- fieldsStrings << QStringLiteral("parents");
- }
- if (fields & ExportLinks) {
- fieldsStrings << QStringLiteral("exportLinks");
- }
- if (fields & OriginalFilename) {
- fieldsStrings << QStringLiteral("originalFilename");
- }
- if (fields & OwnerNames) {
- fieldsStrings << QStringLiteral("ownerNames");
- }
- if (fields & LastModifiedByMeDate) {
- fieldsStrings << QStringLiteral("lastModifiedByMeDate");
- }
- if (fields & Editable) {
- fieldsStrings << QStringLiteral("editable");
- }
- if (fields & WritersCanShare) {
- fieldsStrings << QStringLiteral("writersCanShare");
- }
- if (fields & ThumbnailLink) {
- fieldsStrings << QStringLiteral("thumbnailLink");
- }
- if (fields & LastViewedByMeDate) {
- fieldsStrings << QStringLiteral("lastViewedByMeDate");
- }
- if (fields & WebContentLink) {
- fieldsStrings << QStringLiteral("webContentLink");
- }
- if (fields & ExplicitlyTrashed) {
- fieldsStrings << QStringLiteral("explicitlyTrashed");
- }
- if (fields & ImageMediaMetadata) {
- fieldsStrings << QStringLiteral("imageMediaMetadata");
- }
- if (fields & Thumbnail) {
- fieldsStrings << QStringLiteral("thumbnail");
- }
- if (fields & WebViewLink) {
- fieldsStrings << QStringLiteral("webViewLink");
- }
- if (fields & IconLink) {
- fieldsStrings << QStringLiteral("iconLink");
- }
- if (fields & Shared) {
- fieldsStrings << QStringLiteral("shared");
- }
- if (fields & Owners) {
- fieldsStrings << QStringLiteral("owners");
- }
- if (fields & LastModifyingUser) {
- fieldsStrings << QStringLiteral("lastModifyingUser");
- }
- if (fields & AppDataContents) {
- fieldsStrings << QStringLiteral("appDataContents");
- }
- if (fields & OpenWithLinks) {
- fieldsStrings << QStringLiteral("openWithLinks");
- }
- if (fields & DefaultOpenWithLink) {
- fieldsStrings << QStringLiteral("defaultOpenWithLink");
- }
- if (fields & HeadRevisionId) {
- fieldsStrings << QStringLiteral("headRevisionId");
- }
- if (fields & Copyable) {
- fieldsStrings << QStringLiteral("copyable");
- }
- if (fields & Properties) {
- fieldsStrings << QStringLiteral("properties");
- }
- if (fields & MarkedViewedByMeDate) {
- fieldsStrings << QStringLiteral("markedViewedByMeDate");
- }
- if (fields & Version) {
- fieldsStrings << QStringLiteral("version");
- }
- if (fields & SharingUser) {
- fieldsStrings << QStringLiteral("sharingUser");
- }
- if (fields & Permissions) {
- fieldsStrings << QStringLiteral("permissions");
- }
-
- return fieldsStrings;
-}
-
-
void FileFetchJob::Private::processNext()
{
QUrl url;
if (isFeed) {
url = DriveService::fetchFilesUrl();
+
QUrlQuery query(url);
if (!searchQuery.isEmpty()) {
query.addQueryItem(QStringLiteral("q"), searchQuery.serialize());
}
- if (fields != FileFetchJob::AllFields) {
- const QStringList fieldsStrings = fieldsToStrings(fields);
- query.addQueryItem(QStringLiteral("fields"),
- QStringLiteral("etag,kind,nextLink,nextPageToken,selfLink,items(%1)").arg(fieldsStrings.join(QStringLiteral(","))));
- }
query.addQueryItem(QStringLiteral("includeItemsFromAllDrives"), includeItemsFromAllDrives ? QStringLiteral("true") : QStringLiteral("false"));
url.setQuery(query);
+
+ if (!fields.isEmpty()) {
+ // Deserializing requires kind attribute, always force add it
+ if (!fields.contains(File::Fields::Kind)) {
+ fields << File::Fields::Kind;
+ }
+ Job *baseJob = dynamic_cast(q);
+ baseJob->setFields({
+ File::Fields::Etag,
+ File::Fields::Kind,
+ File::Fields::NextLink,
+ File::Fields::NextPageToken,
+ File::Fields::SelfLink,
+ Job::buildSubfields(File::Fields::Items, fields)
+ });
+ }
} else {
if (filesIDs.isEmpty()) {
q->emitFinished();
@@ -245,11 +103,14 @@
const QString fileId = filesIDs.takeFirst();
url = DriveService::fetchFileUrl(fileId);
- if (fields != FileFetchJob::AllFields) {
- const QStringList fieldsStrings = fieldsToStrings(fields);
- QUrlQuery query(url);
- query.addQueryItem(QStringLiteral("fields"), fieldsStrings.join(QStringLiteral(",")));
- url.setQuery(query);
+
+ if (!fields.isEmpty()) {
+ // Deserializing requires kind attribute, always force add it
+ if (!fields.contains(File::Fields::Kind)) {
+ fields << File::Fields::Kind;
+ }
+ Job *baseJob = dynamic_cast(q);
+ baseJob->setFields(fields);
}
}
@@ -319,12 +180,17 @@
d->processNext();
}
-void FileFetchJob::setFields(qulonglong fields)
+void FileFetchJob::setFields(const QStringList &fields)
{
+ if (isRunning()) {
+ qCWarning(KGAPIDebug) << "Called setFields() on running job. Ignoring.";
+ return;
+ }
+
d->fields = fields;
}
-qulonglong FileFetchJob::fields() const
+QStringList FileFetchJob::fields() const
{
return d->fields;
}
@@ -349,6 +215,34 @@
d->supportsAllDrives = supportsAllDrives;
}
+const QStringList FileFetchJob::FieldShorthands::BasicFields = {
+ File::Fields::Id,
+ File::Fields::Title,
+ File::Fields::MimeType,
+ File::Fields::CreatedDate,
+ File::Fields::ModifiedDate,
+ File::Fields::FileSize,
+ File::Fields::DownloadUrl,
+ File::Fields::Permissions
+};
+
+const QStringList FileFetchJob::FieldShorthands::AccessFields = {
+ File::Fields::CreatedDate,
+ File::Fields::ModifiedDate,
+ File::Fields::ModifiedByMeDate,
+ File::Fields::LastModifiedByMeDate,
+ File::Fields::LastViewedByMeDate,
+ File::Fields::MarkedViewedByMeDate
+};
+
+const QStringList FileFetchJob::FieldShorthands::SharingFields = {
+ File::Fields::SharedWithMeDate,
+ File::Fields::WritersCanShare,
+ File::Fields::Shared,
+ File::Fields::Owners,
+ File::Fields::SharingUser,
+ File::Fields::OwnerNames
+};
ObjectsList FileFetchJob::handleReplyWithItems(const QNetworkReply *reply,
const QByteArray &rawData)
diff --git a/src/drive/teamdrive.h b/src/drive/teamdrive.h
--- a/src/drive/teamdrive.h
+++ b/src/drive/teamdrive.h
@@ -57,6 +57,13 @@
{
public:
+ struct Fields {
+ static const QString AdminManagedRestrictions;
+ static const QString CopyRequiresWriterPermission;
+ static const QString DomainUsersOnly;
+ static const QString TeamMembersOnly;
+ };
+
Restrictions();
Restrictions(const Restrictions &other);
~Restrictions();
@@ -143,6 +150,27 @@
{
public:
+ struct Fields {
+ static const QString CanAddChildren;
+ static const QString CanChangeCopyRequiresWriterPermissionRestriction;
+ static const QString CanChangeDomainUsersOnlyRestriction;
+ static const QString CanChangeTeamDriveBackground;
+ static const QString CanChangeTeamMembersOnlyRestriction;
+ static const QString CanComment;
+ static const QString CanCopy;
+ static const QString CanDeleteChildren;
+ static const QString CanDeleteTeamDrive;
+ static const QString CanDownload;
+ static const QString CanEdit;
+ static const QString CanListChildren;
+ static const QString CanManageMembers;
+ static const QString CanReadRevisions;
+ static const QString CanRename;
+ static const QString CanRenameTeamDrive;
+ static const QString CanShare;
+ static const QString CanTrashChildren;
+ };
+
Capabilities();
Capabilities(const Capabilities &other);
~Capabilities();
@@ -274,6 +302,13 @@
{
public:
+ struct Fields {
+ static const QString Id;
+ static const QString XCoordinate;
+ static const QString YCoordinate;
+ static const QString Width;
+ };
+
BackgroundImageFile();
BackgroundImageFile(const BackgroundImageFile &other);
~BackgroundImageFile();
@@ -337,6 +372,23 @@
typedef QSharedPointer BackgroundImageFilePtr;
+ struct Fields {
+ static const QString Kind;
+ static const QString Items;
+ static const QString KindDrive;
+ static const QString PageToken;
+ static const QString NextPageToken;
+ static const QString Id;
+ static const QString Name;
+ static const QString ThemeId;
+ static const QString ColorRgb;
+ static const QString BackgroundImageFile;
+ static const QString BackgroundImageLink;
+ static const QString Capabilities;
+ static const QString CreatedDate;
+ static const QString Restrictions;
+ };
+
Teamdrive();
Teamdrive(const Teamdrive &other);
~Teamdrive() override;
diff --git a/src/drive/teamdrive.cpp b/src/drive/teamdrive.cpp
--- a/src/drive/teamdrive.cpp
+++ b/src/drive/teamdrive.cpp
@@ -29,45 +29,6 @@
namespace {
static const QString ApiKind = QStringLiteral("drive#teamDrive");
static const QString ApiKindList = QStringLiteral("drive#teamDriveList");
- static const QString AdminManagedRestrictionsAttr = QStringLiteral("adminManagedRestrictions");
- static const QString BackgroundImageFileAttr = QStringLiteral("backgroundImageFile");
- static const QString BackgroundImageLinkAttr = QStringLiteral("backgroundImageLink");
- static const QString CanAddChildrenAttr = QStringLiteral("canAddChildren");
- static const QString CanChangeCopyRequiresWriterPermissionRestrictionAttr = QStringLiteral("canChangeCopyRequiresWriterPermissionRestriction");
- static const QString CanChangeDomainUsersOnlyRestrictionAttr = QStringLiteral("canChangeDomainUsersOnlyRestriction");
- static const QString CanChangeTeamDriveBackgroundAttr = QStringLiteral("canChangeTeamDriveBackground");
- static const QString CanChangeTeamMembersOnlyRestrictionAttr = QStringLiteral("canChangeTeamMembersOnlyRestriction");
- static const QString CanCommentAttr = QStringLiteral("canComment");
- static const QString CanCopyAttr = QStringLiteral("canCopy");
- static const QString CanDeleteChildrenAttr = QStringLiteral("canDeleteChildren");
- static const QString CanDeleteTeamDriveAttr = QStringLiteral("canDeleteTeamDrive");
- static const QString CanDownloadAttr = QStringLiteral("canDownload");
- static const QString CanEditAttr = QStringLiteral("canEdit");
- static const QString CanListChildrenAttr = QStringLiteral("canListChildren");
- static const QString CanManageMembersAttr = QStringLiteral("canManageMembers");
- static const QString CanReadRevisionsAttr = QStringLiteral("canReadRevisions");
- static const QString CanRenameAttr = QStringLiteral("canRename");
- static const QString CanRenameTeamDriveAttr = QStringLiteral("canRenameTeamDrive");
- static const QString CanShareAttr = QStringLiteral("canShare");
- static const QString CanTrashChildrenAttr = QStringLiteral("canTrashChildren");
- static const QString CapabilitiesAttr = QStringLiteral("capabilities");
- static const QString ColorRgbAttr = QStringLiteral("colorRgb");
- static const QString CopyRequiresWriterPermissionAttr = QStringLiteral("copyRequiresWriterPermission");
- static const QString CreatedDateAttr = QStringLiteral("createdDate");
- static const QString DomainUsersOnlyAttr = QStringLiteral("domainUsersOnly");
- static const QString IdAttr = QStringLiteral("id");
- static const QString ItemsAttr = QStringLiteral("items");
- static const QString KindAttr = QStringLiteral("kind");
- static const QString KindDriveAttr = QStringLiteral("kind");
- static const QString NameAttr = QStringLiteral("name");
- static const QString PageTokenAttr = QStringLiteral("pageToken");
- static const QString NextPageTokenAttr = QStringLiteral("nextPageToken");
- static const QString RestrictionsAttr = QStringLiteral("restrictions");
- static const QString TeamMembersOnlyAttr = QStringLiteral("teamMembersOnly");
- static const QString ThemeIdAttr = QStringLiteral("themeId");
- static const QString WidthAttr = QStringLiteral("width");
- static const QString XCoordinateAttr = QStringLiteral("xCoordinate");
- static const QString YCoordinateAttr = QStringLiteral("yCoordinate");
}
using namespace KGAPI2;
@@ -399,79 +360,123 @@
TeamdrivePtr Teamdrive::Private::fromJSON(const QVariantMap &map)
{
- if (!map.contains(KindAttr) ||
- map[KindAttr].toString() != ApiKind)
+ if (!map.contains(Teamdrive::Fields::Kind) ||
+ map[Teamdrive::Fields::Kind].toString() != ApiKind)
{
return TeamdrivePtr();
}
auto teamdrive = TeamdrivePtr::create();
- if (map.contains(IdAttr)) {
- teamdrive->d->id = map[IdAttr].toString();
+ if (map.contains(Teamdrive::Fields::Id)) {
+ teamdrive->d->id = map[Teamdrive::Fields::Id].toString();
}
- if (map.contains(NameAttr)) {
- teamdrive->d->name = map[NameAttr].toString();
+ if (map.contains(Teamdrive::Fields::Name)) {
+ teamdrive->d->name = map[Teamdrive::Fields::Name].toString();
}
- if (map.contains(ThemeIdAttr)) {
- teamdrive->d->themeId = map[ThemeIdAttr].toString();
+ if (map.contains(Teamdrive::Fields::ThemeId)) {
+ teamdrive->d->themeId = map[Teamdrive::Fields::ThemeId].toString();
}
- if (map.contains(ColorRgbAttr)) {
- teamdrive->d->colorRgb = map[ColorRgbAttr].toString();
+ if (map.contains(Teamdrive::Fields::ColorRgb)) {
+ teamdrive->d->colorRgb = map[Teamdrive::Fields::ColorRgb].toString();
}
- if (map.contains(BackgroundImageLinkAttr)) {
- teamdrive->d->backgroundImageLink = map[BackgroundImageLinkAttr].toString();
+ if (map.contains(Teamdrive::Fields::BackgroundImageLink)) {
+ teamdrive->d->backgroundImageLink = map[Teamdrive::Fields::BackgroundImageLink].toString();
}
- if (map.contains(CreatedDateAttr)) {
- teamdrive->d->createdDate = QDateTime::fromString(map[CreatedDateAttr].toString(), Qt::ISODate);
+ if (map.contains(Teamdrive::Fields::CreatedDate)) {
+ teamdrive->d->createdDate = QDateTime::fromString(map[Teamdrive::Fields::CreatedDate].toString(), Qt::ISODate);
}
- if (map.contains(BackgroundImageFileAttr)) {
- const QVariantMap backgroundImageFileMap = map[BackgroundImageFileAttr].toMap();
+ if (map.contains(Teamdrive::Fields::BackgroundImageFile)) {
+ const QVariantMap backgroundImageFileMap = map[Teamdrive::Fields::BackgroundImageFile].toMap();
auto backgroundImageFile = BackgroundImageFilePtr::create();
- backgroundImageFile->d->id = backgroundImageFileMap[IdAttr].toString();
- backgroundImageFile->d->xCoordinate = backgroundImageFileMap[XCoordinateAttr].toReal();
- backgroundImageFile->d->yCoordinate = backgroundImageFileMap[YCoordinateAttr].toReal();
- backgroundImageFile->d->width = backgroundImageFileMap[WidthAttr].toReal();
+ backgroundImageFile->d->id = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Id].toString();
+ backgroundImageFile->d->xCoordinate = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::XCoordinate].toReal();
+ backgroundImageFile->d->yCoordinate = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::YCoordinate].toReal();
+ backgroundImageFile->d->width = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Width].toReal();
teamdrive->d->backgroundImageFile = backgroundImageFile;
}
- if (map.contains(CapabilitiesAttr)) {
- const QVariantMap capabilitiesMap = map[CapabilitiesAttr].toMap();
+ if (map.contains(Teamdrive::Fields::Capabilities)) {
+ const QVariantMap capabilitiesMap = map[Teamdrive::Fields::Capabilities].toMap();
auto capabilities = CapabilitiesPtr::create();
- capabilities->d->canAddChildren = capabilitiesMap[CanAddChildrenAttr].toBool();
- capabilities->d->canChangeCopyRequiresWriterPermissionRestriction = capabilitiesMap[CanChangeCopyRequiresWriterPermissionRestrictionAttr].toBool();
- capabilities->d->canChangeDomainUsersOnlyRestriction = capabilitiesMap[CanChangeDomainUsersOnlyRestrictionAttr].toBool();
- capabilities->d->canChangeTeamDriveBackground = capabilitiesMap[CanChangeTeamDriveBackgroundAttr].toBool();
- capabilities->d->canChangeTeamMembersOnlyRestriction = capabilitiesMap[CanChangeTeamMembersOnlyRestrictionAttr].toBool();
- capabilities->d->canComment = capabilitiesMap[CanCommentAttr].toBool();
- capabilities->d->canCopy = capabilitiesMap[CanCopyAttr].toBool();
- capabilities->d->canDeleteChildren = capabilitiesMap[CanDeleteChildrenAttr].toBool();
- capabilities->d->canDeleteTeamDrive = capabilitiesMap[CanDeleteTeamDriveAttr].toBool();
- capabilities->d->canDownload = capabilitiesMap[CanDownloadAttr].toBool();
- capabilities->d->canEdit = capabilitiesMap[CanEditAttr].toBool();
- capabilities->d->canListChildren = capabilitiesMap[CanListChildrenAttr].toBool();
- capabilities->d->canManageMembers = capabilitiesMap[CanManageMembersAttr].toBool();
- capabilities->d->canReadRevisions = capabilitiesMap[CanReadRevisionsAttr].toBool();
- capabilities->d->canRename = capabilitiesMap[CanRenameAttr].toBool();
- capabilities->d->canRenameTeamDrive = capabilitiesMap[CanRenameTeamDriveAttr].toBool();
- capabilities->d->canShare = capabilitiesMap[CanShareAttr].toBool();
- capabilities->d->canTrashChildren = capabilitiesMap[CanTrashChildrenAttr].toBool();
+ capabilities->d->canAddChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanAddChildren].toBool();
+ capabilities->d->canChangeCopyRequiresWriterPermissionRestriction = capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeCopyRequiresWriterPermissionRestriction].toBool();
+ capabilities->d->canChangeDomainUsersOnlyRestriction = capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeDomainUsersOnlyRestriction].toBool();
+ capabilities->d->canChangeTeamDriveBackground = capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamDriveBackground].toBool();
+ capabilities->d->canChangeTeamMembersOnlyRestriction = capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamMembersOnlyRestriction].toBool();
+ capabilities->d->canComment = capabilitiesMap[Teamdrive::Capabilities::Fields::CanComment].toBool();
+ capabilities->d->canCopy = capabilitiesMap[Teamdrive::Capabilities::Fields::CanCopy].toBool();
+ capabilities->d->canDeleteChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteChildren].toBool();
+ capabilities->d->canDeleteTeamDrive = capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteTeamDrive].toBool();
+ capabilities->d->canDownload = capabilitiesMap[Teamdrive::Capabilities::Fields::CanDownload].toBool();
+ capabilities->d->canEdit = capabilitiesMap[Teamdrive::Capabilities::Fields::CanEdit].toBool();
+ capabilities->d->canListChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanListChildren].toBool();
+ capabilities->d->canManageMembers = capabilitiesMap[Teamdrive::Capabilities::Fields::CanManageMembers].toBool();
+ capabilities->d->canReadRevisions = capabilitiesMap[Teamdrive::Capabilities::Fields::CanReadRevisions].toBool();
+ capabilities->d->canRename = capabilitiesMap[Teamdrive::Capabilities::Fields::CanRename].toBool();
+ capabilities->d->canRenameTeamDrive = capabilitiesMap[Teamdrive::Capabilities::Fields::CanRenameTeamDrive].toBool();
+ capabilities->d->canShare = capabilitiesMap[Teamdrive::Capabilities::Fields::CanShare].toBool();
+ capabilities->d->canTrashChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanTrashChildren].toBool();
teamdrive->d->capabilities = capabilities;
}
- if (map.contains(RestrictionsAttr)) {
- const QVariantMap restrictionsMap = map[RestrictionsAttr].toMap();
+ if (map.contains(Teamdrive::Fields::Restrictions)) {
+ const QVariantMap restrictionsMap = map[Teamdrive::Fields::Restrictions].toMap();
auto restrictions = RestrictionsPtr::create();
- restrictions->d->adminManagedRestrictions = restrictionsMap[AdminManagedRestrictionsAttr].toBool();
- restrictions->d->copyRequiresWriterPermission = restrictionsMap[CopyRequiresWriterPermissionAttr].toBool();
- restrictions->d->domainUsersOnly = restrictionsMap[DomainUsersOnlyAttr].toBool();
- restrictions->d->teamMembersOnly = restrictionsMap[TeamMembersOnlyAttr].toBool();
+ restrictions->d->adminManagedRestrictions = restrictionsMap[Teamdrive::Restrictions::Fields::AdminManagedRestrictions].toBool();
+ restrictions->d->copyRequiresWriterPermission = restrictionsMap[Teamdrive::Restrictions::Fields::CopyRequiresWriterPermission].toBool();
+ restrictions->d->domainUsersOnly = restrictionsMap[Teamdrive::Restrictions::Fields::DomainUsersOnly].toBool();
+ restrictions->d->teamMembersOnly = restrictionsMap[Teamdrive::Restrictions::Fields::TeamMembersOnly].toBool();
teamdrive->d->restrictions = restrictions;
}
return teamdrive;
}
+const QString Teamdrive::Restrictions::Fields::AdminManagedRestrictions = QStringLiteral("adminManagedRestrictions");
+const QString Teamdrive::Restrictions::Fields::CopyRequiresWriterPermission = QStringLiteral("copyRequiresWriterPermission");
+const QString Teamdrive::Restrictions::Fields::DomainUsersOnly = QStringLiteral("domainUsersOnly");
+const QString Teamdrive::Restrictions::Fields::TeamMembersOnly = QStringLiteral("teamMembersOnly");
+
+const QString Teamdrive::Capabilities::Fields::CanAddChildren = QStringLiteral("canAddChildren");
+const QString Teamdrive::Capabilities::Fields::CanChangeCopyRequiresWriterPermissionRestriction = QStringLiteral("canChangeCopyRequiresWriterPermissionRestriction");
+const QString Teamdrive::Capabilities::Fields::CanChangeDomainUsersOnlyRestriction = QStringLiteral("canChangeDomainUsersOnlyRestriction");
+const QString Teamdrive::Capabilities::Fields::CanChangeTeamDriveBackground = QStringLiteral("canChangeTeamDriveBackground");
+const QString Teamdrive::Capabilities::Fields::CanChangeTeamMembersOnlyRestriction = QStringLiteral("canChangeTeamMembersOnlyRestriction");
+const QString Teamdrive::Capabilities::Fields::CanComment = QStringLiteral("canComment");
+const QString Teamdrive::Capabilities::Fields::CanCopy = QStringLiteral("canCopy");
+const QString Teamdrive::Capabilities::Fields::CanDeleteChildren = QStringLiteral("canDeleteChildren");
+const QString Teamdrive::Capabilities::Fields::CanDeleteTeamDrive = QStringLiteral("canDeleteTeamDrive");
+const QString Teamdrive::Capabilities::Fields::CanDownload = QStringLiteral("canDownload");
+const QString Teamdrive::Capabilities::Fields::CanEdit = QStringLiteral("canEdit");
+const QString Teamdrive::Capabilities::Fields::CanListChildren = QStringLiteral("canListChildren");
+const QString Teamdrive::Capabilities::Fields::CanManageMembers = QStringLiteral("canManageMembers");
+const QString Teamdrive::Capabilities::Fields::CanReadRevisions = QStringLiteral("canReadRevisions");
+const QString Teamdrive::Capabilities::Fields::CanRename = QStringLiteral("canRename");
+const QString Teamdrive::Capabilities::Fields::CanRenameTeamDrive = QStringLiteral("canRenameTeamDrive");
+const QString Teamdrive::Capabilities::Fields::CanShare = QStringLiteral("canShare");
+const QString Teamdrive::Capabilities::Fields::CanTrashChildren = QStringLiteral("canTrashChildren");
+
+const QString Teamdrive::BackgroundImageFile::Fields::Id = QStringLiteral("id");
+const QString Teamdrive::BackgroundImageFile::Fields::XCoordinate = QStringLiteral("xCoordinate");
+const QString Teamdrive::BackgroundImageFile::Fields::YCoordinate = QStringLiteral("yCoordinate");
+const QString Teamdrive::BackgroundImageFile::Fields::Width = QStringLiteral("width");
+
+const QString Teamdrive::Fields::Items = QStringLiteral("items");
+const QString Teamdrive::Fields::KindDrive = QStringLiteral("kind");
+const QString Teamdrive::Fields::PageToken = QStringLiteral("pageToken");
+const QString Teamdrive::Fields::NextPageToken = QStringLiteral("nextPageToken");
+const QString Teamdrive::Fields::Id = QStringLiteral("id");
+const QString Teamdrive::Fields::Kind = QStringLiteral("kind");
+const QString Teamdrive::Fields::Name = QStringLiteral("name");
+const QString Teamdrive::Fields::ThemeId = QStringLiteral("themeId");
+const QString Teamdrive::Fields::ColorRgb = QStringLiteral("colorRgb");
+const QString Teamdrive::Fields::BackgroundImageFile = QStringLiteral("backgroundImageFile");
+const QString Teamdrive::Fields::BackgroundImageLink = QStringLiteral("backgroundImageLink");
+const QString Teamdrive::Fields::Capabilities = QStringLiteral("capabilities");
+const QString Teamdrive::Fields::CreatedDate = QStringLiteral("createdDate");
+const QString Teamdrive::Fields::Restrictions = QStringLiteral("restrictions");
+
Teamdrive::Teamdrive():
KGAPI2::Object(),
d(new Private)
@@ -598,20 +603,20 @@
const QVariant data = document.toVariant();
const QVariantMap map = data.toMap();
- if (!map.contains(KindAttr) ||
- map[KindAttr].toString() != ApiKindList) {
+ if (!map.contains(Teamdrive::Fields::Kind) ||
+ map[Teamdrive::Fields::Kind].toString() != ApiKindList) {
return TeamdrivesList();
}
- if (map.contains(NextPageTokenAttr)) {
+ if (map.contains(Teamdrive::Fields::NextPageToken)) {
feedData.nextPageUrl = DriveService::fetchTeamdrivesUrl();
QUrlQuery query(feedData.nextPageUrl);
- query.addQueryItem(PageTokenAttr, map.value(NextPageTokenAttr).toString());
+ query.addQueryItem(Teamdrive::Fields::PageToken, map.value(Teamdrive::Fields::NextPageToken).toString());
feedData.nextPageUrl.setQuery(query);
}
TeamdrivesList list;
- const QVariantList items = map[ItemsAttr].toList();
+ const QVariantList items = map[Teamdrive::Fields::Items].toList();
for (const QVariant & item : items) {
const TeamdrivePtr teamdrive = Private::fromJSON(item.toMap());
@@ -626,65 +631,65 @@
QByteArray Teamdrive::toJSON(const TeamdrivePtr &teamdrive)
{
QVariantMap teamDriveMap;
- teamDriveMap[KindAttr] = ApiKind;
+ teamDriveMap[Teamdrive::Fields::Kind] = ApiKind;
if (!teamdrive->id().isEmpty()) {
- teamDriveMap[IdAttr] = teamdrive->id();
+ teamDriveMap[Teamdrive::Fields::Id] = teamdrive->id();
}
if (!teamdrive->name().isEmpty()) {
- teamDriveMap[NameAttr] = teamdrive->name();
+ teamDriveMap[Teamdrive::Fields::Name] = teamdrive->name();
}
if (!teamdrive->themeId().isEmpty()) {
- teamDriveMap[ThemeIdAttr] = teamdrive->themeId();
+ teamDriveMap[Teamdrive::Fields::ThemeId] = teamdrive->themeId();
}
if (!teamdrive->colorRgb().isEmpty()) {
- teamDriveMap[ColorRgbAttr] = teamdrive->colorRgb();
+ teamDriveMap[Teamdrive::Fields::ColorRgb] = teamdrive->colorRgb();
}
if (!teamdrive->backgroundImageLink().isEmpty()) {
- teamDriveMap[BackgroundImageLinkAttr] = teamdrive->backgroundImageLink();
+ teamDriveMap[Teamdrive::Fields::BackgroundImageLink] = teamdrive->backgroundImageLink();
}
if (teamdrive->createdDate().isValid()) {
- teamDriveMap[CreatedDateAttr] = teamdrive->createdDate();
+ teamDriveMap[Teamdrive::Fields::CreatedDate] = teamdrive->createdDate();
}
if (teamdrive->restrictions()) {
QVariantMap restrictionsMap;
- restrictionsMap[AdminManagedRestrictionsAttr] = teamdrive->restrictions()->adminManagedRestrictions();
- restrictionsMap[CopyRequiresWriterPermissionAttr] = teamdrive->restrictions()->copyRequiresWriterPermission();
- restrictionsMap[DomainUsersOnlyAttr] = teamdrive->restrictions()->domainUsersOnly();
- restrictionsMap[TeamMembersOnlyAttr] = teamdrive->restrictions()->teamMembersOnly();
- teamDriveMap[RestrictionsAttr] = restrictionsMap;
+ restrictionsMap[Teamdrive::Restrictions::Fields::AdminManagedRestrictions] = teamdrive->restrictions()->adminManagedRestrictions();
+ restrictionsMap[Teamdrive::Restrictions::Fields::CopyRequiresWriterPermission] = teamdrive->restrictions()->copyRequiresWriterPermission();
+ restrictionsMap[Teamdrive::Restrictions::Fields::DomainUsersOnly] = teamdrive->restrictions()->domainUsersOnly();
+ restrictionsMap[Teamdrive::Restrictions::Fields::TeamMembersOnly] = teamdrive->restrictions()->teamMembersOnly();
+ teamDriveMap[Teamdrive::Fields::Restrictions] = restrictionsMap;
}
if (teamdrive->backgroundImageFile()) {
QVariantMap backgroundImageFileMap;
- backgroundImageFileMap[IdAttr] = teamdrive->backgroundImageFile()->id();
- backgroundImageFileMap[XCoordinateAttr] = teamdrive->backgroundImageFile()->xCoordinate();
- backgroundImageFileMap[YCoordinateAttr] = teamdrive->backgroundImageFile()->yCoordinate();
- backgroundImageFileMap[WidthAttr] = teamdrive->backgroundImageFile()->width();
- teamDriveMap[BackgroundImageFileAttr] = backgroundImageFileMap;
+ backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Id] = teamdrive->backgroundImageFile()->id();
+ backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::XCoordinate] = teamdrive->backgroundImageFile()->xCoordinate();
+ backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::YCoordinate] = teamdrive->backgroundImageFile()->yCoordinate();
+ backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Width] = teamdrive->backgroundImageFile()->width();
+ teamDriveMap[Teamdrive::Fields::BackgroundImageFile] = backgroundImageFileMap;
}
if (teamdrive->capabilities()) {
QVariantMap capabilitiesMap;
- capabilitiesMap[CanAddChildrenAttr] = teamdrive->capabilities()->canAddChildren();
- capabilitiesMap[CanChangeCopyRequiresWriterPermissionRestrictionAttr] = teamdrive->capabilities()->canChangeCopyRequiresWriterPermissionRestriction();
- capabilitiesMap[CanChangeDomainUsersOnlyRestrictionAttr] = teamdrive->capabilities()->canChangeDomainUsersOnlyRestriction();
- capabilitiesMap[CanChangeTeamDriveBackgroundAttr] = teamdrive->capabilities()->canChangeTeamDriveBackground();
- capabilitiesMap[CanChangeTeamMembersOnlyRestrictionAttr] = teamdrive->capabilities()->canChangeTeamMembersOnlyRestriction();
- capabilitiesMap[CanCommentAttr] = teamdrive->capabilities()->canComment();
- capabilitiesMap[CanCopyAttr] = teamdrive->capabilities()->canCopy();
- capabilitiesMap[CanDeleteChildrenAttr] = teamdrive->capabilities()->canDeleteChildren();
- capabilitiesMap[CanDeleteTeamDriveAttr] = teamdrive->capabilities()->canDeleteTeamDrive();
- capabilitiesMap[CanDownloadAttr] = teamdrive->capabilities()->canDownload();
- capabilitiesMap[CanEditAttr] = teamdrive->capabilities()->canEdit();
- capabilitiesMap[CanListChildrenAttr] = teamdrive->capabilities()->canListChildren();
- capabilitiesMap[CanManageMembersAttr] = teamdrive->capabilities()->canManageMembers();
- capabilitiesMap[CanReadRevisionsAttr] = teamdrive->capabilities()->canReadRevisions();
- capabilitiesMap[CanRenameAttr] = teamdrive->capabilities()->canRename();
- capabilitiesMap[CanRenameTeamDriveAttr] = teamdrive->capabilities()->canRenameTeamDrive();
- capabilitiesMap[CanShareAttr] = teamdrive->capabilities()->canShare();
- capabilitiesMap[CanTrashChildrenAttr] = teamdrive->capabilities()->canTrashChildren();
- teamDriveMap[CapabilitiesAttr] = capabilitiesMap;
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanAddChildren] = teamdrive->capabilities()->canAddChildren();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeCopyRequiresWriterPermissionRestriction] = teamdrive->capabilities()->canChangeCopyRequiresWriterPermissionRestriction();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeDomainUsersOnlyRestriction] = teamdrive->capabilities()->canChangeDomainUsersOnlyRestriction();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamDriveBackground] = teamdrive->capabilities()->canChangeTeamDriveBackground();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamMembersOnlyRestriction] = teamdrive->capabilities()->canChangeTeamMembersOnlyRestriction();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanComment] = teamdrive->capabilities()->canComment();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanCopy] = teamdrive->capabilities()->canCopy();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteChildren] = teamdrive->capabilities()->canDeleteChildren();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteTeamDrive] = teamdrive->capabilities()->canDeleteTeamDrive();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanDownload] = teamdrive->capabilities()->canDownload();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanEdit] = teamdrive->capabilities()->canEdit();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanListChildren] = teamdrive->capabilities()->canListChildren();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanManageMembers] = teamdrive->capabilities()->canManageMembers();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanReadRevisions] = teamdrive->capabilities()->canReadRevisions();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanRename] = teamdrive->capabilities()->canRename();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanRenameTeamDrive] = teamdrive->capabilities()->canRenameTeamDrive();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanShare] = teamdrive->capabilities()->canShare();
+ capabilitiesMap[Teamdrive::Capabilities::Fields::CanTrashChildren] = teamdrive->capabilities()->canTrashChildren();
+ teamDriveMap[Teamdrive::Fields::Capabilities] = capabilitiesMap;
}
QJsonDocument document = QJsonDocument::fromVariant(teamDriveMap);
diff --git a/src/drive/teamdrivefetchjob.h b/src/drive/teamdrivefetchjob.h
--- a/src/drive/teamdrivefetchjob.h
+++ b/src/drive/teamdrivefetchjob.h
@@ -77,6 +77,9 @@
void setUseDomainAdminAccess(bool useDomainAdminAccess);
bool useDomainAdminAccess() const;
+ void setFields(const QStringList &fields);
+ QStringList fields() const;
+
protected:
void start() override;
KGAPI2::ObjectsList handleReplyWithItems(const QNetworkReply *reply,
diff --git a/src/drive/teamdrivefetchjob.cpp b/src/drive/teamdrivefetchjob.cpp
--- a/src/drive/teamdrivefetchjob.cpp
+++ b/src/drive/teamdrivefetchjob.cpp
@@ -51,6 +51,8 @@
int maxResults = 0;
bool useDomainAdminAccess = false;
+ QStringList fields;
+
private:
TeamdriveFetchJob *const q;
};
@@ -116,6 +118,21 @@
return d->useDomainAdminAccess;
}
+void TeamdriveFetchJob::setFields(const QStringList &fields)
+{
+ if (isRunning()) {
+ qCWarning(KGAPIDebug) << "Called setFields() on running job. Ignoring.";
+ return;
+ }
+
+ d->fields = fields;
+}
+
+QStringList TeamdriveFetchJob::fields() const
+{
+ return d->fields;
+}
+
void TeamdriveFetchJob::start()
{
QUrl url;
@@ -124,6 +141,13 @@
applyRequestParameters(url);
} else {
url = DriveService::fetchTeamdriveUrl(d->teamdriveId);
+ if (!d->fields.isEmpty()) {
+ // Deserializing requires kind attribute, always force add it
+ if (!d->fields.contains(Teamdrive::Fields::Kind)) {
+ d->fields << Teamdrive::Fields::Kind;
+ }
+ Job::setFields(d->fields);
+ }
}
QNetworkRequest request(url);
@@ -177,5 +201,17 @@
if (!d->searchQuery.isEmpty()) {
query.addQueryItem(QStringLiteral("q"), d->searchQuery.serialize());
}
+ if (!d->fields.isEmpty()) {
+ // Deserializing requires kind attribute, always force add it
+ if (!d->fields.contains(Teamdrive::Fields::Kind)) {
+ d->fields << Teamdrive::Fields::Kind;
+ }
+ QString itemFields = Job::buildSubfields(Teamdrive::Fields::Items, d->fields);
+ Job::setFields({
+ Teamdrive::Fields::Kind,
+ Teamdrive::Fields::NextPageToken,
+ itemFields
+ });
+ }
url.setQuery(query);
}