Home | History | Annotate | Download | only in drive
      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 
      8 syntax = "proto2";
      9 
     10 option optimize_for = LITE_RUNTIME;
     11 
     12 package drive;
     13 
     14 // Represents base::PlatformFileInfo.
     15 message 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.
     25 message 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.
     62 message 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.
     71 message 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.
    126 message 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.
    135 message 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