Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(234)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/folder_creator.cc

Issue 305913002: drive: Replace GetResourceListCallback in DriveServiceInterface with FileListCallback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698