OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/sync_file_system/drive_backend/folder_creator.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/folder_creator.h" |
6 | 6 |
7 #include "chrome/browser/drive/drive_api_util.h" | 7 #include "chrome/browser/drive/drive_api_util.h" |
8 #include "chrome/browser/drive/drive_service_interface.h" | 8 #include "chrome/browser/drive/drive_service_interface.h" |
9 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" | 9 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" |
10 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 10 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 54 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); |
55 if (status != SYNC_STATUS_OK) { | 55 if (status != SYNC_STATUS_OK) { |
56 callback.Run(std::string(), status); | 56 callback.Run(std::string(), status); |
57 return; | 57 return; |
58 } | 58 } |
59 | 59 |
60 drive_service_->SearchByTitle( | 60 drive_service_->SearchByTitle( |
61 title_, parent_folder_id_, | 61 title_, parent_folder_id_, |
62 base::Bind(&FolderCreator::DidListFolders, | 62 base::Bind(&FolderCreator::DidListFolders, |
63 weak_ptr_factory_.GetWeakPtr(), callback, | 63 weak_ptr_factory_.GetWeakPtr(), callback, |
64 base::Passed(ScopedVector<google_apis::ResourceEntry>()))); | 64 base::Passed(ScopedVector<google_apis::FileResource>()))); |
65 } | 65 } |
66 | 66 |
67 void FolderCreator::DidListFolders( | 67 void FolderCreator::DidListFolders( |
68 const FileIDCallback& callback, | 68 const FileIDCallback& callback, |
69 ScopedVector<google_apis::ResourceEntry> candidates, | 69 ScopedVector<google_apis::FileResource> candidates, |
70 google_apis::GDataErrorCode error, | 70 google_apis::GDataErrorCode error, |
71 scoped_ptr<google_apis::ResourceList> resource_list) { | 71 scoped_ptr<google_apis::FileList> file_list) { |
72 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 72 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); |
73 if (status != SYNC_STATUS_OK) { | 73 if (status != SYNC_STATUS_OK) { |
74 callback.Run(std::string(), status); | 74 callback.Run(std::string(), status); |
75 return; | 75 return; |
76 } | 76 } |
77 | 77 |
78 if (!resource_list) { | 78 if (!file_list) { |
79 NOTREACHED(); | 79 NOTREACHED(); |
80 callback.Run(std::string(), SYNC_STATUS_FAILED); | 80 callback.Run(std::string(), SYNC_STATUS_FAILED); |
81 return; | 81 return; |
82 } | 82 } |
83 | 83 |
84 candidates.reserve(candidates.size() + resource_list->entries().size()); | 84 candidates.reserve(candidates.size() + file_list->items().size()); |
85 candidates.insert(candidates.end(), | 85 candidates.insert(candidates.end(), |
86 resource_list->entries().begin(), | 86 file_list->items().begin(), |
87 resource_list->entries().end()); | 87 file_list->items().end()); |
88 resource_list->mutable_entries()->weak_clear(); | 88 file_list->mutable_items()->weak_clear(); |
89 | 89 |
90 GURL next_feed; | 90 if (!file_list->next_link().is_empty()) { |
91 if (resource_list->GetNextFeedURL(&next_feed)) { | |
92 drive_service_->GetRemainingFileList( | 91 drive_service_->GetRemainingFileList( |
93 next_feed, | 92 file_list->next_link(), |
94 base::Bind(&FolderCreator::DidListFolders, | 93 base::Bind(&FolderCreator::DidListFolders, |
95 weak_ptr_factory_.GetWeakPtr(), callback, | 94 weak_ptr_factory_.GetWeakPtr(), callback, |
96 base::Passed(&candidates))); | 95 base::Passed(&candidates))); |
97 return; | 96 return; |
98 } | 97 } |
99 | 98 |
100 ScopedVector<google_apis::FileResource> files; | 99 const google_apis::FileResource* oldest = NULL; |
101 files.reserve(candidates.size()); | |
102 for (size_t i = 0; i < candidates.size(); ++i) { | 100 for (size_t i = 0; i < candidates.size(); ++i) { |
103 files.push_back(drive::util::ConvertResourceEntryToFileResource( | 101 const google_apis::FileResource& entry = *candidates[i]; |
104 *candidates[i]).release()); | 102 if (!entry.IsDirectory() || entry.labels().is_trashed()) |
| 103 continue; |
| 104 |
| 105 if (!oldest || oldest->created_date() > entry.created_date()) |
| 106 oldest = &entry; |
105 } | 107 } |
106 | 108 |
107 scoped_ptr<google_apis::ResourceEntry> oldest = | |
108 GetOldestCreatedFolderResource(candidates.Pass()); | |
109 | |
110 if (!oldest) { | 109 if (!oldest) { |
111 callback.Run(std::string(), SYNC_FILE_ERROR_NOT_FOUND); | 110 callback.Run(std::string(), SYNC_FILE_ERROR_NOT_FOUND); |
112 return; | 111 return; |
113 } | 112 } |
114 | 113 |
115 std::string file_id = oldest->resource_id(); | 114 std::string file_id = oldest->file_id(); |
116 | 115 |
117 metadata_database_->UpdateByFileResourceList( | 116 metadata_database_->UpdateByFileResourceList( |
118 files.Pass(), base::Bind(&FolderCreator::DidUpdateDatabase, | 117 candidates.Pass(), base::Bind(&FolderCreator::DidUpdateDatabase, |
119 weak_ptr_factory_.GetWeakPtr(), | 118 weak_ptr_factory_.GetWeakPtr(), |
120 file_id, callback)); | 119 file_id, callback)); |
121 } | 120 } |
122 | 121 |
123 void FolderCreator::DidUpdateDatabase(const std::string& file_id, | 122 void FolderCreator::DidUpdateDatabase(const std::string& file_id, |
124 const FileIDCallback& callback, | 123 const FileIDCallback& callback, |
125 SyncStatusCode status) { | 124 SyncStatusCode status) { |
126 if (status != SYNC_STATUS_OK) { | 125 if (status != SYNC_STATUS_OK) { |
127 callback.Run(std::string(), status); | 126 callback.Run(std::string(), status); |
128 return; | 127 return; |
129 } | 128 } |
130 | 129 |
131 DCHECK(!file_id.empty()); | 130 DCHECK(!file_id.empty()); |
132 if (!metadata_database_->FindFileByFileID(file_id, NULL)) { | 131 if (!metadata_database_->FindFileByFileID(file_id, NULL)) { |
133 callback.Run(std::string(), SYNC_FILE_ERROR_NOT_FOUND); | 132 callback.Run(std::string(), SYNC_FILE_ERROR_NOT_FOUND); |
134 return; | 133 return; |
135 } | 134 } |
136 | 135 |
137 callback.Run(file_id, status); | 136 callback.Run(file_id, status); |
138 } | 137 } |
139 | 138 |
140 } // namespace drive_backend | 139 } // namespace drive_backend |
141 } // namespace sync_file_system | 140 } // namespace sync_file_system |
OLD | NEW |