File indexing completed on 2024-05-12 05:22:23

0001 /*
0002     SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "teamdrive.h"
0008 #include "driveservice.h"
0009 #include "utils_p.h"
0010 
0011 #include <QJsonDocument>
0012 #include <QUrlQuery>
0013 #include <QVariant>
0014 
0015 namespace
0016 {
0017 static const QString ApiKind = QStringLiteral("drive#teamDrive");
0018 static const QString ApiKindList = QStringLiteral("drive#teamDriveList");
0019 }
0020 
0021 using namespace KGAPI2;
0022 using namespace KGAPI2::Drive;
0023 
0024 ///// DriveTeamdrive::Restrictions
0025 
0026 class Q_DECL_HIDDEN Teamdrive::Restrictions::Private
0027 {
0028 public:
0029     Private() = default;
0030     Private(const Private &other) = default;
0031 
0032     bool adminManagedRestrictions = false;
0033     bool copyRequiresWriterPermission = false;
0034     bool domainUsersOnly = false;
0035     bool teamMembersOnly = false;
0036 };
0037 
0038 Teamdrive::Restrictions::Restrictions()
0039     : d(new Private)
0040 {
0041 }
0042 
0043 Teamdrive::Restrictions::Restrictions(const Teamdrive::Restrictions &other)
0044     : d(new Private(*(other.d)))
0045 {
0046 }
0047 
0048 Teamdrive::Restrictions::~Restrictions() = default;
0049 
0050 bool Teamdrive::Restrictions::operator==(const Teamdrive::Restrictions &other) const
0051 {
0052     GAPI_COMPARE(adminManagedRestrictions);
0053     GAPI_COMPARE(copyRequiresWriterPermission);
0054     GAPI_COMPARE(domainUsersOnly);
0055     GAPI_COMPARE(teamMembersOnly);
0056     return true;
0057 }
0058 
0059 bool Teamdrive::Restrictions::adminManagedRestrictions() const
0060 {
0061     return d->adminManagedRestrictions;
0062 }
0063 
0064 void Teamdrive::Restrictions::setAdminManagedRestrictions(bool adminManagedRestrictions) const
0065 {
0066     d->adminManagedRestrictions = adminManagedRestrictions;
0067 }
0068 
0069 bool Teamdrive::Restrictions::copyRequiresWriterPermission() const
0070 {
0071     return d->copyRequiresWriterPermission;
0072 }
0073 
0074 void Teamdrive::Restrictions::setCopyRequiresWriterPermission(bool copyRequiresWriterPermission) const
0075 {
0076     d->copyRequiresWriterPermission = copyRequiresWriterPermission;
0077 }
0078 
0079 bool Teamdrive::Restrictions::domainUsersOnly() const
0080 {
0081     return d->domainUsersOnly;
0082 }
0083 
0084 void Teamdrive::Restrictions::setDomainUsersOnly(bool domainUsersOnly) const
0085 {
0086     d->domainUsersOnly = domainUsersOnly;
0087 }
0088 
0089 bool Teamdrive::Restrictions::teamMembersOnly() const
0090 {
0091     return d->teamMembersOnly;
0092 }
0093 
0094 void Teamdrive::Restrictions::setTeamMembersOnly(bool teamMembersOnly) const
0095 {
0096     d->teamMembersOnly = teamMembersOnly;
0097 }
0098 
0099 ///// DriveTeamdrive::Capabilities
0100 
0101 class Q_DECL_HIDDEN Teamdrive::Capabilities::Private
0102 {
0103 public:
0104     Private() = default;
0105     Private(const Private &other) = default;
0106 
0107     bool canAddChildren = false;
0108     bool canChangeCopyRequiresWriterPermissionRestriction = false;
0109     bool canChangeDomainUsersOnlyRestriction = false;
0110     bool canChangeTeamDriveBackground = false;
0111     bool canChangeTeamMembersOnlyRestriction = false;
0112     bool canComment = false;
0113     bool canCopy = false;
0114     bool canDeleteChildren = false;
0115     bool canDeleteTeamDrive = false;
0116     bool canDownload = false;
0117     bool canEdit = false;
0118     bool canListChildren = false;
0119     bool canManageMembers = false;
0120     bool canReadRevisions = false;
0121     bool canRename = false;
0122     bool canRenameTeamDrive = false;
0123     bool canShare = false;
0124     bool canTrashChildren = false;
0125 };
0126 
0127 Teamdrive::Capabilities::Capabilities()
0128     : d(new Private)
0129 {
0130 }
0131 
0132 Teamdrive::Capabilities::Capabilities(const Teamdrive::Capabilities &other)
0133     : d(new Private(*(other.d)))
0134 {
0135 }
0136 
0137 Teamdrive::Capabilities::~Capabilities() = default;
0138 
0139 bool Teamdrive::Capabilities::operator==(const Teamdrive::Capabilities &other) const
0140 {
0141     GAPI_COMPARE(canAddChildren);
0142     GAPI_COMPARE(canChangeCopyRequiresWriterPermissionRestriction);
0143     GAPI_COMPARE(canChangeDomainUsersOnlyRestriction);
0144     GAPI_COMPARE(canChangeTeamDriveBackground);
0145     GAPI_COMPARE(canChangeTeamMembersOnlyRestriction);
0146     GAPI_COMPARE(canComment);
0147     GAPI_COMPARE(canCopy);
0148     GAPI_COMPARE(canDeleteChildren);
0149     GAPI_COMPARE(canDeleteTeamDrive);
0150     GAPI_COMPARE(canDownload);
0151     GAPI_COMPARE(canEdit);
0152     GAPI_COMPARE(canListChildren);
0153     GAPI_COMPARE(canManageMembers);
0154     GAPI_COMPARE(canReadRevisions);
0155     GAPI_COMPARE(canRename);
0156     GAPI_COMPARE(canRenameTeamDrive);
0157     GAPI_COMPARE(canShare);
0158     GAPI_COMPARE(canTrashChildren);
0159     return true;
0160 }
0161 
0162 bool Teamdrive::Capabilities::canAddChildren() const
0163 {
0164     return d->canAddChildren;
0165 }
0166 
0167 bool Teamdrive::Capabilities::canChangeCopyRequiresWriterPermissionRestriction() const
0168 {
0169     return d->canChangeCopyRequiresWriterPermissionRestriction;
0170 }
0171 
0172 bool Teamdrive::Capabilities::canChangeDomainUsersOnlyRestriction() const
0173 {
0174     return d->canChangeDomainUsersOnlyRestriction;
0175 }
0176 
0177 bool Teamdrive::Capabilities::canChangeTeamDriveBackground() const
0178 {
0179     return d->canChangeTeamDriveBackground;
0180 }
0181 
0182 bool Teamdrive::Capabilities::canChangeTeamMembersOnlyRestriction() const
0183 {
0184     return d->canChangeTeamMembersOnlyRestriction;
0185 }
0186 
0187 bool Teamdrive::Capabilities::canComment() const
0188 {
0189     return d->canComment;
0190 }
0191 
0192 bool Teamdrive::Capabilities::canCopy() const
0193 {
0194     return d->canCopy;
0195 }
0196 
0197 bool Teamdrive::Capabilities::canDeleteChildren() const
0198 {
0199     return d->canDeleteChildren;
0200 }
0201 
0202 bool Teamdrive::Capabilities::canDeleteTeamDrive() const
0203 {
0204     return d->canDeleteTeamDrive;
0205 }
0206 
0207 bool Teamdrive::Capabilities::canDownload() const
0208 {
0209     return d->canDownload;
0210 }
0211 
0212 bool Teamdrive::Capabilities::canEdit() const
0213 {
0214     return d->canEdit;
0215 }
0216 
0217 bool Teamdrive::Capabilities::canListChildren() const
0218 {
0219     return d->canListChildren;
0220 }
0221 
0222 bool Teamdrive::Capabilities::canManageMembers() const
0223 {
0224     return d->canManageMembers;
0225 }
0226 
0227 bool Teamdrive::Capabilities::canReadRevisions() const
0228 {
0229     return d->canReadRevisions;
0230 }
0231 
0232 bool Teamdrive::Capabilities::canRename() const
0233 {
0234     return d->canRename;
0235 }
0236 
0237 bool Teamdrive::Capabilities::canRenameTeamDrive() const
0238 {
0239     return d->canRenameTeamDrive;
0240 }
0241 
0242 bool Teamdrive::Capabilities::canShare() const
0243 {
0244     return d->canShare;
0245 }
0246 
0247 bool Teamdrive::Capabilities::canTrashChildren() const
0248 {
0249     return d->canTrashChildren;
0250 }
0251 
0252 ///// DriveTeamdrive::BackgroundImageFile
0253 
0254 class Q_DECL_HIDDEN Teamdrive::BackgroundImageFile::Private
0255 {
0256 public:
0257     Private() = default;
0258     Private(const Private &other) = default;
0259 
0260     QString id;
0261     float xCoordinate = 0.0f;
0262     float yCoordinate = 0.0f;
0263     float width = 0.0f;
0264 };
0265 
0266 Teamdrive::BackgroundImageFile::BackgroundImageFile()
0267     : d(new Private)
0268 {
0269 }
0270 
0271 Teamdrive::BackgroundImageFile::BackgroundImageFile(const Teamdrive::BackgroundImageFile &other)
0272     : d(new Private(*(other.d)))
0273 {
0274 }
0275 
0276 Teamdrive::BackgroundImageFile::~BackgroundImageFile() = default;
0277 
0278 bool Teamdrive::BackgroundImageFile::operator==(const Teamdrive::BackgroundImageFile &other) const
0279 {
0280     GAPI_COMPARE(id);
0281     GAPI_COMPARE(xCoordinate);
0282     GAPI_COMPARE(yCoordinate);
0283     GAPI_COMPARE(width);
0284     return true;
0285 }
0286 
0287 QString Teamdrive::BackgroundImageFile::id() const
0288 {
0289     return d->id;
0290 }
0291 
0292 void Teamdrive::BackgroundImageFile::setId(const QString &id) const
0293 {
0294     d->id = id;
0295 }
0296 
0297 float Teamdrive::BackgroundImageFile::xCoordinate() const
0298 {
0299     return d->xCoordinate;
0300 }
0301 
0302 void Teamdrive::BackgroundImageFile::setXCoordinate(const float xCoordinate) const
0303 {
0304     d->xCoordinate = xCoordinate;
0305 }
0306 
0307 float Teamdrive::BackgroundImageFile::yCoordinate() const
0308 {
0309     return d->yCoordinate;
0310 }
0311 
0312 void Teamdrive::BackgroundImageFile::setYCoordinate(const float yCoordinate) const
0313 {
0314     d->yCoordinate = yCoordinate;
0315 }
0316 
0317 float Teamdrive::BackgroundImageFile::width() const
0318 {
0319     return d->width;
0320 }
0321 
0322 void Teamdrive::BackgroundImageFile::setWidth(const float width) const
0323 {
0324     d->width = width;
0325 }
0326 
0327 ///// DriveTeamdrive
0328 
0329 class Q_DECL_HIDDEN Teamdrive::Private
0330 {
0331 public:
0332     Private() = default;
0333     Private(const Private &other) = default;
0334 
0335     QString id;
0336     QString name;
0337     QString themeId;
0338     QString colorRgb;
0339     BackgroundImageFilePtr backgroundImageFile;
0340     QString backgroundImageLink;
0341     CapabilitiesPtr capabilities;
0342     QDateTime createdDate;
0343     RestrictionsPtr restrictions;
0344 
0345     static TeamdrivePtr fromJSON(const QVariantMap &map);
0346 };
0347 
0348 TeamdrivePtr Teamdrive::Private::fromJSON(const QVariantMap &map)
0349 {
0350     if (!map.contains(Teamdrive::Fields::Kind) || map[Teamdrive::Fields::Kind].toString() != ApiKind) {
0351         return TeamdrivePtr();
0352     }
0353 
0354     auto teamdrive = TeamdrivePtr::create();
0355     if (map.contains(Teamdrive::Fields::Id)) {
0356         teamdrive->d->id = map[Teamdrive::Fields::Id].toString();
0357     }
0358     if (map.contains(Teamdrive::Fields::Name)) {
0359         teamdrive->d->name = map[Teamdrive::Fields::Name].toString();
0360     }
0361     if (map.contains(Teamdrive::Fields::ThemeId)) {
0362         teamdrive->d->themeId = map[Teamdrive::Fields::ThemeId].toString();
0363     }
0364     if (map.contains(Teamdrive::Fields::ColorRgb)) {
0365         teamdrive->d->colorRgb = map[Teamdrive::Fields::ColorRgb].toString();
0366     }
0367     if (map.contains(Teamdrive::Fields::BackgroundImageLink)) {
0368         teamdrive->d->backgroundImageLink = map[Teamdrive::Fields::BackgroundImageLink].toString();
0369     }
0370     if (map.contains(Teamdrive::Fields::CreatedDate)) {
0371         teamdrive->d->createdDate = QDateTime::fromString(map[Teamdrive::Fields::CreatedDate].toString(), Qt::ISODate);
0372     }
0373 
0374     if (map.contains(Teamdrive::Fields::BackgroundImageFile)) {
0375         const QVariantMap backgroundImageFileMap = map[Teamdrive::Fields::BackgroundImageFile].toMap();
0376         auto backgroundImageFile = BackgroundImageFilePtr::create();
0377         backgroundImageFile->d->id = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Id].toString();
0378         backgroundImageFile->d->xCoordinate = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::XCoordinate].toReal();
0379         backgroundImageFile->d->yCoordinate = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::YCoordinate].toReal();
0380         backgroundImageFile->d->width = backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Width].toReal();
0381         teamdrive->d->backgroundImageFile = backgroundImageFile;
0382     }
0383 
0384     if (map.contains(Teamdrive::Fields::Capabilities)) {
0385         const QVariantMap capabilitiesMap = map[Teamdrive::Fields::Capabilities].toMap();
0386         auto capabilities = CapabilitiesPtr::create();
0387         capabilities->d->canAddChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanAddChildren].toBool();
0388         capabilities->d->canChangeCopyRequiresWriterPermissionRestriction =
0389             capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeCopyRequiresWriterPermissionRestriction].toBool();
0390         capabilities->d->canChangeDomainUsersOnlyRestriction = capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeDomainUsersOnlyRestriction].toBool();
0391         capabilities->d->canChangeTeamDriveBackground = capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamDriveBackground].toBool();
0392         capabilities->d->canChangeTeamMembersOnlyRestriction = capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamMembersOnlyRestriction].toBool();
0393         capabilities->d->canComment = capabilitiesMap[Teamdrive::Capabilities::Fields::CanComment].toBool();
0394         capabilities->d->canCopy = capabilitiesMap[Teamdrive::Capabilities::Fields::CanCopy].toBool();
0395         capabilities->d->canDeleteChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteChildren].toBool();
0396         capabilities->d->canDeleteTeamDrive = capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteTeamDrive].toBool();
0397         capabilities->d->canDownload = capabilitiesMap[Teamdrive::Capabilities::Fields::CanDownload].toBool();
0398         capabilities->d->canEdit = capabilitiesMap[Teamdrive::Capabilities::Fields::CanEdit].toBool();
0399         capabilities->d->canListChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanListChildren].toBool();
0400         capabilities->d->canManageMembers = capabilitiesMap[Teamdrive::Capabilities::Fields::CanManageMembers].toBool();
0401         capabilities->d->canReadRevisions = capabilitiesMap[Teamdrive::Capabilities::Fields::CanReadRevisions].toBool();
0402         capabilities->d->canRename = capabilitiesMap[Teamdrive::Capabilities::Fields::CanRename].toBool();
0403         capabilities->d->canRenameTeamDrive = capabilitiesMap[Teamdrive::Capabilities::Fields::CanRenameTeamDrive].toBool();
0404         capabilities->d->canShare = capabilitiesMap[Teamdrive::Capabilities::Fields::CanShare].toBool();
0405         capabilities->d->canTrashChildren = capabilitiesMap[Teamdrive::Capabilities::Fields::CanTrashChildren].toBool();
0406         teamdrive->d->capabilities = capabilities;
0407     }
0408 
0409     if (map.contains(Teamdrive::Fields::Restrictions)) {
0410         const QVariantMap restrictionsMap = map[Teamdrive::Fields::Restrictions].toMap();
0411         auto restrictions = RestrictionsPtr::create();
0412         restrictions->d->adminManagedRestrictions = restrictionsMap[Teamdrive::Restrictions::Fields::AdminManagedRestrictions].toBool();
0413         restrictions->d->copyRequiresWriterPermission = restrictionsMap[Teamdrive::Restrictions::Fields::CopyRequiresWriterPermission].toBool();
0414         restrictions->d->domainUsersOnly = restrictionsMap[Teamdrive::Restrictions::Fields::DomainUsersOnly].toBool();
0415         restrictions->d->teamMembersOnly = restrictionsMap[Teamdrive::Restrictions::Fields::TeamMembersOnly].toBool();
0416         teamdrive->d->restrictions = restrictions;
0417     }
0418 
0419     return teamdrive;
0420 }
0421 
0422 const QString Teamdrive::Restrictions::Fields::AdminManagedRestrictions = QStringLiteral("adminManagedRestrictions");
0423 const QString Teamdrive::Restrictions::Fields::CopyRequiresWriterPermission = QStringLiteral("copyRequiresWriterPermission");
0424 const QString Teamdrive::Restrictions::Fields::DomainUsersOnly = QStringLiteral("domainUsersOnly");
0425 const QString Teamdrive::Restrictions::Fields::TeamMembersOnly = QStringLiteral("teamMembersOnly");
0426 
0427 const QString Teamdrive::Capabilities::Fields::CanAddChildren = QStringLiteral("canAddChildren");
0428 const QString Teamdrive::Capabilities::Fields::CanChangeCopyRequiresWriterPermissionRestriction =
0429     QStringLiteral("canChangeCopyRequiresWriterPermissionRestriction");
0430 const QString Teamdrive::Capabilities::Fields::CanChangeDomainUsersOnlyRestriction = QStringLiteral("canChangeDomainUsersOnlyRestriction");
0431 const QString Teamdrive::Capabilities::Fields::CanChangeTeamDriveBackground = QStringLiteral("canChangeTeamDriveBackground");
0432 const QString Teamdrive::Capabilities::Fields::CanChangeTeamMembersOnlyRestriction = QStringLiteral("canChangeTeamMembersOnlyRestriction");
0433 const QString Teamdrive::Capabilities::Fields::CanComment = QStringLiteral("canComment");
0434 const QString Teamdrive::Capabilities::Fields::CanCopy = QStringLiteral("canCopy");
0435 const QString Teamdrive::Capabilities::Fields::CanDeleteChildren = QStringLiteral("canDeleteChildren");
0436 const QString Teamdrive::Capabilities::Fields::CanDeleteTeamDrive = QStringLiteral("canDeleteTeamDrive");
0437 const QString Teamdrive::Capabilities::Fields::CanDownload = QStringLiteral("canDownload");
0438 const QString Teamdrive::Capabilities::Fields::CanEdit = QStringLiteral("canEdit");
0439 const QString Teamdrive::Capabilities::Fields::CanListChildren = QStringLiteral("canListChildren");
0440 const QString Teamdrive::Capabilities::Fields::CanManageMembers = QStringLiteral("canManageMembers");
0441 const QString Teamdrive::Capabilities::Fields::CanReadRevisions = QStringLiteral("canReadRevisions");
0442 const QString Teamdrive::Capabilities::Fields::CanRename = QStringLiteral("canRename");
0443 const QString Teamdrive::Capabilities::Fields::CanRenameTeamDrive = QStringLiteral("canRenameTeamDrive");
0444 const QString Teamdrive::Capabilities::Fields::CanShare = QStringLiteral("canShare");
0445 const QString Teamdrive::Capabilities::Fields::CanTrashChildren = QStringLiteral("canTrashChildren");
0446 
0447 const QString Teamdrive::BackgroundImageFile::Fields::Id = QStringLiteral("id");
0448 const QString Teamdrive::BackgroundImageFile::Fields::XCoordinate = QStringLiteral("xCoordinate");
0449 const QString Teamdrive::BackgroundImageFile::Fields::YCoordinate = QStringLiteral("yCoordinate");
0450 const QString Teamdrive::BackgroundImageFile::Fields::Width = QStringLiteral("width");
0451 
0452 const QString Teamdrive::Fields::Items = QStringLiteral("items");
0453 const QString Teamdrive::Fields::KindDrive = QStringLiteral("kind");
0454 const QString Teamdrive::Fields::PageToken = QStringLiteral("pageToken");
0455 const QString Teamdrive::Fields::NextPageToken = QStringLiteral("nextPageToken");
0456 const QString Teamdrive::Fields::Id = QStringLiteral("id");
0457 const QString Teamdrive::Fields::Kind = QStringLiteral("kind");
0458 const QString Teamdrive::Fields::Name = QStringLiteral("name");
0459 const QString Teamdrive::Fields::ThemeId = QStringLiteral("themeId");
0460 const QString Teamdrive::Fields::ColorRgb = QStringLiteral("colorRgb");
0461 const QString Teamdrive::Fields::BackgroundImageFile = QStringLiteral("backgroundImageFile");
0462 const QString Teamdrive::Fields::BackgroundImageLink = QStringLiteral("backgroundImageLink");
0463 const QString Teamdrive::Fields::Capabilities = QStringLiteral("capabilities");
0464 const QString Teamdrive::Fields::CreatedDate = QStringLiteral("createdDate");
0465 const QString Teamdrive::Fields::Restrictions = QStringLiteral("restrictions");
0466 
0467 Teamdrive::Teamdrive()
0468     : KGAPI2::Object()
0469     , d(new Private)
0470 {
0471 }
0472 
0473 Teamdrive::Teamdrive(const Teamdrive &other)
0474     : KGAPI2::Object(other)
0475     , d(new Private(*(other.d)))
0476 {
0477 }
0478 
0479 Teamdrive::~Teamdrive() = default;
0480 
0481 bool Teamdrive::operator==(const Teamdrive &other) const
0482 {
0483     if (!Object::operator==(other)) {
0484         return false;
0485     }
0486     GAPI_COMPARE(id);
0487     GAPI_COMPARE(name);
0488     GAPI_COMPARE(themeId);
0489     GAPI_COMPARE(colorRgb);
0490     GAPI_COMPARE_SHAREDPTRS(backgroundImageFile);
0491     GAPI_COMPARE(backgroundImageLink);
0492     GAPI_COMPARE_SHAREDPTRS(capabilities);
0493     GAPI_COMPARE(createdDate);
0494     GAPI_COMPARE_SHAREDPTRS(restrictions);
0495     return true;
0496 }
0497 
0498 QString Teamdrive::id() const
0499 {
0500     return d->id;
0501 }
0502 
0503 void Teamdrive::setId(const QString &id) const
0504 {
0505     d->id = id;
0506 }
0507 
0508 QString Teamdrive::name() const
0509 {
0510     return d->name;
0511 }
0512 
0513 void Teamdrive::setName(const QString &name) const
0514 {
0515     d->name = name;
0516 }
0517 
0518 QString Teamdrive::themeId() const
0519 {
0520     return d->themeId;
0521 }
0522 
0523 void Teamdrive::setThemeId(const QString &themeId) const
0524 {
0525     d->themeId = themeId;
0526 }
0527 
0528 QString Teamdrive::colorRgb() const
0529 {
0530     return d->colorRgb;
0531 }
0532 
0533 void Teamdrive::setColorRgb(const QString &colorRgb) const
0534 {
0535     d->colorRgb = colorRgb;
0536 }
0537 
0538 Teamdrive::BackgroundImageFilePtr Teamdrive::backgroundImageFile() const
0539 {
0540     return d->backgroundImageFile;
0541 }
0542 
0543 void Teamdrive::setBackgroundImageFile(const Teamdrive::BackgroundImageFilePtr &backgroundImageFile) const
0544 {
0545     d->backgroundImageFile = backgroundImageFile;
0546 }
0547 
0548 QString Teamdrive::backgroundImageLink() const
0549 {
0550     return d->backgroundImageLink;
0551 }
0552 
0553 Teamdrive::CapabilitiesPtr Teamdrive::capabilities() const
0554 {
0555     return d->capabilities;
0556 }
0557 
0558 QDateTime Teamdrive::createdDate() const
0559 {
0560     return d->createdDate;
0561 }
0562 
0563 void Teamdrive::setRestrictions(const Teamdrive::RestrictionsPtr &restrictions) const
0564 {
0565     d->restrictions = restrictions;
0566 }
0567 
0568 Teamdrive::RestrictionsPtr Teamdrive::restrictions() const
0569 {
0570     return d->restrictions;
0571 }
0572 
0573 TeamdrivePtr Teamdrive::fromJSON(const QByteArray &jsonData)
0574 {
0575     QJsonDocument document = QJsonDocument::fromJson(jsonData);
0576     if (document.isNull()) {
0577         return TeamdrivePtr();
0578     }
0579 
0580     const QVariant data = document.toVariant();
0581     return Private::fromJSON(data.toMap());
0582 }
0583 
0584 TeamdrivesList Teamdrive::fromJSONFeed(const QByteArray &jsonData, FeedData &feedData)
0585 {
0586     QJsonDocument document = QJsonDocument::fromJson(jsonData);
0587     if (document.isNull()) {
0588         return TeamdrivesList();
0589     }
0590 
0591     const QVariant data = document.toVariant();
0592     const QVariantMap map = data.toMap();
0593     if (!map.contains(Teamdrive::Fields::Kind) || map[Teamdrive::Fields::Kind].toString() != ApiKindList) {
0594         return TeamdrivesList();
0595     }
0596 
0597     if (map.contains(Teamdrive::Fields::NextPageToken)) {
0598         feedData.nextPageUrl = DriveService::fetchTeamdrivesUrl();
0599         QUrlQuery query(feedData.nextPageUrl);
0600         query.addQueryItem(Teamdrive::Fields::PageToken, map.value(Teamdrive::Fields::NextPageToken).toString());
0601         feedData.nextPageUrl.setQuery(query);
0602     }
0603 
0604     TeamdrivesList list;
0605     const QVariantList items = map[Teamdrive::Fields::Items].toList();
0606     for (const QVariant &item : items) {
0607         const TeamdrivePtr teamdrive = Private::fromJSON(item.toMap());
0608 
0609         if (!teamdrive.isNull()) {
0610             list << teamdrive;
0611         }
0612     }
0613 
0614     return list;
0615 }
0616 
0617 QByteArray Teamdrive::toJSON(const TeamdrivePtr &teamdrive)
0618 {
0619     QVariantMap teamDriveMap;
0620     teamDriveMap[Teamdrive::Fields::Kind] = ApiKind;
0621     if (!teamdrive->id().isEmpty()) {
0622         teamDriveMap[Teamdrive::Fields::Id] = teamdrive->id();
0623     }
0624     if (!teamdrive->name().isEmpty()) {
0625         teamDriveMap[Teamdrive::Fields::Name] = teamdrive->name();
0626     }
0627     if (!teamdrive->themeId().isEmpty()) {
0628         teamDriveMap[Teamdrive::Fields::ThemeId] = teamdrive->themeId();
0629     }
0630     if (!teamdrive->colorRgb().isEmpty()) {
0631         teamDriveMap[Teamdrive::Fields::ColorRgb] = teamdrive->colorRgb();
0632     }
0633     if (!teamdrive->backgroundImageLink().isEmpty()) {
0634         teamDriveMap[Teamdrive::Fields::BackgroundImageLink] = teamdrive->backgroundImageLink();
0635     }
0636     if (teamdrive->createdDate().isValid()) {
0637         teamDriveMap[Teamdrive::Fields::CreatedDate] = teamdrive->createdDate();
0638     }
0639 
0640     if (teamdrive->restrictions()) {
0641         QVariantMap restrictionsMap;
0642         restrictionsMap[Teamdrive::Restrictions::Fields::AdminManagedRestrictions] = teamdrive->restrictions()->adminManagedRestrictions();
0643         restrictionsMap[Teamdrive::Restrictions::Fields::CopyRequiresWriterPermission] = teamdrive->restrictions()->copyRequiresWriterPermission();
0644         restrictionsMap[Teamdrive::Restrictions::Fields::DomainUsersOnly] = teamdrive->restrictions()->domainUsersOnly();
0645         restrictionsMap[Teamdrive::Restrictions::Fields::TeamMembersOnly] = teamdrive->restrictions()->teamMembersOnly();
0646         teamDriveMap[Teamdrive::Fields::Restrictions] = restrictionsMap;
0647     }
0648 
0649     if (teamdrive->backgroundImageFile()) {
0650         QVariantMap backgroundImageFileMap;
0651         backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Id] = teamdrive->backgroundImageFile()->id();
0652         backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::XCoordinate] = teamdrive->backgroundImageFile()->xCoordinate();
0653         backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::YCoordinate] = teamdrive->backgroundImageFile()->yCoordinate();
0654         backgroundImageFileMap[Teamdrive::BackgroundImageFile::Fields::Width] = teamdrive->backgroundImageFile()->width();
0655         teamDriveMap[Teamdrive::Fields::BackgroundImageFile] = backgroundImageFileMap;
0656     }
0657 
0658     if (teamdrive->capabilities()) {
0659         QVariantMap capabilitiesMap;
0660         capabilitiesMap[Teamdrive::Capabilities::Fields::CanAddChildren] = teamdrive->capabilities()->canAddChildren();
0661         capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeCopyRequiresWriterPermissionRestriction] =
0662             teamdrive->capabilities()->canChangeCopyRequiresWriterPermissionRestriction();
0663         capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeDomainUsersOnlyRestriction] =
0664             teamdrive->capabilities()->canChangeDomainUsersOnlyRestriction();
0665         capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamDriveBackground] = teamdrive->capabilities()->canChangeTeamDriveBackground();
0666         capabilitiesMap[Teamdrive::Capabilities::Fields::CanChangeTeamMembersOnlyRestriction] =
0667             teamdrive->capabilities()->canChangeTeamMembersOnlyRestriction();
0668         capabilitiesMap[Teamdrive::Capabilities::Fields::CanComment] = teamdrive->capabilities()->canComment();
0669         capabilitiesMap[Teamdrive::Capabilities::Fields::CanCopy] = teamdrive->capabilities()->canCopy();
0670         capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteChildren] = teamdrive->capabilities()->canDeleteChildren();
0671         capabilitiesMap[Teamdrive::Capabilities::Fields::CanDeleteTeamDrive] = teamdrive->capabilities()->canDeleteTeamDrive();
0672         capabilitiesMap[Teamdrive::Capabilities::Fields::CanDownload] = teamdrive->capabilities()->canDownload();
0673         capabilitiesMap[Teamdrive::Capabilities::Fields::CanEdit] = teamdrive->capabilities()->canEdit();
0674         capabilitiesMap[Teamdrive::Capabilities::Fields::CanListChildren] = teamdrive->capabilities()->canListChildren();
0675         capabilitiesMap[Teamdrive::Capabilities::Fields::CanManageMembers] = teamdrive->capabilities()->canManageMembers();
0676         capabilitiesMap[Teamdrive::Capabilities::Fields::CanReadRevisions] = teamdrive->capabilities()->canReadRevisions();
0677         capabilitiesMap[Teamdrive::Capabilities::Fields::CanRename] = teamdrive->capabilities()->canRename();
0678         capabilitiesMap[Teamdrive::Capabilities::Fields::CanRenameTeamDrive] = teamdrive->capabilities()->canRenameTeamDrive();
0679         capabilitiesMap[Teamdrive::Capabilities::Fields::CanShare] = teamdrive->capabilities()->canShare();
0680         capabilitiesMap[Teamdrive::Capabilities::Fields::CanTrashChildren] = teamdrive->capabilities()->canTrashChildren();
0681         teamDriveMap[Teamdrive::Fields::Capabilities] = capabilitiesMap;
0682     }
0683 
0684     QJsonDocument document = QJsonDocument::fromVariant(teamDriveMap);
0685     return document.toJson(QJsonDocument::Compact);
0686 }