File indexing completed on 2024-05-12 05:22:16
0001 /* 0002 SPDX-FileCopyrightText: 2012 Andrius da Costa Ribas <andriusmao@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "about.h" 0008 #include "debug.h" 0009 #include "user.h" 0010 #include "utils.h" 0011 #include "utils_p.h" 0012 0013 #include <QJsonDocument> 0014 0015 using namespace KGAPI2; 0016 using namespace KGAPI2::Drive; 0017 0018 ///// DriveAbout::Format 0019 0020 class Q_DECL_HIDDEN About::Format::Private 0021 { 0022 public: 0023 Private(); 0024 Private(const Private &other); 0025 0026 QString source; 0027 QStringList targets; 0028 }; 0029 0030 About::Format::Private::Private() 0031 { 0032 } 0033 0034 About::Format::Private::Private(const Private &other) 0035 : source(other.source) 0036 , targets(other.targets) 0037 { 0038 } 0039 0040 About::Format::Format() 0041 : d(new Private) 0042 { 0043 } 0044 0045 About::Format::Format(const About::Format &other) 0046 : d(new Private(*(other.d))) 0047 { 0048 } 0049 0050 About::Format::~Format() 0051 { 0052 delete d; 0053 } 0054 0055 bool About::Format::operator==(const About::Format &other) const 0056 { 0057 GAPI_COMPARE(source) 0058 GAPI_COMPARE(targets) 0059 return true; 0060 } 0061 0062 QString About::Format::source() const 0063 { 0064 return d->source; 0065 } 0066 0067 QStringList About::Format::targets() const 0068 { 0069 return d->targets; 0070 } 0071 0072 ///// DriveAbout::AdditionalRoleInfo::RoleSet 0073 0074 class Q_DECL_HIDDEN About::AdditionalRoleInfo::RoleSet::Private 0075 { 0076 public: 0077 Private(); 0078 Private(const Private &other); 0079 0080 QString primaryRole; 0081 QStringList additionalRoles; 0082 }; 0083 0084 About::AdditionalRoleInfo::RoleSet::Private::Private() 0085 { 0086 } 0087 0088 About::AdditionalRoleInfo::RoleSet::Private::Private(const Private &other) 0089 : primaryRole(other.primaryRole) 0090 , additionalRoles(other.additionalRoles) 0091 { 0092 } 0093 0094 About::AdditionalRoleInfo::RoleSet::RoleSet() 0095 : d(new Private) 0096 { 0097 } 0098 0099 About::AdditionalRoleInfo::RoleSet::RoleSet(const About::AdditionalRoleInfo::RoleSet &other) 0100 : d(new Private(*(other.d))) 0101 { 0102 } 0103 0104 About::AdditionalRoleInfo::RoleSet::~RoleSet() 0105 { 0106 delete d; 0107 } 0108 0109 bool About::AdditionalRoleInfo::RoleSet::operator==(const RoleSet &other) const 0110 { 0111 GAPI_COMPARE(primaryRole) 0112 GAPI_COMPARE(additionalRoles) 0113 return true; 0114 } 0115 0116 QString About::AdditionalRoleInfo::RoleSet::primaryRole() const 0117 { 0118 return d->primaryRole; 0119 } 0120 0121 QStringList About::AdditionalRoleInfo::RoleSet::additionalRoles() const 0122 { 0123 return d->additionalRoles; 0124 } 0125 0126 ///// DriveAbout::AdditionalRoleInfo 0127 0128 class Q_DECL_HIDDEN About::AdditionalRoleInfo::Private 0129 { 0130 public: 0131 Private(); 0132 Private(const Private &other); 0133 0134 QString type; 0135 RoleSetsList roleSets; 0136 }; 0137 0138 About::AdditionalRoleInfo::Private::Private() 0139 { 0140 } 0141 0142 About::AdditionalRoleInfo::Private::Private(const Private &other) 0143 : type(other.type) 0144 , roleSets(other.roleSets) 0145 { 0146 } 0147 0148 About::AdditionalRoleInfo::AdditionalRoleInfo() 0149 : d(new Private) 0150 { 0151 } 0152 0153 About::AdditionalRoleInfo::AdditionalRoleInfo(const About::AdditionalRoleInfo &other) 0154 : d(new Private(*(other.d))) 0155 { 0156 } 0157 0158 About::AdditionalRoleInfo::~AdditionalRoleInfo() 0159 { 0160 delete d; 0161 } 0162 0163 bool About::AdditionalRoleInfo::operator==(const AdditionalRoleInfo &other) const 0164 { 0165 GAPI_COMPARE(type) 0166 GAPI_COMPARE_CONTAINERS(roleSets) 0167 return true; 0168 } 0169 0170 QString About::AdditionalRoleInfo::type() const 0171 { 0172 return d->type; 0173 } 0174 0175 About::AdditionalRoleInfo::RoleSetsList About::AdditionalRoleInfo::roleSets() const 0176 { 0177 return d->roleSets; 0178 } 0179 0180 ///// DriveAbout::Feature 0181 0182 class Q_DECL_HIDDEN About::Feature::Private 0183 { 0184 public: 0185 Private(); 0186 Private(const Private &other); 0187 0188 QString featureName; 0189 qreal featureRate; 0190 }; 0191 0192 About::Feature::Private::Private() 0193 : featureRate(-1) 0194 { 0195 } 0196 0197 About::Feature::Private::Private(const Private &other) 0198 : featureName(other.featureName) 0199 , featureRate(other.featureRate) 0200 { 0201 } 0202 0203 About::Feature::Feature() 0204 : d(new Private) 0205 { 0206 } 0207 0208 About::Feature::Feature(const About::Feature &other) 0209 : d(new Private(*(other.d))) 0210 { 0211 } 0212 0213 About::Feature::~Feature() 0214 { 0215 delete d; 0216 } 0217 0218 bool About::Feature::operator==(const Feature &other) const 0219 { 0220 GAPI_COMPARE(featureName) 0221 GAPI_COMPARE(featureRate) 0222 return true; 0223 } 0224 0225 QString About::Feature::featureName() const 0226 { 0227 return d->featureName; 0228 } 0229 0230 qreal About::Feature::featureRate() const 0231 { 0232 return d->featureRate; 0233 } 0234 0235 ///// DriveAbout::MaxUploadSize 0236 0237 class Q_DECL_HIDDEN About::MaxUploadSize::Private 0238 { 0239 public: 0240 Private(); 0241 Private(const Private &other); 0242 0243 QString type; 0244 qlonglong size; 0245 }; 0246 0247 About::MaxUploadSize::Private::Private() 0248 : size(-1) 0249 { 0250 } 0251 0252 About::MaxUploadSize::Private::Private(const Private &other) 0253 : type(other.type) 0254 , size(other.size) 0255 { 0256 } 0257 0258 About::MaxUploadSize::MaxUploadSize() 0259 : d(new Private) 0260 { 0261 } 0262 0263 About::MaxUploadSize::MaxUploadSize(const About::MaxUploadSize &other) 0264 : d(new Private(*(other.d))) 0265 { 0266 } 0267 0268 About::MaxUploadSize::~MaxUploadSize() 0269 { 0270 delete d; 0271 } 0272 0273 bool About::MaxUploadSize::operator==(const MaxUploadSize &other) const 0274 { 0275 GAPI_COMPARE(type) 0276 GAPI_COMPARE(size) 0277 return true; 0278 } 0279 0280 QString About::MaxUploadSize::type() const 0281 { 0282 return d->type; 0283 } 0284 0285 qlonglong About::MaxUploadSize::size() const 0286 { 0287 return d->size; 0288 } 0289 0290 ///// DriveAbout 0291 0292 class Q_DECL_HIDDEN About::Private 0293 { 0294 public: 0295 Private(); 0296 Private(const Private &other); 0297 0298 QUrl selfLink; 0299 QString name; 0300 qlonglong quotaBytesTotal; 0301 qlonglong quotaBytesUsed; 0302 qlonglong quotaBytesUsedInTrash; 0303 qlonglong quotaBytesUsedAggregate; 0304 qlonglong largestChangeId; 0305 qlonglong remainingChangeIds; 0306 QString rootFolderId; 0307 QString domainSharingPolicy; 0308 FormatsList importFormats; 0309 FormatsList exportFormats; 0310 AdditionalRoleInfosList additionalRoleInfo; 0311 FeaturesList features; 0312 MaxUploadSizesList maxUploadSizes; 0313 QString permissionId; 0314 bool isCurrentAppInstalled; 0315 bool canCreateDrives; 0316 UserPtr user; 0317 }; 0318 0319 About::Private::Private() 0320 : quotaBytesTotal(-1) 0321 , quotaBytesUsed(-1) 0322 , quotaBytesUsedInTrash(-1) 0323 , quotaBytesUsedAggregate(-1) 0324 , largestChangeId(-1) 0325 , remainingChangeIds(-1) 0326 , isCurrentAppInstalled(false) 0327 , canCreateDrives(false) 0328 { 0329 } 0330 0331 About::Private::Private(const About::Private &other) 0332 : selfLink(other.selfLink) 0333 , name(other.name) 0334 , quotaBytesTotal(other.quotaBytesTotal) 0335 , quotaBytesUsed(other.quotaBytesUsed) 0336 , quotaBytesUsedInTrash(other.quotaBytesUsedInTrash) 0337 , quotaBytesUsedAggregate(other.quotaBytesUsedAggregate) 0338 , largestChangeId(other.largestChangeId) 0339 , remainingChangeIds(other.remainingChangeIds) 0340 , rootFolderId(other.rootFolderId) 0341 , domainSharingPolicy(other.domainSharingPolicy) 0342 , importFormats(other.importFormats) 0343 , exportFormats(other.exportFormats) 0344 , additionalRoleInfo(other.additionalRoleInfo) 0345 , features(other.features) 0346 , maxUploadSizes(other.maxUploadSizes) 0347 , permissionId(other.permissionId) 0348 , isCurrentAppInstalled(other.isCurrentAppInstalled) 0349 , canCreateDrives(other.canCreateDrives) 0350 , user(other.user) 0351 { 0352 } 0353 0354 const QString About::Fields::AdditionalRoleInfo = QStringLiteral("additionalRoleInfo"); 0355 const QString About::Fields::AdditionalRoles = QStringLiteral("additionalRoles"); 0356 const QString About::Fields::BackgroundImageLink = QStringLiteral("backgroundImageLink"); 0357 const QString About::Fields::BytesUsed = QStringLiteral("bytesUsed"); 0358 const QString About::Fields::CanCreateDrives = QStringLiteral("canCreateDrives"); 0359 const QString About::Fields::ColorRgb = QStringLiteral("colorRgb"); 0360 const QString About::Fields::DisplayName = QStringLiteral("displayName"); 0361 const QString About::Fields::DomainSharingPolicy = QStringLiteral("domainSharingPolicy"); 0362 const QString About::Fields::EmailAddress = QStringLiteral("emailAddress"); 0363 const QString About::Fields::Etag = QStringLiteral("etag"); 0364 const QString About::Fields::ExportFormats = QStringLiteral("exportFormats"); 0365 const QString About::Fields::FeatureName = QStringLiteral("featureName"); 0366 const QString About::Fields::FeatureRate = QStringLiteral("featureRate"); 0367 const QString About::Fields::Features = QStringLiteral("features"); 0368 const QString About::Fields::FolderColorPalette = QStringLiteral("folderColorPalette"); 0369 const QString About::Fields::Id = QStringLiteral("id"); 0370 const QString About::Fields::ImportFormats = QStringLiteral("importFormats"); 0371 const QString About::Fields::IsAuthenticatedUser = QStringLiteral("isAuthenticatedUser"); 0372 const QString About::Fields::IsCurrentAppInstalled = QStringLiteral("isCurrentAppInstalled"); 0373 const QString About::Fields::Kind = QStringLiteral("kind"); 0374 const QString About::Fields::LanguageCode = QStringLiteral("languageCode"); 0375 const QString About::Fields::LargestChangeId = QStringLiteral("largestChangeId"); 0376 const QString About::Fields::MaxUploadSizes = QStringLiteral("maxUploadSizes"); 0377 const QString About::Fields::Name = QStringLiteral("name"); 0378 const QString About::Fields::PermissionId = QStringLiteral("permissionId"); 0379 const QString About::Fields::Picture = QStringLiteral("picture"); 0380 const QString About::Fields::PrimaryRole = QStringLiteral("primaryRole"); 0381 const QString About::Fields::QuotaBytesByService = QStringLiteral("quotaBytesByService"); 0382 const QString About::Fields::QuotaBytesTotal = QStringLiteral("quotaBytesTotal"); 0383 const QString About::Fields::QuotaBytesUsedAggregate = QStringLiteral("quotaBytesUsedAggregate"); 0384 const QString About::Fields::QuotaBytesUsedInTrash = QStringLiteral("quotaBytesUsedInTrash"); 0385 const QString About::Fields::QuotaBytesUsed = QStringLiteral("quotaBytesUsed"); 0386 const QString About::Fields::QuotaType = QStringLiteral("quotaType"); 0387 const QString About::Fields::RemainingChangeIds = QStringLiteral("remainingChangeIds"); 0388 const QString About::Fields::RoleSets = QStringLiteral("roleSets"); 0389 const QString About::Fields::RootFolderId = QStringLiteral("rootFolderId"); 0390 const QString About::Fields::SelfLink = QStringLiteral("selfLink"); 0391 const QString About::Fields::ServiceName = QStringLiteral("serviceName"); 0392 const QString About::Fields::Size = QStringLiteral("size"); 0393 const QString About::Fields::Source = QStringLiteral("source"); 0394 const QString About::Fields::Targets = QStringLiteral("targets"); 0395 const QString About::Fields::TeamDriveThemes = QStringLiteral("teamDriveThemes"); 0396 const QString About::Fields::Type = QStringLiteral("type"); 0397 const QString About::Fields::Url = QStringLiteral("url"); 0398 const QString About::Fields::User = QStringLiteral("user"); 0399 0400 About::About() 0401 : KGAPI2::Object() 0402 , d(new Private) 0403 { 0404 } 0405 0406 About::About(const About &other) 0407 : KGAPI2::Object(other) 0408 , d(new Private(*(other.d))) 0409 { 0410 } 0411 0412 About::~About() = default; 0413 0414 bool About::operator==(const About &other) const 0415 { 0416 if (!Object::operator==(other)) { 0417 return false; 0418 } 0419 0420 GAPI_COMPARE(selfLink) 0421 GAPI_COMPARE(name) 0422 GAPI_COMPARE(quotaBytesTotal) 0423 GAPI_COMPARE(quotaBytesUsed) 0424 GAPI_COMPARE(quotaBytesUsedInTrash) 0425 GAPI_COMPARE(quotaBytesUsedInTrash) 0426 GAPI_COMPARE(largestChangeId) 0427 GAPI_COMPARE(remainingChangeIds) 0428 GAPI_COMPARE(rootFolderId) 0429 GAPI_COMPARE(domainSharingPolicy) 0430 GAPI_COMPARE_CONTAINERS(importFormats) 0431 GAPI_COMPARE_CONTAINERS(exportFormats) 0432 GAPI_COMPARE_CONTAINERS(additionalRoleInfo) 0433 GAPI_COMPARE_CONTAINERS(features) 0434 GAPI_COMPARE_CONTAINERS(maxUploadSizes) 0435 GAPI_COMPARE(permissionId) 0436 GAPI_COMPARE(isCurrentAppInstalled) 0437 GAPI_COMPARE(canCreateDrives) 0438 GAPI_COMPARE_SHAREDPTRS(user) 0439 return true; 0440 } 0441 0442 QUrl About::selfLink() const 0443 { 0444 return d->selfLink; 0445 } 0446 0447 QString About::name() const 0448 { 0449 return d->name; 0450 } 0451 0452 qlonglong About::quotaBytesTotal() const 0453 { 0454 return d->quotaBytesTotal; 0455 } 0456 0457 qlonglong About::quotaBytesUsed() const 0458 { 0459 return d->quotaBytesUsed; 0460 } 0461 0462 qlonglong About::quotaBytesUsedInTrash() const 0463 { 0464 return d->quotaBytesUsedInTrash; 0465 } 0466 0467 qlonglong About::quotaBytesUsedAggregate() const 0468 { 0469 return d->quotaBytesUsedAggregate; 0470 } 0471 0472 #ifndef KGAPIDRIVE_NO_DEPRECATED 0473 qlonglong About::quotaBytesUserAggregate() const 0474 { 0475 return quotaBytesUsedAggregate(); 0476 } 0477 #endif 0478 0479 qlonglong About::largestChangeId() const 0480 { 0481 return d->largestChangeId; 0482 } 0483 qlonglong About::remainingChangeIds() const 0484 { 0485 return d->remainingChangeIds; 0486 } 0487 0488 QString About::rootFolderId() const 0489 { 0490 return d->rootFolderId; 0491 } 0492 0493 QString About::domainSharingPolicy() const 0494 { 0495 return d->domainSharingPolicy; 0496 } 0497 0498 About::FormatsList About::importFormats() const 0499 { 0500 return d->importFormats; 0501 } 0502 0503 About::FormatsList About::exportFormats() const 0504 { 0505 return d->exportFormats; 0506 } 0507 0508 About::AdditionalRoleInfosList About::additionalRoleInfo() const 0509 { 0510 return d->additionalRoleInfo; 0511 } 0512 0513 About::FeaturesList About::features() const 0514 { 0515 return d->features; 0516 } 0517 0518 About::MaxUploadSizesList About::maxUploadSizes() const 0519 { 0520 return d->maxUploadSizes; 0521 } 0522 0523 QString About::permissionId() const 0524 { 0525 return d->permissionId; 0526 } 0527 0528 bool About::isCurrentAppInstalled() const 0529 { 0530 return d->isCurrentAppInstalled; 0531 } 0532 0533 UserPtr About::user() const 0534 { 0535 return d->user; 0536 } 0537 0538 bool About::canCreateDrives() const 0539 { 0540 return d->canCreateDrives; 0541 } 0542 0543 AboutPtr About::fromJSON(const QByteArray &jsonData) 0544 { 0545 QJsonDocument document = QJsonDocument::fromJson(jsonData); 0546 if (document.isNull()) { 0547 return AboutPtr(); 0548 } 0549 const QVariantMap map = document.toVariant().toMap(); 0550 0551 if (!map.contains(QLatin1StringView("kind")) || map[QStringLiteral("kind")].toString() != QLatin1StringView("drive#about")) { 0552 return AboutPtr(); 0553 } 0554 0555 AboutPtr about(new About()); 0556 about->setEtag(map.value(QStringLiteral("etag")).toString()); 0557 about->d->selfLink = map.value(QStringLiteral("selfLink")).toUrl(); 0558 about->d->name = map.value(QStringLiteral("name")).toString(); 0559 about->d->quotaBytesTotal = map.value(QStringLiteral("quotaBytesTotal")).toLongLong(); 0560 about->d->quotaBytesUsed = map.value(QStringLiteral("quotaBytesUsed")).toLongLong(); 0561 about->d->quotaBytesUsedInTrash = map.value(QStringLiteral("quotaBytesUsedInTrash")).toLongLong(); 0562 about->d->quotaBytesUsedAggregate = map.value(QStringLiteral("quotaBytesUsedAggregate")).toLongLong(); 0563 about->d->largestChangeId = map.value(QStringLiteral("largestChangeId")).toLongLong(); 0564 about->d->remainingChangeIds = map.value(QStringLiteral("remainingChangeIds")).toLongLong(); 0565 about->d->rootFolderId = map.value(QStringLiteral("rootFolderId")).toString(); 0566 about->d->domainSharingPolicy = map.value(QStringLiteral("domainSharingPolicy")).toString(); 0567 about->d->permissionId = map.value(QStringLiteral("permissionId")).toString(); 0568 about->d->isCurrentAppInstalled = map.value(QStringLiteral("isCurrentAppInstalled")).toBool(); 0569 about->d->canCreateDrives = map.value(QStringLiteral("canCreateDrives")).toBool(); 0570 0571 const QVariantList importFormats = map.value(QStringLiteral("importFormats")).toList(); 0572 for (const QVariant &v : importFormats) { 0573 const QVariantMap importFormat = v.toMap(); 0574 FormatPtr format(new Format()); 0575 format->d->source = importFormat.value(QStringLiteral("source")).toString(); 0576 format->d->targets = importFormat.value(QStringLiteral("targets")).toStringList(); 0577 0578 about->d->importFormats << format; 0579 } 0580 0581 const QVariantList exportFormats = map.value(QStringLiteral("exportFormats")).toList(); 0582 for (const QVariant &v : exportFormats) { 0583 const QVariantMap exportFormat = v.toMap(); 0584 FormatPtr format(new Format()); 0585 format->d->source = exportFormat.value(QStringLiteral("source")).toString(); 0586 format->d->targets = exportFormat.value(QStringLiteral("targets")).toStringList(); 0587 0588 about->d->exportFormats << format; 0589 } 0590 0591 const QVariantList additionalRoleInfos = map.value(QStringLiteral("additionalRoleInfo")).toList(); 0592 for (const QVariant &v : additionalRoleInfos) { 0593 const QVariantMap additionalRoleInfo = v.toMap(); 0594 AdditionalRoleInfoPtr info(new AdditionalRoleInfo()); 0595 info->d->type = additionalRoleInfo.value(QStringLiteral("type")).toString(); 0596 0597 const QVariantList roleSets = additionalRoleInfo.value(QStringLiteral("roleSets")).toList(); 0598 for (const QVariant &vv : roleSets) { 0599 const QVariantMap roleSetData = vv.toMap(); 0600 AdditionalRoleInfo::RoleSetPtr roleSet(new AdditionalRoleInfo::RoleSet()); 0601 roleSet->d->primaryRole = roleSetData.value(QStringLiteral("primaryRole")).toString(); 0602 roleSet->d->additionalRoles = roleSetData.value(QStringLiteral("additionalRoles")).toStringList(); 0603 0604 info->d->roleSets << roleSet; 0605 } 0606 0607 about->d->additionalRoleInfo << info; 0608 } 0609 0610 const QVariantList features = map.value(QStringLiteral("features")).toList(); 0611 for (const QVariant &v : features) { 0612 const QVariantMap featureData = v.toMap(); 0613 FeaturePtr feature(new Feature()); 0614 feature->d->featureName = featureData.value(QStringLiteral("featureName")).toString(); 0615 feature->d->featureRate = featureData.value(QStringLiteral("featureRate")).toReal(); 0616 0617 about->d->features << feature; 0618 } 0619 0620 const QVariantList maxUploadSizes = map.value(QStringLiteral("maxUploadSizes")).toList(); 0621 for (const QVariant &v : maxUploadSizes) { 0622 const QVariantMap maxUploadSizeData = v.toMap(); 0623 MaxUploadSizePtr maxUploadSize(new MaxUploadSize()); 0624 maxUploadSize->d->type = maxUploadSizeData.value(QStringLiteral("type")).toString(); 0625 maxUploadSize->d->size = maxUploadSizeData.value(QStringLiteral("size")).toLongLong(); 0626 0627 about->d->maxUploadSizes << maxUploadSize; 0628 } 0629 0630 about->d->user = User::fromJSON(map.value(QStringLiteral("user")).toMap()); 0631 0632 return about; 0633 }