OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/drive/drive_api_util.h" | 5 #include "chrome/browser/drive/drive_api_util.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/files/file.h" | 9 #include "base/files/file.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/md5.h" | 11 #include "base/md5.h" |
12 #include "base/strings/string16.h" | 12 #include "base/strings/string16.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
16 #include "base/values.h" | 16 #include "base/values.h" |
17 #include "content/public/browser/browser_thread.h" | 17 #include "content/public/browser/browser_thread.h" |
18 #include "google_apis/drive/drive_api_parser.h" | 18 #include "google_apis/drive/drive_api_parser.h" |
19 #include "google_apis/drive/gdata_wapi_parser.h" | 19 #include "google_apis/drive/gdata_wapi_parser.h" |
20 #include "net/base/escape.h" | 20 #include "net/base/escape.h" |
21 #include "third_party/re2/re2/re2.h" | 21 #include "third_party/re2/re2/re2.h" |
22 #include "url/gurl.h" | 22 #include "url/gurl.h" |
23 | 23 |
24 namespace drive { | 24 namespace drive { |
25 namespace util { | 25 namespace util { |
26 namespace { | 26 namespace { |
27 | 27 |
28 std::string GetMimeTypeFromEntryKind(google_apis::DriveEntryKind kind) { | |
29 switch (kind) { | |
30 case google_apis::ENTRY_KIND_DOCUMENT: | |
31 return kGoogleDocumentMimeType; | |
32 case google_apis::ENTRY_KIND_SPREADSHEET: | |
33 return kGoogleSpreadsheetMimeType; | |
34 case google_apis::ENTRY_KIND_PRESENTATION: | |
35 return kGooglePresentationMimeType; | |
36 case google_apis::ENTRY_KIND_DRAWING: | |
37 return kGoogleDrawingMimeType; | |
38 case google_apis::ENTRY_KIND_TABLE: | |
39 return kGoogleTableMimeType; | |
40 case google_apis::ENTRY_KIND_FORM: | |
41 return kGoogleFormMimeType; | |
42 default: | |
43 return std::string(); | |
44 } | |
45 } | |
46 | |
47 // Returns the argument string. | 28 // Returns the argument string. |
48 std::string Identity(const std::string& resource_id) { return resource_id; } | 29 std::string Identity(const std::string& resource_id) { return resource_id; } |
49 | 30 |
50 } // namespace | 31 } // namespace |
51 | 32 |
52 | 33 |
53 std::string EscapeQueryStringValue(const std::string& str) { | 34 std::string EscapeQueryStringValue(const std::string& str) { |
54 std::string result; | 35 std::string result; |
55 result.reserve(str.size()); | 36 result.reserve(str.size()); |
56 for (size_t i = 0; i < str.size(); ++i) { | 37 for (size_t i = 0; i < str.size(); ++i) { |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 if (!entry) { | 147 if (!entry) { |
167 callback.Run(google_apis::GDATA_PARSE_ERROR, GURL()); | 148 callback.Run(google_apis::GDATA_PARSE_ERROR, GURL()); |
168 return; | 149 return; |
169 } | 150 } |
170 | 151 |
171 const google_apis::Link* share_link = | 152 const google_apis::Link* share_link = |
172 entry->GetLinkByType(google_apis::Link::LINK_SHARE); | 153 entry->GetLinkByType(google_apis::Link::LINK_SHARE); |
173 callback.Run(error, share_link ? share_link->href() : GURL()); | 154 callback.Run(error, share_link ? share_link->href() : GURL()); |
174 } | 155 } |
175 | 156 |
176 scoped_ptr<google_apis::FileResource> ConvertResourceEntryToFileResource( | |
177 const google_apis::ResourceEntry& entry) { | |
178 scoped_ptr<google_apis::FileResource> file(new google_apis::FileResource); | |
179 | |
180 file->set_file_id(entry.resource_id()); | |
181 file->set_title(entry.title()); | |
182 file->set_created_date(entry.published_time()); | |
183 | |
184 if (std::find(entry.labels().begin(), entry.labels().end(), | |
185 "shared-with-me") != entry.labels().end()) { | |
186 // Set current time to mark the file is shared_with_me, since ResourceEntry | |
187 // doesn't have |shared_with_me_date| equivalent. | |
188 file->set_shared_with_me_date(base::Time::Now()); | |
189 } | |
190 | |
191 file->set_shared(std::find(entry.labels().begin(), entry.labels().end(), | |
192 "shared") != entry.labels().end()); | |
193 | |
194 if (entry.is_folder()) { | |
195 file->set_mime_type(kDriveFolderMimeType); | |
196 } else { | |
197 std::string mime_type = GetMimeTypeFromEntryKind(entry.kind()); | |
198 if (mime_type.empty()) | |
199 mime_type = entry.content_mime_type(); | |
200 file->set_mime_type(mime_type); | |
201 } | |
202 | |
203 file->set_md5_checksum(entry.file_md5()); | |
204 file->set_file_size(entry.file_size()); | |
205 | |
206 file->mutable_labels()->set_trashed(entry.deleted()); | |
207 file->set_etag(entry.etag()); | |
208 | |
209 google_apis::ImageMediaMetadata* image_media_metadata = | |
210 file->mutable_image_media_metadata(); | |
211 image_media_metadata->set_width(entry.image_width()); | |
212 image_media_metadata->set_height(entry.image_height()); | |
213 image_media_metadata->set_rotation(entry.image_rotation()); | |
214 | |
215 std::vector<google_apis::ParentReference>* parents = file->mutable_parents(); | |
216 for (size_t i = 0; i < entry.links().size(); ++i) { | |
217 using google_apis::Link; | |
218 const Link& link = *entry.links()[i]; | |
219 switch (link.type()) { | |
220 case Link::LINK_PARENT: { | |
221 google_apis::ParentReference parent; | |
222 parent.set_parent_link(link.href()); | |
223 | |
224 std::string file_id = | |
225 drive::util::ExtractResourceIdFromUrl(link.href()); | |
226 parent.set_file_id(file_id); | |
227 parents->push_back(parent); | |
228 break; | |
229 } | |
230 case Link::LINK_ALTERNATE: | |
231 file->set_alternate_link(link.href()); | |
232 break; | |
233 default: | |
234 break; | |
235 } | |
236 } | |
237 | |
238 file->set_modified_date(entry.updated_time()); | |
239 file->set_last_viewed_by_me_date(entry.last_viewed_time()); | |
240 | |
241 return file.Pass(); | |
242 } | |
243 | |
244 google_apis::DriveEntryKind GetKind( | 157 google_apis::DriveEntryKind GetKind( |
245 const google_apis::FileResource& file_resource) { | 158 const google_apis::FileResource& file_resource) { |
246 if (file_resource.IsDirectory()) | 159 if (file_resource.IsDirectory()) |
247 return google_apis::ENTRY_KIND_FOLDER; | 160 return google_apis::ENTRY_KIND_FOLDER; |
248 | 161 |
249 const std::string& mime_type = file_resource.mime_type(); | 162 const std::string& mime_type = file_resource.mime_type(); |
250 if (mime_type == kGoogleDocumentMimeType) | 163 if (mime_type == kGoogleDocumentMimeType) |
251 return google_apis::ENTRY_KIND_DOCUMENT; | 164 return google_apis::ENTRY_KIND_DOCUMENT; |
252 if (mime_type == kGoogleSpreadsheetMimeType) | 165 if (mime_type == kGoogleSpreadsheetMimeType) |
253 return google_apis::ENTRY_KIND_SPREADSHEET; | 166 return google_apis::ENTRY_KIND_SPREADSHEET; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 | 343 |
431 base::MD5Digest digest; | 344 base::MD5Digest digest; |
432 base::MD5Final(&digest, &context); | 345 base::MD5Final(&digest, &context); |
433 return MD5DigestToBase16(digest); | 346 return MD5DigestToBase16(digest); |
434 } | 347 } |
435 | 348 |
436 const char kWapiRootDirectoryResourceId[] = "folder:root"; | 349 const char kWapiRootDirectoryResourceId[] = "folder:root"; |
437 | 350 |
438 } // namespace util | 351 } // namespace util |
439 } // namespace drive | 352 } // namespace drive |
OLD | NEW |