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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_ 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_ 7 8 #include <string> 9 10 #include "base/bind.h" 11 #include "base/callback.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_vector.h" 14 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 15 #include "chrome/browser/sync_file_system/sync_status_code.h" 16 #include "google_apis/drive/gdata_errorcode.h" 17 #include "storage/common/blob/scoped_file.h" 18 19 namespace google_apis { 20 class ChangeResource; 21 class FileResource; 22 class ResourceEntry; 23 } 24 25 namespace sync_file_system { 26 namespace drive_backend { 27 28 class LevelDBWrapper; 29 30 void PutVersionToDB(int64 version, LevelDBWrapper* db); 31 32 void PutServiceMetadataToDB(const ServiceMetadata& service_metadata, 33 LevelDBWrapper* db); 34 void PutFileMetadataToDB(const FileMetadata& file, LevelDBWrapper* db); 35 void PutFileTrackerToDB(const FileTracker& tracker, LevelDBWrapper* db); 36 37 void PutFileMetadataDeletionToDB(const std::string& file_id, 38 LevelDBWrapper* db); 39 void PutFileTrackerDeletionToDB(int64 tracker_id, LevelDBWrapper* db); 40 41 bool HasFileAsParent(const FileDetails& details, const std::string& file_id); 42 43 bool IsAppRoot(const FileTracker& tracker); 44 45 std::string GetTrackerTitle(const FileTracker& tracker); 46 47 SyncStatusCode GDataErrorCodeToSyncStatusCode( 48 google_apis::GDataErrorCode error); 49 50 // Returns true if |str| starts with |prefix|, and removes |prefix| from |str|. 51 // If |out| is not NULL, the result is stored in it. 52 bool RemovePrefix(const std::string& str, const std::string& prefix, 53 std::string* out); 54 55 scoped_ptr<ServiceMetadata> InitializeServiceMetadata(LevelDBWrapper* db); 56 57 template <typename Src, typename Dest> 58 void AppendContents(const Src& src, Dest* dest) { 59 dest->insert(dest->end(), src.begin(), src.end()); 60 } 61 62 template <typename Container> 63 const typename Container::mapped_type& LookUpMap( 64 const Container& container, 65 const typename Container::key_type& key, 66 const typename Container::mapped_type& default_value) { 67 typename Container::const_iterator found = container.find(key); 68 if (found == container.end()) 69 return default_value; 70 return found->second; 71 } 72 73 template <typename R, typename S, typename T> 74 R ComposeFunction(const base::Callback<T()>& g, 75 const base::Callback<R(S)>& f) { 76 return f.Run(g.Run()); 77 } 78 79 template <typename R, typename S, typename T> 80 base::Callback<R()> CreateComposedFunction( 81 const base::Callback<T()>& g, 82 const base::Callback<R(S)>& f) { 83 return base::Bind(&ComposeFunction<R, S, T>, g, f); 84 } 85 86 } // namespace drive_backend 87 } // namespace sync_file_system 88 89 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_DRIVE_BACKEND_UTIL_H_ 90