drive_backend_util.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
16e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org// Copyright 2013 The Chromium Authors. All rights reserved. 26e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org// Use of this source code is governed by a BSD-style license that can be 36e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org// found in the LICENSE file. 46e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 56e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "chrome/browser/sync_file_system/drive_backend/drive_backend_util.h" 66e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 76e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include <string> 86e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 96e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "base/logging.h" 106e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "base/memory/scoped_vector.h" 116e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "base/strings/string_number_conversions.h" 126e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "chrome/browser/drive/drive_api_util.h" 136e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "chrome/browser/google_apis/drive_api_parser.h" 146e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "chrome/browser/google_apis/gdata_wapi_parser.h" 156e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h" 166e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 176e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org#include "third_party/leveldatabase/src/include/leveldb/write_batch.h" 186e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 196e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.orgnamespace sync_file_system { 206e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.orgnamespace drive_backend { 216e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 226e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.orgvoid PutServiceMetadataToBatch(const ServiceMetadata& service_metadata, 236e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org leveldb::WriteBatch* batch) { 246e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org std::string value; 256e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org bool success = service_metadata.SerializeToString(&value); 266e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org DCHECK(success); 276e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org batch->Put(kServiceMetadataKey, value); 286e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org} 296e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 306e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.orgvoid PutFileToBatch(const FileMetadata& file, leveldb::WriteBatch* batch) { 316e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org std::string value; 326e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org bool success = file.SerializeToString(&value); 336e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org DCHECK(success); 346e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org batch->Put(kFileMetadataKeyPrefix + file.file_id(), value); 356e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org} 366e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 376e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.orgvoid PutTrackerToBatch(const FileTracker& tracker, leveldb::WriteBatch* batch) { 386e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org std::string value; 396e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org bool success = tracker.SerializeToString(&value); 406e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org DCHECK(success); 416e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org batch->Put(kFileTrackerKeyPrefix + base::Int64ToString(tracker.tracker_id()), 426e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org value); 436e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org} 446e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org 456e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.orgvoid PopulateFileDetailsByFileResource( 466e34ceb97c11f4d390742a8364e77a65b8a01200henrike@webrtc.org const google_apis::FileResource& file_resource, 47 FileDetails* details) { 48 details->clear_parent_folder_ids(); 49 for (ScopedVector<google_apis::ParentReference>::const_iterator itr = 50 file_resource.parents().begin(); 51 itr != file_resource.parents().end(); 52 ++itr) { 53 details->add_parent_folder_ids((*itr)->file_id()); 54 } 55 details->set_title(file_resource.title()); 56 57 google_apis::DriveEntryKind kind = drive::util::GetKind(file_resource); 58 if (kind == google_apis::ENTRY_KIND_FILE) 59 details->set_file_kind(FILE_KIND_FILE); 60 else if (kind == google_apis::ENTRY_KIND_FOLDER) 61 details->set_file_kind(FILE_KIND_FOLDER); 62 else 63 details->set_file_kind(FILE_KIND_UNSUPPORTED); 64 65 details->set_md5(file_resource.md5_checksum()); 66 details->set_etag(file_resource.etag()); 67 details->set_creation_time(file_resource.created_date().ToInternalValue()); 68 details->set_modification_time( 69 file_resource.modified_date().ToInternalValue()); 70 details->set_deleted(false); 71} 72 73scoped_ptr<FileMetadata> CreateFileMetadataFromFileResource( 74 int64 change_id, 75 const google_apis::FileResource& resource) { 76 scoped_ptr<FileMetadata> file(new FileMetadata); 77 file->set_file_id(resource.file_id()); 78 79 FileDetails* details = file->mutable_details(); 80 details->set_change_id(change_id); 81 82 if (resource.labels().is_trashed()) { 83 details->set_deleted(true); 84 return file.Pass(); 85 } 86 87 PopulateFileDetailsByFileResource(resource, details); 88 return file.Pass(); 89} 90 91scoped_ptr<FileMetadata> CreateFileMetadataFromChangeResource( 92 const google_apis::ChangeResource& change) { 93 scoped_ptr<FileMetadata> file(new FileMetadata); 94 file->set_file_id(change.file_id()); 95 96 FileDetails* details = file->mutable_details(); 97 details->set_change_id(change.change_id()); 98 99 if (change.is_deleted()) { 100 details->set_deleted(true); 101 return file.Pass(); 102 } 103 104 PopulateFileDetailsByFileResource(*change.file(), details); 105 return file.Pass(); 106} 107 108} // namespace drive_backend 109} // namespace sync_file_system 110