File indexing completed on 2024-05-12 05:22:22
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 "revision.h" 0008 #include "user.h" 0009 #include "utils_p.h" 0010 0011 #include <QJsonDocument> 0012 0013 using namespace KGAPI2; 0014 using namespace KGAPI2::Drive; 0015 0016 class Q_DECL_HIDDEN Revision::Private 0017 { 0018 public: 0019 Private(); 0020 Private(const Private &other); 0021 0022 QString id; 0023 QUrl selfLink; 0024 QString mimeType; 0025 QDateTime modifiedDate; 0026 bool pinned; 0027 bool published; 0028 QUrl publishedLink; 0029 bool publishAuto; 0030 bool publishedOutsideDomain; 0031 QUrl downloadUrl; 0032 QMap<QString, QUrl> exportLinks; 0033 QString lastModifyingUserName; 0034 UserPtr lastModifyingUser; 0035 QString originalFilename; 0036 QString md5Checksum; 0037 qlonglong fileSize; 0038 0039 static RevisionPtr fromJSON(const QVariantMap &map); 0040 }; 0041 0042 Revision::Private::Private() 0043 : pinned(false) 0044 , published(false) 0045 , publishAuto(false) 0046 , publishedOutsideDomain(false) 0047 , fileSize(-1) 0048 { 0049 } 0050 0051 Revision::Private::Private(const Private &other) 0052 : id(other.id) 0053 , selfLink(other.selfLink) 0054 , mimeType(other.mimeType) 0055 , modifiedDate(other.modifiedDate) 0056 , pinned(other.pinned) 0057 , published(other.published) 0058 , publishedLink(other.publishedLink) 0059 , publishAuto(other.publishAuto) 0060 , publishedOutsideDomain(other.publishedOutsideDomain) 0061 , downloadUrl(other.downloadUrl) 0062 , exportLinks(other.exportLinks) 0063 , lastModifyingUserName(other.lastModifyingUserName) 0064 , lastModifyingUser(other.lastModifyingUser) 0065 , originalFilename(other.originalFilename) 0066 , md5Checksum(other.md5Checksum) 0067 , fileSize(other.fileSize) 0068 { 0069 } 0070 0071 RevisionPtr Revision::Private::fromJSON(const QVariantMap &map) 0072 { 0073 if (!map.contains(QLatin1StringView("kind")) || map[QStringLiteral("kind")].toString() != QLatin1StringView("drive#revision")) { 0074 return RevisionPtr(); 0075 } 0076 0077 RevisionPtr revision(new Revision); 0078 revision->setEtag(map[QStringLiteral("etag")].toString()); 0079 revision->d->id = map[QStringLiteral("id")].toString(); 0080 revision->d->selfLink = map[QStringLiteral("selfLink")].toUrl(); 0081 revision->d->mimeType = map[QStringLiteral("mimeType")].toString(); 0082 revision->d->modifiedDate = QDateTime::fromString(map[QStringLiteral("modifiedDate")].toString(), Qt::ISODate); 0083 revision->d->pinned = map[QStringLiteral("pinned")].toBool(); 0084 revision->d->published = map[QStringLiteral("published")].toBool(); 0085 revision->d->publishedLink = map[QStringLiteral("publishedLink")].toUrl(); 0086 revision->d->publishAuto = map[QStringLiteral("publishAuto")].toBool(); 0087 revision->d->publishedOutsideDomain = map[QStringLiteral("publishedOutsideDomain")].toBool(); 0088 revision->d->downloadUrl = map[QStringLiteral("downloadUrl")].toUrl(); 0089 revision->d->lastModifyingUserName = map[QStringLiteral("lastModifyingUserName")].toString(); 0090 revision->d->lastModifyingUser = User::fromJSON(map[QStringLiteral("lastModifyingUser")].toMap()); 0091 revision->d->originalFilename = map[QStringLiteral("originalFilename")].toString(); 0092 revision->d->md5Checksum = map[QStringLiteral("md5Checksum")].toString(); 0093 revision->d->fileSize = map[QStringLiteral("fileSize")].toLongLong(); 0094 0095 const QVariantMap exportLinks = map[QStringLiteral("exportLinks")].toMap(); 0096 QVariantMap::ConstIterator iter = exportLinks.constBegin(); 0097 for (; iter != exportLinks.constEnd(); ++iter) { 0098 revision->d->exportLinks.insert(iter.key(), iter.value().toUrl()); 0099 } 0100 0101 return revision; 0102 } 0103 0104 Revision::Revision() 0105 : KGAPI2::Object() 0106 , d(new Private) 0107 { 0108 } 0109 0110 Revision::Revision(const Revision &other) 0111 : KGAPI2::Object(other) 0112 , d(new Private(*(other.d))) 0113 { 0114 } 0115 0116 Revision::~Revision() 0117 { 0118 delete d; 0119 } 0120 0121 bool Revision::operator==(const Revision &other) const 0122 { 0123 if (!Object::operator==(other)) { 0124 return false; 0125 } 0126 GAPI_COMPARE(id) 0127 GAPI_COMPARE(selfLink) 0128 GAPI_COMPARE(mimeType) 0129 GAPI_COMPARE(modifiedDate) 0130 GAPI_COMPARE(pinned) 0131 GAPI_COMPARE(published) 0132 GAPI_COMPARE(publishedLink) 0133 GAPI_COMPARE(publishAuto) 0134 GAPI_COMPARE(publishedOutsideDomain) 0135 GAPI_COMPARE(downloadUrl) 0136 GAPI_COMPARE(exportLinks) 0137 GAPI_COMPARE(lastModifyingUserName) 0138 GAPI_COMPARE_SHAREDPTRS(lastModifyingUser) 0139 GAPI_COMPARE(originalFilename) 0140 GAPI_COMPARE(md5Checksum) 0141 GAPI_COMPARE(fileSize) 0142 return true; 0143 } 0144 0145 QString Revision::id() const 0146 { 0147 return d->id; 0148 } 0149 0150 QUrl Revision::selfLink() const 0151 { 0152 return d->selfLink; 0153 } 0154 0155 QString Revision::mimeType() const 0156 { 0157 return d->mimeType; 0158 } 0159 0160 QDateTime Revision::modifiedDate() const 0161 { 0162 return d->modifiedDate; 0163 } 0164 0165 bool Revision::pinned() const 0166 { 0167 return d->pinned; 0168 } 0169 0170 void Revision::setPinned(bool pinned) 0171 { 0172 d->pinned = pinned; 0173 } 0174 0175 bool Revision::published() const 0176 { 0177 return d->published; 0178 } 0179 0180 void Revision::setPublished(bool published) 0181 { 0182 d->published = published; 0183 } 0184 0185 QUrl Revision::publishedLink() const 0186 { 0187 return d->publishedLink; 0188 } 0189 0190 bool Revision::publishAuto() const 0191 { 0192 return d->publishAuto; 0193 } 0194 0195 void Revision::setPublishAuto(bool publishAuto) 0196 { 0197 d->publishAuto = publishAuto; 0198 } 0199 0200 bool Revision::publishedOutsideDomain() const 0201 { 0202 return d->publishedOutsideDomain; 0203 } 0204 0205 void Revision::setPublishedOutsideDomain(bool publishedOutsideDomain) 0206 { 0207 d->publishedOutsideDomain = publishedOutsideDomain; 0208 } 0209 0210 QUrl Revision::downloadUrl() const 0211 { 0212 return d->downloadUrl; 0213 } 0214 0215 QMap<QString, QUrl> Revision::exportLinks() const 0216 { 0217 return d->exportLinks; 0218 } 0219 0220 QString Revision::lastModifyingUserName() const 0221 { 0222 return d->lastModifyingUserName; 0223 } 0224 0225 UserPtr Revision::lastModifyingUser() const 0226 { 0227 return d->lastModifyingUser; 0228 } 0229 0230 QString Revision::originalFilename() const 0231 { 0232 return d->originalFilename; 0233 } 0234 0235 QString Revision::md5Checksum() const 0236 { 0237 return d->md5Checksum; 0238 } 0239 0240 qlonglong Revision::fileSize() const 0241 { 0242 return d->fileSize; 0243 } 0244 0245 RevisionPtr Revision::fromJSON(const QByteArray &jsonData) 0246 { 0247 QJsonDocument document = QJsonDocument::fromJson(jsonData); 0248 if (document.isNull()) { 0249 return RevisionPtr(); 0250 } 0251 0252 const QVariant data = document.toVariant(); 0253 return Private::fromJSON(data.toMap()); 0254 } 0255 0256 RevisionsList Revision::fromJSONFeed(const QByteArray &jsonData) 0257 { 0258 QJsonDocument document = QJsonDocument::fromJson(jsonData); 0259 if (document.isNull()) { 0260 return RevisionsList(); 0261 } 0262 0263 const QVariant data = document.toVariant(); 0264 const QVariantMap map = data.toMap(); 0265 0266 if (!map.contains(QLatin1StringView("kind")) || map[QStringLiteral("kind")].toString() != QLatin1StringView("drive#revisionList")) { 0267 return RevisionsList(); 0268 } 0269 0270 RevisionsList list; 0271 const QVariantList items = map[QStringLiteral("items")].toList(); 0272 for (const QVariant &item : std::as_const(items)) { 0273 const RevisionPtr revision = Private::fromJSON(item.toMap()); 0274 0275 if (!revision.isNull()) { 0276 list << revision; 0277 } 0278 } 0279 0280 return list; 0281 } 0282 0283 QByteArray Revision::toJSON(const RevisionPtr &revision) 0284 { 0285 QVariantMap map; 0286 0287 map[QStringLiteral("pinned")] = revision->pinned(); 0288 map[QStringLiteral("published")] = revision->published(); 0289 map[QStringLiteral("publishAuto")] = revision->publishAuto(); 0290 map[QStringLiteral("publishedOutsideDomain")] = revision->publishedOutsideDomain(); 0291 0292 QJsonDocument document = QJsonDocument::fromVariant(map); 0293 return document.toJson(QJsonDocument::Compact); 0294 }