#include "base/metrics/histogram.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/chromeos/drive/drive.pb.h"
+#include "chrome/browser/chromeos/drive/file_change.h"
#include "chrome/browser/chromeos/drive/file_system_util.h"
#include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
#include "chrome/browser/chromeos/drive/resource_metadata.h"
+#include "chrome/browser/drive/drive_api_util.h"
#include "google_apis/drive/drive_api_parser.h"
-#include "google_apis/drive/gdata_wapi_parser.h"
namespace drive {
namespace internal {
ChangeList::ChangeList() {}
-ChangeList::ChangeList(const google_apis::ResourceList& resource_list)
- : largest_changestamp_(resource_list.largest_changestamp()) {
- resource_list.GetNextFeedURL(&next_url_);
+ChangeList::ChangeList(const google_apis::ChangeList& change_list)
+ : next_url_(change_list.next_link()),
+ largest_changestamp_(change_list.largest_change_id()) {
+ const ScopedVector<google_apis::ChangeResource>& items = change_list.items();
+ entries_.resize(items.size());
+ parent_resource_ids_.resize(items.size());
+ size_t entries_index = 0;
+ for (size_t i = 0; i < items.size(); ++i) {
+ if (ConvertChangeResourceToResourceEntry(
+ *items[i],
+ &entries_[entries_index],
+ &parent_resource_ids_[entries_index])) {
+ ++entries_index;
+ }
+ }
+ entries_.resize(entries_index);
+ parent_resource_ids_.resize(entries_index);
+}
- entries_.resize(resource_list.entries().size());
- parent_resource_ids_.resize(resource_list.entries().size());
+ChangeList::ChangeList(const google_apis::FileList& file_list)
+ : next_url_(file_list.next_link()),
+ largest_changestamp_(0) {
+ const ScopedVector<google_apis::FileResource>& items = file_list.items();
+ entries_.resize(items.size());
+ parent_resource_ids_.resize(items.size());
size_t entries_index = 0;
- for (size_t i = 0; i < resource_list.entries().size(); ++i) {
- if (ConvertToResourceEntry(*resource_list.entries()[i],
- &entries_[entries_index],
- &parent_resource_ids_[entries_index])) {
+ for (size_t i = 0; i < items.size(); ++i) {
+ if (ConvertFileResourceToResourceEntry(
+ *items[i],
+ &entries_[entries_index],
+ &parent_resource_ids_[entries_index])) {
++entries_index;
}
}
ChangeList::~ChangeList() {}
ChangeListProcessor::ChangeListProcessor(ResourceMetadata* resource_metadata)
- : resource_metadata_(resource_metadata) {
+ : resource_metadata_(resource_metadata), changed_files_(new FileChange) {
}
ChangeListProcessor::~ChangeListProcessor() {
new_entry.directory_specific_info().changestamp());
error = resource_metadata_->RefreshEntry(new_entry);
}
- DVLOG(1) << "Change was discarded for: "
- << resource_metadata_->GetFilePath(local_id).value();
+ DVLOG(1) << "Change was discarded for: " << entry.resource_id();
}
break;
case FILE_ERROR_NOT_FOUND: { // Adding a new entry.
base::FilePath file_path;
if (resource_metadata_->GetIdByResourceId(
entry.resource_id(), &local_id) == FILE_ERROR_OK)
- file_path = resource_metadata_->GetFilePath(local_id);
+ resource_metadata_->GetFilePath(local_id, &file_path);
if (!file_path.empty()) {
- // Notify parent.
- changed_dirs_.insert(file_path.DirName());
-
- if (entry.file_info().is_directory()) {
- // Notify self if entry is a directory.
- changed_dirs_.insert(file_path);
-
- // Notify all descendants if it is a directory deletion.
- if (entry.deleted()) {
- std::set<base::FilePath> sub_directories;
- resource_metadata_->GetSubDirectoriesRecursively(local_id,
- &sub_directories);
- changed_dirs_.insert(sub_directories.begin(), sub_directories.end());
- }
- }
+ FileChange::ChangeType type =
+ entry.deleted() ? FileChange::DELETE : FileChange::ADD_OR_UPDATE;
+ changed_files_->Update(file_path, entry, type);
}
}