syntax = "proto2"; message ServerInfo_DeckStorage_File { optional uint32 creation_time = 1; optional bool is_public = 2; // Preview metadata computed by the uploading client, so other clients can // render this deck (e.g. in a visual storage grid) without downloading the // full deck list. Empty for decks uploaded before the metadata columns. optional string banner_card_name = 3; optional string banner_card_provider = 4; optional string color_identity = 5; // Tag names associated with the deck. Empty for decks uploaded before the // tags column existed. repeated string tags = 6; // Stable per-deck identity for two-way collection sync. Empty for decks // uploaded before the sync migration until they are re-uploaded. optional string guid = 7; // Content hash (DeckList::getDeckHash) for change detection without // downloading the full list. optional string hash = 8; // Last modification time, seconds since Unix epoch. Drives newest-wins // default and conflict-dialog recency highlight. optional uint64 last_modified = 9; } message ServerInfo_DeckStorage_Folder { repeated ServerInfo_DeckStorage_TreeItem items = 1; optional bool is_public = 2; } message ServerInfo_DeckStorage_TreeItem { optional uint32 id = 1; optional string name = 2; optional ServerInfo_DeckStorage_File file = 10; optional ServerInfo_DeckStorage_Folder folder = 11; }