// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Protocol buffer definitions for representing Drive files and directories, // and serializing them for the resource metadata database. syntax = "proto2"; option optimize_for = LITE_RUNTIME; package drive; // Represents base::PlatformFileInfo. message PlatformFileInfoProto { optional int64 size = 1; optional bool is_directory = 2; optional bool is_symbolic_link = 3; optional int64 last_modified = 4; optional int64 last_accessed = 5; optional int64 creation_time = 6; } // Represents a property for a file. message Property { optional string key = 1; optional string value = 2; // Visibility of the property. Either restricted to the same client, or // public. enum Visibility { PRIVATE = 0; PUBLIC = 1; } optional Visibility visibility = 3; } // File specific info, which is a part of ResourceEntry. message FileSpecificInfo { // The argument with ID 1 (thumbnail_url) had been used, but got deleted. // This URL is used for opening hosted documents with Google Drive's web // interface. optional string alternate_url = 2; // Content mime type like "text/plain". optional string content_mime_type = 3; // The MD5 of contents of a regular file. Hosted files don't have MD5. optional string md5 = 4; // File extension, including the dot, used for hosted documents // (ex. ".gsheet" for hosted spreadsheets). optional string document_extension = 5; // True if the file is a hosted document (i.e. document hosted on // drive.google.com such as documents, spreadsheets, and presentations). optional bool is_hosted_document = 6; // The argument with ID 7 had been used, but got deleted. // Width of the media if the file is an image. optional int64 image_width = 8; // Height of the media if the file is an image. optional int64 image_height = 9; // Rotation of the image in clockwise degrees (if an image). optional int64 image_rotation = 10; // Cache related states. optional FileCacheEntry cache_state = 11; } // Directory specific info, which is a part of ResourceEntry. message DirectorySpecificInfo { // The changestamp of this directory. This value can be larger than the // changestamp of ResourceMetadata, if this directory was // "fast-fetched". See crbug.com/178348 for details about the "fast-fetch" // feature. optional int64 changestamp = 1; } // Represents metadata of a resource (file or directory) on Drive. message ResourceEntry { optional PlatformFileInfoProto file_info = 1; // Base name of the entry. The base name is used for file paths. Usually // identical to |title|, but some extra number is inserted if multiple // entries with the same title exist in the same directory, to ensure that // file paths are unique. For instance, if two files titled "foo.jpg" exist // in the same directory, which is allowed on drive.google.com, one of them // will have a base name of "foo (2).jpg". optional string base_name = 2; // Title of the entry. See the comment at |base_name|. optional string title = 3; // Resource ID of the entry. Guaranteed to be unique. optional string resource_id = 4; // Local ID of the entry. optional string local_id = 15; // Local ID of the parent entry. optional string parent_local_id = 7; // This field is used for processing the change list from the // server. Deleted entries won't be stored in ResourceMetadata. optional bool deleted = 11; // True if the entry is labeled with "shared-with-me", i.e., owned by someone // else initially and later shared to the current user. optional bool shared_with_me = 14; // True if the entry is labeled "shared". Either the entry itself or its // ancestor is shared (to the user from / by the user to) other accounts. optional bool shared = 17; // File specific information, such as MD5. optional FileSpecificInfo file_specific_info = 9; // Directory specific information, such as changestamp. optional DirectorySpecificInfo directory_specific_info = 13; // Used to remember whether this entry is edited locally or not. enum EditState { CLEAN = 0; // No local edit. DIRTY = 1; // Edited locally. SYNCING = 2; // Local change is being synced to the server. } // Indicates whether this entry's metadata is edited locally or not. optional EditState metadata_edit_state = 16; // The time of the last modification. optional int64 modification_date = 18; // List of new properties which are not synced yet via Drive API. Note, that // currently existing properties are never fetched via Drive API, as they are // never used. That would cause growing the proto size for no reason. repeated Property new_properties = 19; } // Container for the header part of ResourceMetadata. message ResourceMetadataHeader { // Monotonically increasing version number, which is changed when // incompatible change is made to the DB format. kDBVersion in // drive_resource_metadata_storage.h defines the current version. optional int32 version = 1; optional int64 largest_changestamp = 2; } // Message to store information of an existing cache file. message FileCacheEntry { // MD5 of the cache file. optional string md5 = 1; // True if the file is present locally. optional bool is_present = 2; // True if the file is pinned (i.e. available offline). optional bool is_pinned = 3; // True if the file is dirty (i.e. modified locally). optional bool is_dirty = 4; // When adding a new state, be sure to update TestFileCacheState and test // functions defined in test_util.cc. }