Changeset View
Changeset View
Standalone View
Standalone View
src/drive/filefetchjob.cpp
Context not available. | |||||
40 | public: | 40 | public: | ||
---|---|---|---|---|---|
41 | Private(FileFetchJob *parent); | 41 | Private(FileFetchJob *parent); | ||
42 | void processNext(); | 42 | void processNext(); | ||
43 | QStringList fieldsToStrings(qulonglong fields); | | |||
44 | 43 | | |||
45 | FileSearchQuery searchQuery; | 44 | FileSearchQuery searchQuery; | ||
46 | QStringList filesIDs; | 45 | QStringList filesIDs; | ||
Context not available. | |||||
50 | 49 | | |||
51 | bool updateViewedDate; | 50 | bool updateViewedDate; | ||
52 | 51 | | |||
53 | qulonglong fields; | 52 | QStringList fields; | ||
54 | 53 | | |||
55 | private: | 54 | private: | ||
56 | FileFetchJob *const q; | 55 | FileFetchJob *const q; | ||
Context not available. | |||||
61 | includeItemsFromAllDrives(true), | 60 | includeItemsFromAllDrives(true), | ||
62 | supportsAllDrives(true), | 61 | supportsAllDrives(true), | ||
63 | updateViewedDate(false), | 62 | updateViewedDate(false), | ||
64 | fields(FileFetchJob::AllFields), | | |||
65 | q(parent) | 63 | q(parent) | ||
66 | { | 64 | { | ||
67 | } | 65 | } | ||
68 | 66 | | |||
69 | | ||||
70 | QStringList FileFetchJob::Private::fieldsToStrings(qulonglong fields) | | |||
71 | { | | |||
72 | if (fields & AllFields) { | | |||
73 | return QStringList(); | | |||
74 | } | | |||
75 | | ||||
76 | QStringList fieldsStrings; | | |||
77 | // Always fetch kind | | |||
78 | fieldsStrings << QStringLiteral("kind"); | | |||
79 | | ||||
80 | // FIXME: Use QMetaEnum once it supports enums larger than int | | |||
81 | if (fields & Id) { | | |||
82 | fieldsStrings << QStringLiteral("id"); | | |||
83 | } | | |||
84 | if (fields & Title) { | | |||
85 | fieldsStrings << QStringLiteral("title"); | | |||
86 | } | | |||
87 | if (fields & MimeType) { | | |||
88 | fieldsStrings << QStringLiteral("mimeType"); | | |||
89 | } | | |||
90 | if (fields & Description) { | | |||
91 | fieldsStrings << QStringLiteral("description"); | | |||
92 | } | | |||
93 | if (fields & Labels) { | | |||
94 | fieldsStrings << QStringLiteral("labels"); | | |||
95 | } | | |||
96 | if (fields & CreatedDate) { | | |||
97 | fieldsStrings << QStringLiteral("createdDate"); | | |||
98 | } | | |||
99 | if (fields & ModifiedDate) { | | |||
100 | fieldsStrings << QStringLiteral("modifiedDate"); | | |||
101 | } | | |||
102 | if (fields & ModifiedByMeDate) { | | |||
103 | fieldsStrings << QStringLiteral("modifiedByMeDate"); | | |||
104 | } | | |||
105 | if (fields & DownloadUrl) { | | |||
106 | fieldsStrings << QStringLiteral("downloadUrl"); | | |||
107 | } | | |||
108 | if (fields & IndexableText) { | | |||
109 | fieldsStrings << QStringLiteral("indexableText"); | | |||
110 | } | | |||
111 | if (fields & UserPermission) { | | |||
112 | fieldsStrings << QStringLiteral("userPermission"); | | |||
113 | } | | |||
114 | if (fields & FileExtension) { | | |||
115 | fieldsStrings << QStringLiteral("fileExtension"); | | |||
116 | } | | |||
117 | if (fields & MD5Checksum) { | | |||
118 | fieldsStrings << QStringLiteral("md5Checksum"); | | |||
119 | } | | |||
120 | if (fields & FileSize) { | | |||
121 | fieldsStrings << QStringLiteral("fileSize"); | | |||
122 | } | | |||
123 | if (fields & AlternateLink) { | | |||
124 | fieldsStrings << QStringLiteral("alternateLink"); | | |||
125 | } | | |||
126 | if (fields & EmbedLink) { | | |||
127 | fieldsStrings << QStringLiteral("embedLink"); | | |||
128 | } | | |||
129 | if (fields & SharedWithMeDate) { | | |||
130 | fieldsStrings << QStringLiteral("sharedWithMeDate"); | | |||
131 | } | | |||
132 | if (fields & Parents) { | | |||
133 | fieldsStrings << QStringLiteral("parents"); | | |||
134 | } | | |||
135 | if (fields & ExportLinks) { | | |||
136 | fieldsStrings << QStringLiteral("exportLinks"); | | |||
137 | } | | |||
138 | if (fields & OriginalFilename) { | | |||
139 | fieldsStrings << QStringLiteral("originalFilename"); | | |||
140 | } | | |||
141 | if (fields & OwnerNames) { | | |||
142 | fieldsStrings << QStringLiteral("ownerNames"); | | |||
143 | } | | |||
144 | if (fields & LastModifiedByMeDate) { | | |||
145 | fieldsStrings << QStringLiteral("lastModifiedByMeDate"); | | |||
146 | } | | |||
147 | if (fields & Editable) { | | |||
148 | fieldsStrings << QStringLiteral("editable"); | | |||
149 | } | | |||
150 | if (fields & WritersCanShare) { | | |||
151 | fieldsStrings << QStringLiteral("writersCanShare"); | | |||
152 | } | | |||
153 | if (fields & ThumbnailLink) { | | |||
154 | fieldsStrings << QStringLiteral("thumbnailLink"); | | |||
155 | } | | |||
156 | if (fields & LastViewedByMeDate) { | | |||
157 | fieldsStrings << QStringLiteral("lastViewedByMeDate"); | | |||
158 | } | | |||
159 | if (fields & WebContentLink) { | | |||
160 | fieldsStrings << QStringLiteral("webContentLink"); | | |||
161 | } | | |||
162 | if (fields & ExplicitlyTrashed) { | | |||
163 | fieldsStrings << QStringLiteral("explicitlyTrashed"); | | |||
164 | } | | |||
165 | if (fields & ImageMediaMetadata) { | | |||
166 | fieldsStrings << QStringLiteral("imageMediaMetadata"); | | |||
167 | } | | |||
168 | if (fields & Thumbnail) { | | |||
169 | fieldsStrings << QStringLiteral("thumbnail"); | | |||
170 | } | | |||
171 | if (fields & WebViewLink) { | | |||
172 | fieldsStrings << QStringLiteral("webViewLink"); | | |||
173 | } | | |||
174 | if (fields & IconLink) { | | |||
175 | fieldsStrings << QStringLiteral("iconLink"); | | |||
176 | } | | |||
177 | if (fields & Shared) { | | |||
178 | fieldsStrings << QStringLiteral("shared"); | | |||
179 | } | | |||
180 | if (fields & Owners) { | | |||
181 | fieldsStrings << QStringLiteral("owners"); | | |||
182 | } | | |||
183 | if (fields & LastModifyingUser) { | | |||
184 | fieldsStrings << QStringLiteral("lastModifyingUser"); | | |||
185 | } | | |||
186 | if (fields & AppDataContents) { | | |||
187 | fieldsStrings << QStringLiteral("appDataContents"); | | |||
188 | } | | |||
189 | if (fields & OpenWithLinks) { | | |||
190 | fieldsStrings << QStringLiteral("openWithLinks"); | | |||
191 | } | | |||
192 | if (fields & DefaultOpenWithLink) { | | |||
193 | fieldsStrings << QStringLiteral("defaultOpenWithLink"); | | |||
194 | } | | |||
195 | if (fields & HeadRevisionId) { | | |||
196 | fieldsStrings << QStringLiteral("headRevisionId"); | | |||
197 | } | | |||
198 | if (fields & Copyable) { | | |||
199 | fieldsStrings << QStringLiteral("copyable"); | | |||
200 | } | | |||
201 | if (fields & Properties) { | | |||
202 | fieldsStrings << QStringLiteral("properties"); | | |||
203 | } | | |||
204 | if (fields & MarkedViewedByMeDate) { | | |||
205 | fieldsStrings << QStringLiteral("markedViewedByMeDate"); | | |||
206 | } | | |||
207 | if (fields & Version) { | | |||
208 | fieldsStrings << QStringLiteral("version"); | | |||
209 | } | | |||
210 | if (fields & SharingUser) { | | |||
211 | fieldsStrings << QStringLiteral("sharingUser"); | | |||
212 | } | | |||
213 | if (fields & Permissions) { | | |||
214 | fieldsStrings << QStringLiteral("permissions"); | | |||
215 | } | | |||
216 | | ||||
217 | return fieldsStrings; | | |||
218 | } | | |||
219 | | ||||
220 | | ||||
221 | void FileFetchJob::Private::processNext() | 67 | void FileFetchJob::Private::processNext() | ||
222 | { | 68 | { | ||
223 | QUrl url; | 69 | QUrl url; | ||
224 | 70 | | |||
225 | if (isFeed) { | 71 | if (isFeed) { | ||
226 | url = DriveService::fetchFilesUrl(); | 72 | url = DriveService::fetchFilesUrl(); | ||
73 | | ||||
227 | QUrlQuery query(url); | 74 | QUrlQuery query(url); | ||
228 | if (!searchQuery.isEmpty()) { | 75 | if (!searchQuery.isEmpty()) { | ||
229 | query.addQueryItem(QStringLiteral("q"), searchQuery.serialize()); | 76 | query.addQueryItem(QStringLiteral("q"), searchQuery.serialize()); | ||
230 | } | 77 | } | ||
231 | if (fields != FileFetchJob::AllFields) { | | |||
232 | const QStringList fieldsStrings = fieldsToStrings(fields); | | |||
233 | query.addQueryItem(QStringLiteral("fields"), | | |||
234 | QStringLiteral("etag,kind,nextLink,nextPageToken,selfLink,items(%1)").arg(fieldsStrings.join(QStringLiteral(",")))); | | |||
235 | } | | |||
236 | 78 | | |||
237 | query.addQueryItem(QStringLiteral("includeItemsFromAllDrives"), includeItemsFromAllDrives ? QStringLiteral("true") : QStringLiteral("false")); | 79 | query.addQueryItem(QStringLiteral("includeItemsFromAllDrives"), includeItemsFromAllDrives ? QStringLiteral("true") : QStringLiteral("false")); | ||
238 | 80 | | |||
239 | url.setQuery(query); | 81 | url.setQuery(query); | ||
82 | | ||||
83 | if (!fields.isEmpty()) { | ||||
84 | // Deserializing requires kind attribute, always force add it | ||||
85 | if (!fields.contains(File::Fields::Kind)) { | ||||
86 | fields << File::Fields::Kind; | ||||
87 | } | ||||
88 | QString itemFields = QStringLiteral("items(%1)").arg(fields.join(QStringLiteral(","))); | ||||
89 | Job *baseJob = dynamic_cast<Job *>(q); | ||||
90 | baseJob->setFields({ | ||||
91 | File::Fields::Etag, | ||||
92 | File::Fields::Kind, | ||||
93 | File::Fields::NextLink, | ||||
94 | File::Fields::NextPageToken, | ||||
95 | File::Fields::SelfLink, | ||||
96 | itemFields | ||||
97 | }); | ||||
98 | } | ||||
240 | } else { | 99 | } else { | ||
241 | if (filesIDs.isEmpty()) { | 100 | if (filesIDs.isEmpty()) { | ||
242 | q->emitFinished(); | 101 | q->emitFinished(); | ||
Context not available. | |||||
245 | 104 | | |||
246 | const QString fileId = filesIDs.takeFirst(); | 105 | const QString fileId = filesIDs.takeFirst(); | ||
247 | url = DriveService::fetchFileUrl(fileId); | 106 | url = DriveService::fetchFileUrl(fileId); | ||
248 | if (fields != FileFetchJob::AllFields) { | 107 | | ||
249 | const QStringList fieldsStrings = fieldsToStrings(fields); | 108 | if (!fields.isEmpty()) { | ||
250 | QUrlQuery query(url); | 109 | // Deserializing requires kind attribute, always force add it | ||
251 | query.addQueryItem(QStringLiteral("fields"), fieldsStrings.join(QStringLiteral(","))); | 110 | if (!fields.contains(File::Fields::Kind)) { | ||
252 | url.setQuery(query); | 111 | fields << File::Fields::Kind; | ||
112 | } | ||||
113 | Job *baseJob = dynamic_cast<Job *>(q); | ||||
114 | baseJob->setFields(fields); | ||||
253 | } | 115 | } | ||
254 | } | 116 | } | ||
255 | 117 | | |||
Context not available. | |||||
319 | d->processNext(); | 181 | d->processNext(); | ||
320 | } | 182 | } | ||
321 | 183 | | |||
322 | void FileFetchJob::setFields(qulonglong fields) | 184 | void FileFetchJob::setFields(const QStringList &fields) | ||
323 | { | 185 | { | ||
186 | if (isRunning()) { | ||||
187 | qCWarning(KGAPIDebug) << "Called setFields() on running job. Ignoring."; | ||||
188 | return; | ||||
189 | } | ||||
190 | | ||||
324 | d->fields = fields; | 191 | d->fields = fields; | ||
325 | } | 192 | } | ||
326 | 193 | | |||
327 | qulonglong FileFetchJob::fields() const | 194 | QStringList FileFetchJob::fields() const | ||
328 | { | 195 | { | ||
329 | return d->fields; | 196 | return d->fields; | ||
330 | } | 197 | } | ||
Context not available. | |||||
349 | d->supportsAllDrives = supportsAllDrives; | 216 | d->supportsAllDrives = supportsAllDrives; | ||
350 | } | 217 | } | ||
351 | 218 | | |||
219 | const QStringList FileFetchJob::FieldShorthands::BasicFields = { | ||||
220 | File::Fields::Id, | ||||
221 | File::Fields::Title, | ||||
222 | File::Fields::MimeType, | ||||
223 | File::Fields::CreatedDate, | ||||
224 | File::Fields::ModifiedDate, | ||||
225 | File::Fields::FileSize, | ||||
226 | File::Fields::DownloadUrl, | ||||
227 | File::Fields::Permissions | ||||
228 | }; | ||||
229 | | ||||
230 | const QStringList FileFetchJob::FieldShorthands::AccessFields = { | ||||
231 | File::Fields::CreatedDate, | ||||
232 | File::Fields::ModifiedDate, | ||||
233 | File::Fields::ModifiedByMeDate, | ||||
234 | File::Fields::LastModifiedByMeDate, | ||||
235 | File::Fields::LastViewedByMeDate, | ||||
236 | File::Fields::MarkedViewedByMeDate | ||||
237 | }; | ||||
238 | | ||||
239 | const QStringList FileFetchJob::FieldShorthands::SharingFields = { | ||||
240 | File::Fields::SharedWithMeDate, | ||||
241 | File::Fields::WritersCanShare, | ||||
242 | File::Fields::Shared, | ||||
243 | File::Fields::Owners, | ||||
244 | File::Fields::SharingUser, | ||||
245 | File::Fields::OwnerNames | ||||
246 | }; | ||||
352 | 247 | | |||
353 | ObjectsList FileFetchJob::handleReplyWithItems(const QNetworkReply *reply, | 248 | ObjectsList FileFetchJob::handleReplyWithItems(const QNetworkReply *reply, | ||
354 | const QByteArray &rawData) | 249 | const QByteArray &rawData) | ||
Context not available. |