1// Copyright (c) 2012 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// Protocol buffer definitions for representing Drive files and directories, 6// and serializing them for the resource metadata database. 7 8syntax = "proto2"; 9 10option optimize_for = LITE_RUNTIME; 11 12package drive; 13 14// Represents base::PlatformFileInfo. 15message PlatformFileInfoProto { 16 optional int64 size = 1; 17 optional bool is_directory = 2; 18 optional bool is_symbolic_link = 3; 19 optional int64 last_modified = 4; 20 optional int64 last_accessed = 5; 21 optional int64 creation_time = 6; 22} 23 24// File specific info, which is a part of ResourceEntry. 25message FileSpecificInfo { 26 // The argument with ID 1 (thumbnail_url) had been used, but got deleted. 27 28 // This URL is used for opening hosted documents with Google Drive's web 29 // interface. 30 optional string alternate_url = 2; 31 32 // Content mime type like "text/plain". 33 optional string content_mime_type = 3; 34 35 // The MD5 of contents of a regular file. Hosted files don't have MD5. 36 optional string md5 = 4; 37 38 // File extension, including the dot, used for hosted documents 39 // (ex. ".gsheet" for hosted spreadsheets). 40 optional string document_extension = 5; 41 42 // True if the file is a hosted document (i.e. document hosted on 43 // drive.google.com such as documents, spreadsheets, and presentations). 44 optional bool is_hosted_document = 6; 45 46 // The argument with ID 7 had been used, but got deleted. 47 48 // Width of the media if the file is an image. 49 optional int64 image_width = 8; 50 51 // Height of the media if the file is an image. 52 optional int64 image_height = 9; 53 54 // Rotation of the image in clockwise degrees (if an image). 55 optional int64 image_rotation = 10; 56 57 // Cache related states. 58 optional FileCacheEntry cache_state = 11; 59} 60 61// Directory specific info, which is a part of ResourceEntry. 62message DirectorySpecificInfo { 63 // The changestamp of this directory. This value can be larger than the 64 // changestamp of ResourceMetadata, if this directory was 65 // "fast-fetched". See crbug.com/178348 for details about the "fast-fetch" 66 // feature. 67 optional int64 changestamp = 1; 68} 69 70// Represents metadata of a resource (file or directory) on Drive. 71message ResourceEntry { 72 optional PlatformFileInfoProto file_info = 1; 73 // Base name of the entry. The base name is used for file paths. Usually 74 // identical to |title|, but some extra number is inserted if multiple 75 // entries with the same title exist in the same directory, to ensure that 76 // file paths are unique. For instance, if two files titled "foo.jpg" exist 77 // in the same directory, which is allowed on drive.google.com, one of them 78 // will have a base name of "foo (2).jpg". 79 optional string base_name = 2; 80 81 // Title of the entry. See the comment at |base_name|. 82 optional string title = 3; 83 84 // Resource ID of the entry. Guaranteed to be unique. 85 optional string resource_id = 4; 86 87 // Local ID of the entry. 88 optional string local_id = 15; 89 90 // Local ID of the parent entry. 91 optional string parent_local_id = 7; 92 93 // This field is used for processing the change list from the 94 // server. Deleted entries won't be stored in ResourceMetadata. 95 optional bool deleted = 11; 96 97 // True if the entry is labeled with "shared-with-me", i.e., owned by someone 98 // else initially and later shared to the current user. 99 optional bool shared_with_me = 14; 100 101 // True if the entry is labeled "shared". Either the entry itself or its 102 // ancestor is shared (to the user from / by the user to) other accounts. 103 optional bool shared = 17; 104 105 // File specific information, such as MD5. 106 optional FileSpecificInfo file_specific_info = 9; 107 108 // Directory specific information, such as changestamp. 109 optional DirectorySpecificInfo directory_specific_info = 13; 110 111 // Used to remember whether this entry is edited locally or not. 112 enum EditState { 113 CLEAN = 0; // No local edit. 114 DIRTY = 1; // Edited locally. 115 SYNCING = 2; // Local change is being synced to the server. 116 } 117 118 // Indicates whether this entry's metadata is edited locally or not. 119 optional EditState metadata_edit_state = 16; 120 121 // The time of the last modification. 122 optional int64 modification_date = 18; 123} 124 125// Container for the header part of ResourceMetadata. 126message ResourceMetadataHeader { 127 // Monotonically increasing version number, which is changed when 128 // incompatible change is made to the DB format. kDBVersion in 129 // drive_resource_metadata_storage.h defines the current version. 130 optional int32 version = 1; 131 optional int64 largest_changestamp = 2; 132} 133 134// Message to store information of an existing cache file. 135message FileCacheEntry { 136 // MD5 of the cache file. 137 optional string md5 = 1; 138 139 // True if the file is present locally. 140 optional bool is_present = 2; 141 142 // True if the file is pinned (i.e. available offline). 143 optional bool is_pinned = 3; 144 145 // True if the file is dirty (i.e. modified locally). 146 optional bool is_dirty = 4; 147 148 // When adding a new state, be sure to update TestFileCacheState and test 149 // functions defined in test_util.cc. 150} 151