// 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;
  optional bool is_team_drive_root = 7;
}

// 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;
}

// Capabilities (current permissions) info for an entry.
message CapabilitiesInfo {
  // Whether the current user can copy this file. For a Team Drive root, whether
  // the current user can copy files in this Team Drive.
  optional bool can_copy = 1;
  // Whether the current user can delete this file. For a Team Drive root,
  // whether the current user can delete the Team Drive.
  optional bool can_delete = 2;
  // Whether the current user can rename this file. For a Team Drive root,
  // whether the current user can rename the Team Drive.
  optional bool can_rename = 3;
  // Whether the current user can add children to this folder. For a Team Drive
  // root, whether the current user can add children to folders in this Team
  // Drive. This is always false when the item is not a folder or a Team Drive.
  optional bool can_add_children = 4;
  // Whether the current user can modify the sharing settings for this file. For
  // a Team Drive root, whether the current user can share files or folders in
  // this Team Drive.
  optional bool can_share = 5;
}

// File specific info, which is a part of ResourceEntry.
message FileSpecificInfo {
  // The argument with ID 1 (thumbnail_url) had been used, but got deleted.

  // The argument with ID 2 (alternate_url) had been used, but got deleted.

  // 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;
}

// Represents metadata for a single team drive, store in the root entry.
message TeamDriveRootSpecificInfo {
  // The individual start page token for this team drive.
  optional string start_page_token = 1;
}

// 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.
  // TODO(slangley): Remove changestamp once migration code can be removed.
  optional int64 changestamp = 1 [deprecated = true];

  // The start page token of this directory. This value may not match the
  // start_page_token of ResourceMetadata if the directory was "fast-fetched".
  optional string start_page_token = 2;

  // The last time we read this directory from the server when fast fetching.
  // This is used on initial load when we do not have the full list of files
  // fetched from the server to prevent repeated reading of the directory file
  // list.
  optional int64 last_read_time_ms = 3;
}

// Represents metadata of a resource (file or directory) on Drive.
// Next Entry: 24
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 "starred".
  optional bool starred = 20;

  // 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;

  // The capabilities (current permissions) for this file/folder/team drive.
  optional CapabilitiesInfo capabilities_info = 24;

  // File specific information, such as MD5.
  optional FileSpecificInfo file_specific_info = 9;

  // Directory specific information, such as changestamp.
  optional DirectorySpecificInfo directory_specific_info = 13;

  // Team Drive root specific information, if this entry is a team drive root.
  optional TeamDriveRootSpecificInfo team_drive_root_specific_info = 23;

  // 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. This is a timestamp used for conflict
  // resolution and can not be modified arbitrarily by users, in contrast to
  // PlatformFileInfoProto.last_modified and last_modified_by_me.
  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;

  // The time of the last modification by the user. When the file is modified
  // by other users, this timestamp is not updated.
  // This timestamp is similar to last_modified in PlatformFileInfoProto rather
  // than modification_date; it will be set to the same value as last_modified
  // if the operation is done by the user. This field is here, not in
  // PlatformFileInfoProto, just because this field does not have a
  // corresponding field in base::File::Info.
  optional int64 last_modified_by_me = 21;

  // This URL is used for opening hosted documents with Google Drive's web
  // interface.
  optional string alternate_url = 22;
}

// 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
  // resource_metadata_storage.h defines the current version.
  optional int32 version = 1;

  // TODO(slangley): Remove changestamp once migration code can be removed.
  optional int64 largest_changestamp = 2 [deprecated = true];

  // The argument with ID 3 (starred_property_initialized) had been used, but
  // got deleted.
  reserved 3;

  // The start_page_token for the users default corpus changelist.
  optional string start_page_token = 4;
}

// 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.
}
