// Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html syntax = "proto3"; option java_multiple_files = true; package anki.sync; import "anki/generic.proto"; /// Syncing methods are only available with a Backend handle. service SyncService {} service BackendSyncService { rpc SyncMedia(SyncAuth) returns (generic.Empty); rpc AbortMediaSync(generic.Empty) returns (generic.Empty); rpc SyncLogin(SyncLoginRequest) returns (SyncAuth); rpc SyncStatus(SyncAuth) returns (SyncStatusResponse); rpc SyncCollection(SyncAuth) returns (SyncCollectionResponse); rpc FullUpload(SyncAuth) returns (generic.Empty); rpc FullDownload(SyncAuth) returns (generic.Empty); rpc AbortSync(generic.Empty) returns (generic.Empty); } message SyncAuth { string hkey = 1; optional string endpoint = 2; optional uint32 io_timeout_secs = 3; } message SyncLoginRequest { string username = 1; string password = 2; optional string endpoint = 3; } message SyncStatusResponse { enum Required { NO_CHANGES = 0; NORMAL_SYNC = 1; FULL_SYNC = 2; } Required required = 1; optional string new_endpoint = 4; } message SyncCollectionResponse { enum ChangesRequired { NO_CHANGES = 0; NORMAL_SYNC = 1; FULL_SYNC = 2; // local collection has no cards; upload not an option FULL_DOWNLOAD = 3; // remote collection has no cards; download not an option FULL_UPLOAD = 4; } uint32 host_number = 1; string server_message = 2; ChangesRequired required = 3; optional string new_endpoint = 4; }