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 "change.h" 0008 #include "file_p.h" 0009 #include "utils_p.h" 0010 0011 #include <QJsonDocument> 0012 #include <QVariantMap> 0013 0014 using namespace KGAPI2; 0015 using namespace KGAPI2::Drive; 0016 0017 class Q_DECL_HIDDEN Change::Private 0018 { 0019 public: 0020 Private(); 0021 Private(const Private &other); 0022 0023 qlonglong id = -1; 0024 QString fileId; 0025 QUrl selfLink; 0026 bool deleted = false; 0027 FilePtr file; 0028 0029 static ChangePtr fromJSON(const QVariantMap &map); 0030 }; 0031 0032 Change::Private::Private() 0033 { 0034 } 0035 0036 Change::Private::Private(const Private &other) 0037 : id(other.id) 0038 , fileId(other.fileId) 0039 , selfLink(other.selfLink) 0040 , deleted(other.deleted) 0041 , file(other.file) 0042 { 0043 } 0044 0045 ChangePtr Change::Private::fromJSON(const QVariantMap &map) 0046 { 0047 if (!map.contains(QLatin1StringView("kind")) || map[QStringLiteral("kind")].toString() != QLatin1StringView("drive#change")) { 0048 return ChangePtr(); 0049 } 0050 0051 ChangePtr change(new Change); 0052 change->d->id = map[QStringLiteral("id")].toLongLong(); 0053 change->d->fileId = map[QStringLiteral("fileId")].toString(); 0054 change->d->selfLink = map[QStringLiteral("selfLink")].toUrl(); 0055 change->d->deleted = map[QStringLiteral("deleted")].toBool(); 0056 change->d->file = File::Private::fromJSON(map[QStringLiteral("file")].toMap()); 0057 0058 return change; 0059 } 0060 0061 Change::Change() 0062 : KGAPI2::Object() 0063 , d(new Private) 0064 { 0065 } 0066 0067 Change::Change(const Change &other) 0068 : KGAPI2::Object(other) 0069 , d(new Private(*(other.d))) 0070 { 0071 } 0072 0073 Change::~Change() 0074 { 0075 delete d; 0076 } 0077 0078 bool Change::operator==(const Change &other) const 0079 { 0080 if (!Object::operator==(other)) { 0081 return false; 0082 } 0083 0084 GAPI_COMPARE(id) 0085 GAPI_COMPARE(fileId) 0086 GAPI_COMPARE(selfLink) 0087 GAPI_COMPARE(deleted) 0088 GAPI_COMPARE_SHAREDPTRS(file) 0089 return true; 0090 } 0091 0092 qlonglong Change::id() const 0093 { 0094 return d->id; 0095 } 0096 0097 QString Change::fileId() const 0098 { 0099 return d->fileId; 0100 } 0101 0102 QUrl Change::selfLink() const 0103 { 0104 return d->selfLink; 0105 } 0106 0107 bool Change::deleted() const 0108 { 0109 return d->deleted; 0110 } 0111 0112 FilePtr Change::file() const 0113 { 0114 return d->file; 0115 } 0116 0117 ChangePtr Change::fromJSON(const QByteArray &jsonData) 0118 { 0119 QJsonDocument document = QJsonDocument::fromJson(jsonData); 0120 if (document.isNull()) { 0121 return ChangePtr(); 0122 } 0123 0124 const QVariant data = document.toVariant(); 0125 return Private::fromJSON(data.toMap()); 0126 } 0127 0128 ChangesList Change::fromJSONFeed(const QByteArray &jsonData, FeedData &feedData) 0129 { 0130 QJsonDocument document = QJsonDocument::fromJson(jsonData); 0131 if (document.isNull()) { 0132 return ChangesList(); 0133 } 0134 0135 const QVariant data = document.toVariant(); 0136 const QVariantMap map = data.toMap(); 0137 if (!map.contains(QLatin1StringView("kind")) || map[QStringLiteral("kind")].toString() != QLatin1StringView("drive#changeList")) { 0138 return ChangesList(); 0139 } 0140 0141 if (map.contains(QLatin1StringView("nextLink"))) { 0142 feedData.nextPageUrl = map[QStringLiteral("nextLink")].toUrl(); 0143 } 0144 0145 ChangesList list; 0146 const QVariantList items = map[QStringLiteral("items")].toList(); 0147 for (const QVariant &item : items) { 0148 const ChangePtr change = Private::fromJSON(item.toMap()); 0149 0150 if (!change.isNull()) { 0151 list << change; 0152 } 0153 } 0154 0155 return list; 0156 }