2019-12-24 04:33:44 +01:00
|
|
|
syntax = "proto3";
|
|
|
|
|
2020-02-23 03:21:12 +01:00
|
|
|
import "fluent.proto";
|
|
|
|
|
2020-06-17 07:27:08 +02:00
|
|
|
package BackendProto;
|
2019-12-24 04:33:44 +01:00
|
|
|
|
2020-05-22 13:25:25 +02:00
|
|
|
// Generic containers
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
2019-12-24 04:33:44 +01:00
|
|
|
message Empty {}
|
|
|
|
|
2020-03-22 05:15:02 +01:00
|
|
|
message OptionalInt32 {
|
|
|
|
sint32 val = 1;
|
|
|
|
}
|
|
|
|
|
2020-04-14 01:32:28 +02:00
|
|
|
message OptionalUInt32 {
|
|
|
|
uint32 val = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-22 13:25:25 +02:00
|
|
|
message Int32 {
|
|
|
|
sint32 val = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-23 08:19:48 +02:00
|
|
|
message UInt32 {
|
|
|
|
uint32 val = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-22 13:25:25 +02:00
|
|
|
message Int64 {
|
|
|
|
int64 val = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message String {
|
|
|
|
string val = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-23 08:56:05 +02:00
|
|
|
message Json {
|
|
|
|
bytes json = 1;
|
2020-05-23 04:58:13 +02:00
|
|
|
}
|
|
|
|
|
2020-05-23 07:09:16 +02:00
|
|
|
message Bool {
|
|
|
|
bool val = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-23 08:56:05 +02:00
|
|
|
// IDs used in RPC calls
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
2020-05-23 08:19:48 +02:00
|
|
|
message NoteTypeID {
|
|
|
|
int64 ntid = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteID {
|
|
|
|
int64 nid = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message CardID {
|
|
|
|
int64 cid = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-23 08:56:05 +02:00
|
|
|
message DeckID {
|
|
|
|
int64 did = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message DeckConfigID {
|
|
|
|
int64 dcid = 1;
|
|
|
|
}
|
2020-05-23 08:19:48 +02:00
|
|
|
|
2020-05-22 13:25:25 +02:00
|
|
|
// New style RPC definitions
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
2020-05-22 12:02:10 +02:00
|
|
|
service BackendService {
|
2020-05-29 11:59:50 +02:00
|
|
|
rpc LatestProgress (Empty) returns (Progress);
|
|
|
|
rpc SetWantsAbort (Empty) returns (Empty);
|
|
|
|
|
2020-05-23 07:09:16 +02:00
|
|
|
// card rendering
|
|
|
|
|
|
|
|
rpc ExtractAVTags (ExtractAVTagsIn) returns (ExtractAVTagsOut);
|
|
|
|
rpc ExtractLatex (ExtractLatexIn) returns (ExtractLatexOut);
|
|
|
|
rpc GetEmptyCards (Empty) returns (EmptyCardsReport);
|
2020-05-22 12:02:10 +02:00
|
|
|
rpc RenderExistingCard (RenderExistingCardIn) returns (RenderCardOut);
|
|
|
|
rpc RenderUncommittedCard (RenderUncommittedCardIn) returns (RenderCardOut);
|
2020-05-23 07:09:16 +02:00
|
|
|
rpc StripAVTags (String) returns (String);
|
|
|
|
|
|
|
|
// searching
|
|
|
|
|
2020-05-22 13:25:25 +02:00
|
|
|
rpc SearchCards (SearchCardsIn) returns (SearchCardsOut);
|
|
|
|
rpc SearchNotes (SearchNotesIn) returns (SearchNotesOut);
|
2020-05-23 13:34:19 +02:00
|
|
|
rpc FindAndReplace (FindAndReplaceIn) returns (UInt32);
|
2020-05-23 07:09:16 +02:00
|
|
|
|
|
|
|
// scheduling
|
|
|
|
|
2020-05-22 13:25:25 +02:00
|
|
|
rpc LocalMinutesWest (Int64) returns (Int32);
|
2020-05-23 13:34:19 +02:00
|
|
|
rpc SetLocalMinutesWest (Int32) returns (Empty);
|
2020-05-23 07:09:16 +02:00
|
|
|
rpc SchedTimingToday (Empty) returns (SchedTimingTodayOut);
|
2020-05-23 13:34:19 +02:00
|
|
|
rpc StudiedToday (StudiedTodayIn) returns (String);
|
|
|
|
rpc CongratsLearnMessage (CongratsLearnMessageIn) returns (String);
|
2020-06-05 11:49:53 +02:00
|
|
|
rpc UpdateStats (UpdateStatsIn) returns (Empty);
|
|
|
|
rpc ExtendLimits (ExtendLimitsIn) returns (Empty);
|
|
|
|
rpc CountsForDeckToday (DeckID) returns (CountsForDeckTodayOut);
|
2020-05-23 07:09:16 +02:00
|
|
|
|
2020-06-15 06:14:18 +02:00
|
|
|
// stats
|
|
|
|
|
|
|
|
rpc CardStats (CardID) returns (String);
|
|
|
|
|
2020-05-23 07:09:16 +02:00
|
|
|
// media
|
|
|
|
|
|
|
|
rpc CheckMedia (Empty) returns (CheckMediaOut);
|
2020-05-23 04:58:13 +02:00
|
|
|
rpc TrashMediaFiles (TrashMediaFilesIn) returns (Empty);
|
2020-05-23 13:34:19 +02:00
|
|
|
rpc AddMediaFile (AddMediaFileIn) returns (String);
|
|
|
|
rpc EmptyTrash (Empty) returns (Empty);
|
|
|
|
rpc RestoreTrash (Empty) returns (Empty);
|
2020-05-23 07:09:16 +02:00
|
|
|
|
|
|
|
// decks
|
|
|
|
|
2020-05-23 08:56:05 +02:00
|
|
|
rpc AddOrUpdateDeckLegacy (AddOrUpdateDeckLegacyIn) returns (DeckID);
|
2020-05-23 07:09:16 +02:00
|
|
|
rpc DeckTree (DeckTreeIn) returns (DeckTreeNode);
|
2020-05-23 08:56:05 +02:00
|
|
|
rpc DeckTreeLegacy (Empty) returns (Json);
|
|
|
|
rpc GetAllDecksLegacy (Empty) returns (Json);
|
|
|
|
rpc GetDeckIDByName (String) returns (DeckID);
|
|
|
|
rpc GetDeckLegacy (DeckID) returns (Json);
|
2020-05-23 07:09:16 +02:00
|
|
|
rpc GetDeckNames (GetDeckNamesIn) returns (DeckNames);
|
2020-05-23 08:56:05 +02:00
|
|
|
rpc NewDeckLegacy (Bool) returns (Json);
|
|
|
|
rpc RemoveDeck (DeckID) returns (Empty);
|
2020-05-23 07:09:16 +02:00
|
|
|
|
|
|
|
// deck config
|
|
|
|
|
2020-05-23 08:56:05 +02:00
|
|
|
rpc AddOrUpdateDeckConfigLegacy (AddOrUpdateDeckConfigLegacyIn) returns (DeckConfigID);
|
|
|
|
rpc AllDeckConfigLegacy (Empty) returns (Json);
|
|
|
|
rpc GetDeckConfigLegacy (DeckConfigID) returns (Json);
|
|
|
|
rpc NewDeckConfigLegacy (Empty) returns (Json);
|
|
|
|
rpc RemoveDeckConfig (DeckConfigID) returns (Empty);
|
2020-05-23 07:09:16 +02:00
|
|
|
|
2020-05-23 08:19:48 +02:00
|
|
|
// cards
|
|
|
|
|
|
|
|
rpc GetCard (CardID) returns (Card);
|
|
|
|
rpc UpdateCard (Card) returns (Empty);
|
|
|
|
rpc AddCard (Card) returns (CardID);
|
2020-06-04 10:21:04 +02:00
|
|
|
rpc RemoveCards (RemoveCardsIn) returns (Empty);
|
2020-05-23 08:19:48 +02:00
|
|
|
|
|
|
|
// notes
|
|
|
|
|
|
|
|
rpc NewNote (NoteTypeID) returns (Note);
|
|
|
|
rpc AddNote (AddNoteIn) returns (NoteID);
|
|
|
|
rpc UpdateNote (Note) returns (Empty);
|
|
|
|
rpc GetNote (NoteID) returns (Note);
|
2020-06-04 10:21:04 +02:00
|
|
|
rpc RemoveNotes (RemoveNotesIn) returns (Empty);
|
2020-05-23 08:19:48 +02:00
|
|
|
rpc AddNoteTags (AddNoteTagsIn) returns (UInt32);
|
|
|
|
rpc UpdateNoteTags (UpdateNoteTagsIn) returns (UInt32);
|
|
|
|
rpc ClozeNumbersInNote (Note) returns (ClozeNumbersInNoteOut);
|
2020-05-23 12:43:55 +02:00
|
|
|
rpc AfterNoteUpdates (AfterNoteUpdatesIn) returns (Empty);
|
|
|
|
rpc FieldNamesForNotes (FieldNamesForNotesIn) returns (FieldNamesForNotesOut);
|
2020-05-24 11:48:56 +02:00
|
|
|
rpc NoteIsDuplicateOrEmpty (Note) returns (NoteIsDuplicateOrEmptyOut);
|
2020-05-23 12:43:55 +02:00
|
|
|
|
|
|
|
// note types
|
|
|
|
|
|
|
|
rpc AddOrUpdateNotetype (AddOrUpdateNotetypeIn) returns (NoteTypeID);
|
|
|
|
rpc GetStockNotetypeLegacy (GetStockNotetypeIn) returns (Json);
|
|
|
|
rpc GetNotetypeLegacy (NoteTypeID) returns (Json);
|
|
|
|
rpc GetNotetypeNames (Empty) returns (NoteTypeNames);
|
|
|
|
rpc GetNotetypeNamesAndCounts (Empty) returns (NoteTypeUseCounts);
|
|
|
|
rpc GetNotetypeIDByName (String) returns (NoteTypeID);
|
|
|
|
rpc RemoveNotetype (NoteTypeID) returns (Empty);
|
2020-05-23 08:19:48 +02:00
|
|
|
|
2020-05-23 13:34:19 +02:00
|
|
|
// collection
|
2020-05-23 07:09:16 +02:00
|
|
|
|
2020-05-23 13:34:19 +02:00
|
|
|
rpc OpenCollection (OpenCollectionIn) returns (Empty);
|
|
|
|
rpc CloseCollection (CloseCollectionIn) returns (Empty);
|
2020-05-23 07:09:16 +02:00
|
|
|
rpc CheckDatabase (Empty) returns (CheckDatabaseOut);
|
|
|
|
|
2020-05-23 13:34:19 +02:00
|
|
|
// sync
|
|
|
|
|
2020-05-30 04:28:22 +02:00
|
|
|
rpc SyncMedia (SyncAuth) returns (Empty);
|
2020-05-29 08:45:27 +02:00
|
|
|
rpc AbortSync (Empty) returns (Empty);
|
2020-05-31 08:53:07 +02:00
|
|
|
rpc AbortMediaSync (Empty) returns (Empty);
|
2020-05-23 13:34:19 +02:00
|
|
|
rpc BeforeUpload (Empty) returns (Empty);
|
2020-05-29 08:45:27 +02:00
|
|
|
rpc SyncLogin (SyncLoginIn) returns (SyncAuth);
|
2020-06-02 05:23:01 +02:00
|
|
|
rpc SyncStatus (SyncAuth) returns (SyncStatusOut);
|
2020-05-29 08:45:27 +02:00
|
|
|
rpc SyncCollection (SyncAuth) returns (SyncCollectionOut);
|
|
|
|
rpc FullUpload (SyncAuth) returns (Empty);
|
|
|
|
rpc FullDownload (SyncAuth) returns (Empty);
|
2020-05-24 00:36:50 +02:00
|
|
|
|
|
|
|
// translation/messages
|
|
|
|
|
|
|
|
rpc TranslateString (TranslateStringIn) returns (String);
|
|
|
|
rpc FormatTimespan (FormatTimespanIn) returns (String);
|
|
|
|
|
|
|
|
// tags
|
|
|
|
|
|
|
|
rpc RegisterTags (RegisterTagsIn) returns (Bool);
|
|
|
|
rpc AllTags (Empty) returns (AllTagsOut);
|
|
|
|
|
|
|
|
// config/preferences
|
|
|
|
|
|
|
|
rpc GetConfigJson (String) returns (Json);
|
|
|
|
rpc SetConfigJson (SetConfigJsonIn) returns (Empty);
|
|
|
|
rpc RemoveConfig (String) returns (Empty);
|
|
|
|
rpc SetAllConfig (Json) returns (Empty);
|
|
|
|
rpc GetAllConfig (Empty) returns (Json);
|
|
|
|
rpc GetPreferences (Empty) returns (Preferences);
|
|
|
|
rpc SetPreferences (Preferences) returns (Empty);
|
2020-05-22 12:02:10 +02:00
|
|
|
}
|
|
|
|
|
2020-05-18 00:57:30 +02:00
|
|
|
// Protobuf stored in .anki2 files
|
|
|
|
// These should be moved to a separate file in the future
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
message DeckConfigInner {
|
|
|
|
enum NewCardOrder {
|
|
|
|
NEW_CARD_ORDER_DUE = 0;
|
|
|
|
NEW_CARD_ORDER_RANDOM = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum LeechAction {
|
|
|
|
LEECH_ACTION_SUSPEND = 0;
|
|
|
|
LEECH_ACTION_TAG_ONLY = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
repeated float learn_steps = 1;
|
|
|
|
repeated float relearn_steps = 2;
|
|
|
|
|
|
|
|
reserved 3 to 8;
|
|
|
|
|
|
|
|
uint32 new_per_day = 9;
|
|
|
|
uint32 reviews_per_day = 10;
|
|
|
|
|
|
|
|
float initial_ease = 11;
|
|
|
|
float easy_multiplier = 12;
|
|
|
|
float hard_multiplier = 13;
|
|
|
|
float lapse_multiplier = 14;
|
|
|
|
float interval_multiplier = 15;
|
|
|
|
|
|
|
|
uint32 maximum_review_interval = 16;
|
|
|
|
uint32 minimum_review_interval = 17;
|
|
|
|
|
|
|
|
uint32 graduating_interval_good = 18;
|
|
|
|
uint32 graduating_interval_easy = 19;
|
|
|
|
|
|
|
|
NewCardOrder new_card_order = 20;
|
|
|
|
|
|
|
|
LeechAction leech_action = 21;
|
|
|
|
uint32 leech_threshold = 22;
|
|
|
|
|
|
|
|
bool disable_autoplay = 23;
|
|
|
|
uint32 cap_answer_time_to_secs = 24;
|
|
|
|
uint32 visible_timer_secs = 25;
|
|
|
|
bool skip_question_when_replaying_answer = 26;
|
|
|
|
|
|
|
|
bool bury_new = 27;
|
|
|
|
bool bury_reviews = 28;
|
|
|
|
|
|
|
|
bytes other = 255;
|
|
|
|
}
|
|
|
|
|
|
|
|
message DeckCommon {
|
|
|
|
bool study_collapsed = 1;
|
|
|
|
bool browser_collapsed = 2;
|
|
|
|
|
|
|
|
uint32 last_day_studied = 3;
|
|
|
|
int32 new_studied = 4;
|
|
|
|
int32 review_studied = 5;
|
2020-06-05 11:49:53 +02:00
|
|
|
int32 milliseconds_studied = 7;
|
|
|
|
|
|
|
|
// previously set in the v1 scheduler,
|
|
|
|
// but not currently used for anything
|
2020-05-18 00:57:30 +02:00
|
|
|
int32 learning_studied = 6;
|
|
|
|
|
|
|
|
bytes other = 255;
|
|
|
|
}
|
|
|
|
|
|
|
|
message DeckKind {
|
|
|
|
oneof kind {
|
|
|
|
NormalDeck normal = 1;
|
|
|
|
FilteredDeck filtered = 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
message NormalDeck {
|
|
|
|
int64 config_id = 1;
|
|
|
|
uint32 extend_new = 2;
|
|
|
|
uint32 extend_review = 3;
|
|
|
|
string description = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
message FilteredDeck {
|
|
|
|
bool reschedule = 1;
|
|
|
|
repeated FilteredSearchTerm search_terms = 2;
|
|
|
|
// v1 scheduler only
|
|
|
|
repeated float delays = 3;
|
|
|
|
// v2 scheduler only
|
|
|
|
uint32 preview_delay = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
message FilteredSearchTerm {
|
|
|
|
enum FilteredSearchOrder {
|
|
|
|
FILTERED_SEARCH_ORDER_OLDEST_FIRST = 0;
|
|
|
|
FILTERED_SEARCH_ORDER_RANDOM = 1;
|
|
|
|
FILTERED_SEARCH_ORDER_INTERVALS_ASCENDING = 2;
|
|
|
|
FILTERED_SEARCH_ORDER_INTERVALS_DESCENDING = 3;
|
|
|
|
FILTERED_SEARCH_ORDER_LAPSES = 4;
|
|
|
|
FILTERED_SEARCH_ORDER_ADDED = 5;
|
|
|
|
FILTERED_SEARCH_ORDER_DUE = 6;
|
|
|
|
FILTERED_SEARCH_ORDER_REVERSE_ADDED = 7;
|
|
|
|
FILTERED_SEARCH_ORDER_DUE_PRIORITY = 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
string search = 1;
|
|
|
|
uint32 limit = 2;
|
|
|
|
FilteredSearchOrder order = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteFieldConfig {
|
|
|
|
bool sticky = 1;
|
|
|
|
bool rtl = 2;
|
|
|
|
string font_name = 3;
|
|
|
|
uint32 font_size = 4;
|
|
|
|
|
|
|
|
bytes other = 255;
|
|
|
|
}
|
|
|
|
|
|
|
|
message CardTemplateConfig {
|
|
|
|
string q_format = 1;
|
|
|
|
string a_format = 2;
|
|
|
|
string q_format_browser = 3;
|
|
|
|
string a_format_browser= 4;
|
|
|
|
int64 target_deck_id = 5;
|
|
|
|
string browser_font_name = 6;
|
|
|
|
uint32 browser_font_size = 7;
|
|
|
|
|
|
|
|
bytes other = 255;
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteTypeConfig {
|
|
|
|
enum Kind {
|
|
|
|
KIND_NORMAL = 0;
|
|
|
|
KIND_CLOZE = 1;
|
|
|
|
}
|
|
|
|
Kind kind = 1;
|
|
|
|
uint32 sort_field_idx = 2;
|
|
|
|
string css = 3;
|
|
|
|
int64 target_deck_id = 4;
|
|
|
|
string latex_pre = 5;
|
|
|
|
string latex_post = 6;
|
|
|
|
bool latex_svg = 7;
|
|
|
|
repeated CardRequirement reqs = 8;
|
|
|
|
|
|
|
|
bytes other = 255;
|
|
|
|
}
|
|
|
|
|
|
|
|
message CardRequirement {
|
|
|
|
enum Kind {
|
|
|
|
KIND_NONE = 0;
|
|
|
|
KIND_ANY = 1;
|
|
|
|
KIND_ALL = 2;
|
|
|
|
}
|
|
|
|
uint32 card_ord = 1;
|
|
|
|
Kind kind = 2;
|
|
|
|
repeated uint32 field_ords = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Containers for passing around database objects
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
message Deck {
|
|
|
|
int64 id = 1;
|
|
|
|
string name = 2;
|
|
|
|
uint32 mtime_secs = 3;
|
|
|
|
int32 usn = 4;
|
|
|
|
DeckCommon common = 5;
|
|
|
|
oneof kind {
|
|
|
|
NormalDeck normal = 6;
|
|
|
|
FilteredDeck filtered = 7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteType {
|
|
|
|
int64 id = 1;
|
|
|
|
string name = 2;
|
|
|
|
uint32 mtime_secs = 3;
|
|
|
|
sint32 usn = 4;
|
|
|
|
NoteTypeConfig config = 7;
|
|
|
|
repeated NoteField fields = 8;
|
|
|
|
repeated CardTemplate templates = 9;
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteField {
|
|
|
|
OptionalUInt32 ord = 1;
|
|
|
|
string name = 2;
|
|
|
|
NoteFieldConfig config = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
message CardTemplate {
|
|
|
|
OptionalUInt32 ord = 1;
|
|
|
|
string name = 2;
|
|
|
|
uint32 mtime_secs = 3;
|
|
|
|
sint32 usn = 4;
|
|
|
|
CardTemplateConfig config = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
message Note {
|
|
|
|
int64 id = 1;
|
|
|
|
string guid = 2;
|
|
|
|
int64 ntid = 3;
|
|
|
|
uint32 mtime_secs = 4;
|
|
|
|
int32 usn = 5;
|
|
|
|
repeated string tags = 6;
|
|
|
|
repeated string fields = 7;
|
|
|
|
}
|
|
|
|
|
|
|
|
message Card {
|
|
|
|
int64 id = 1;
|
|
|
|
int64 nid = 2;
|
|
|
|
int64 did = 3;
|
|
|
|
uint32 ord = 4;
|
|
|
|
int64 mtime = 5;
|
|
|
|
sint32 usn = 6;
|
|
|
|
uint32 ctype = 7;
|
|
|
|
sint32 queue = 8;
|
|
|
|
sint32 due = 9;
|
|
|
|
uint32 ivl = 10;
|
|
|
|
uint32 factor = 11;
|
|
|
|
uint32 reps = 12;
|
|
|
|
uint32 lapses = 13;
|
|
|
|
uint32 left = 14;
|
|
|
|
sint32 odue = 15;
|
|
|
|
int64 odid = 16;
|
|
|
|
uint32 flags = 17;
|
|
|
|
string data = 18;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Backend
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
2020-01-30 02:22:34 +01:00
|
|
|
message BackendInit {
|
2020-03-14 00:08:02 +01:00
|
|
|
repeated string preferred_langs = 1;
|
|
|
|
string locale_folder_path = 2;
|
|
|
|
bool server = 3;
|
2020-01-30 02:22:34 +01:00
|
|
|
}
|
|
|
|
|
2020-02-23 05:57:02 +01:00
|
|
|
message I18nBackendInit {
|
|
|
|
repeated string preferred_langs = 4;
|
|
|
|
string locale_folder_path = 5;
|
|
|
|
}
|
|
|
|
|
2020-05-24 00:36:50 +02:00
|
|
|
// Errors
|
2020-05-22 13:25:25 +02:00
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
2019-12-24 23:59:33 +01:00
|
|
|
message BackendError {
|
2020-02-27 01:46:24 +01:00
|
|
|
// localized error description suitable for displaying to the user
|
|
|
|
string localized = 1;
|
|
|
|
// error specifics
|
2019-12-24 04:33:44 +01:00
|
|
|
oneof value {
|
2020-02-27 01:53:49 +01:00
|
|
|
Empty invalid_input = 2;
|
|
|
|
Empty template_parse = 3;
|
|
|
|
Empty io_error = 4;
|
|
|
|
Empty db_error = 5;
|
2020-02-27 01:46:24 +01:00
|
|
|
NetworkError network_error = 6;
|
|
|
|
SyncError sync_error = 7;
|
2020-02-02 12:02:20 +01:00
|
|
|
// user interrupted operation
|
|
|
|
Empty interrupted = 8;
|
2020-04-06 08:29:31 +02:00
|
|
|
string json_error = 9;
|
2020-04-12 09:45:21 +02:00
|
|
|
string proto_error = 10;
|
2020-04-23 02:10:28 +02:00
|
|
|
Empty not_found_error = 11;
|
2020-05-02 04:41:53 +02:00
|
|
|
Empty exists = 12;
|
|
|
|
Empty deck_is_filtered = 13;
|
2019-12-24 04:33:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-04 10:39:31 +01:00
|
|
|
message NetworkError {
|
|
|
|
enum NetworkErrorKind {
|
|
|
|
OTHER = 0;
|
|
|
|
OFFLINE = 1;
|
|
|
|
TIMEOUT = 2;
|
|
|
|
PROXY_AUTH = 3;
|
|
|
|
}
|
2020-02-27 01:53:49 +01:00
|
|
|
NetworkErrorKind kind = 1;
|
2020-02-04 10:39:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
message SyncError {
|
|
|
|
enum SyncErrorKind {
|
|
|
|
OTHER = 0;
|
|
|
|
CONFLICT = 1;
|
|
|
|
SERVER_ERROR = 2;
|
|
|
|
CLIENT_TOO_OLD = 3;
|
|
|
|
AUTH_FAILED = 4;
|
|
|
|
SERVER_MESSAGE = 5;
|
2020-02-05 04:35:40 +01:00
|
|
|
MEDIA_CHECK_REQUIRED = 6;
|
|
|
|
RESYNC_REQUIRED = 7;
|
2020-05-28 11:49:44 +02:00
|
|
|
CLOCK_INCORRECT = 8;
|
|
|
|
DATABASE_CHECK_REQUIRED = 9;
|
2020-02-04 10:39:31 +01:00
|
|
|
}
|
2020-02-27 01:53:49 +01:00
|
|
|
SyncErrorKind kind = 1;
|
2020-02-04 10:39:31 +01:00
|
|
|
}
|
|
|
|
|
2020-05-29 11:59:50 +02:00
|
|
|
// Progress
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
message Progress {
|
|
|
|
oneof value {
|
|
|
|
Empty none = 1;
|
|
|
|
MediaSyncProgress media_sync = 2;
|
|
|
|
string media_check = 3;
|
|
|
|
FullSyncProgress full_sync = 4;
|
2020-05-31 06:43:27 +02:00
|
|
|
NormalSyncProgress normal_sync = 5;
|
2020-06-08 12:28:11 +02:00
|
|
|
DatabaseCheckProgress database_check = 6;
|
2020-05-29 11:59:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-04 00:07:15 +01:00
|
|
|
message MediaSyncProgress {
|
2020-02-16 09:46:51 +01:00
|
|
|
string checked = 1;
|
|
|
|
string added = 2;
|
|
|
|
string removed = 3;
|
2020-02-04 00:07:15 +01:00
|
|
|
}
|
|
|
|
|
2020-05-29 08:45:27 +02:00
|
|
|
message FullSyncProgress {
|
|
|
|
uint32 transferred = 1;
|
|
|
|
uint32 total = 2;
|
|
|
|
}
|
|
|
|
|
2020-02-04 00:07:15 +01:00
|
|
|
message MediaSyncUploadProgress {
|
|
|
|
uint32 files = 1;
|
|
|
|
uint32 deletions = 2;
|
|
|
|
}
|
|
|
|
|
2020-05-31 06:43:27 +02:00
|
|
|
message NormalSyncProgress {
|
|
|
|
string stage = 1;
|
|
|
|
string added = 2;
|
|
|
|
string removed = 3;
|
|
|
|
}
|
|
|
|
|
2020-06-08 12:28:11 +02:00
|
|
|
message DatabaseCheckProgress {
|
|
|
|
string stage = 1;
|
|
|
|
uint32 stage_total = 2;
|
|
|
|
uint32 stage_current = 3;
|
|
|
|
}
|
|
|
|
|
2020-05-29 11:59:50 +02:00
|
|
|
|
2020-05-24 00:36:50 +02:00
|
|
|
// Messages
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
2019-12-27 09:14:19 +01:00
|
|
|
message SchedTimingTodayOut {
|
|
|
|
uint32 days_elapsed = 1;
|
|
|
|
int64 next_day_at = 2;
|
|
|
|
}
|
2020-01-06 03:18:20 +01:00
|
|
|
|
2020-05-03 00:43:22 +02:00
|
|
|
message DeckTreeIn {
|
|
|
|
bool include_counts = 1;
|
2020-05-17 00:35:19 +02:00
|
|
|
int64 top_deck_id = 2;
|
2020-06-05 01:38:31 +02:00
|
|
|
int32 today_delta = 3;
|
2020-01-06 03:18:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
message DeckTreeNode {
|
2020-05-03 00:43:22 +02:00
|
|
|
int64 deck_id = 1;
|
|
|
|
string name = 2;
|
|
|
|
repeated DeckTreeNode children = 3;
|
|
|
|
uint32 level = 4;
|
|
|
|
bool collapsed = 5;
|
|
|
|
|
|
|
|
uint32 review_count = 6;
|
|
|
|
uint32 learn_count = 7;
|
|
|
|
uint32 new_count = 8;
|
2020-05-16 02:52:14 +02:00
|
|
|
|
|
|
|
bool filtered = 16;
|
2020-01-06 03:18:20 +01:00
|
|
|
}
|
|
|
|
|
2020-05-13 02:35:01 +02:00
|
|
|
message RenderExistingCardIn {
|
|
|
|
int64 card_id = 1;
|
|
|
|
bool browser = 2;
|
2020-01-08 11:28:04 +01:00
|
|
|
}
|
|
|
|
|
2020-05-13 09:24:49 +02:00
|
|
|
message RenderUncommittedCardIn {
|
|
|
|
Note note = 1;
|
|
|
|
uint32 card_ord = 2;
|
|
|
|
bytes template = 3;
|
2020-05-14 12:58:45 +02:00
|
|
|
bool fill_empty = 4;
|
2020-05-13 09:24:49 +02:00
|
|
|
}
|
|
|
|
|
2020-01-12 06:15:46 +01:00
|
|
|
message RenderCardOut {
|
|
|
|
repeated RenderedTemplateNode question_nodes = 1;
|
|
|
|
repeated RenderedTemplateNode answer_nodes = 2;
|
2020-01-08 11:28:04 +01:00
|
|
|
}
|
|
|
|
|
2020-01-10 05:59:29 +01:00
|
|
|
message RenderedTemplateNode {
|
2020-01-08 11:28:04 +01:00
|
|
|
oneof value {
|
|
|
|
string text = 1;
|
2020-01-10 05:59:29 +01:00
|
|
|
RenderedTemplateReplacement replacement = 2;
|
2020-01-08 11:28:04 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-10 05:59:29 +01:00
|
|
|
message RenderedTemplateReplacement {
|
2020-01-08 11:28:04 +01:00
|
|
|
string field_name = 1;
|
2020-01-10 09:02:26 +01:00
|
|
|
string current_text = 2;
|
|
|
|
repeated string filters = 3;
|
2020-01-08 11:28:04 +01:00
|
|
|
}
|
2020-01-20 10:12:34 +01:00
|
|
|
|
2020-01-24 02:06:11 +01:00
|
|
|
message ExtractAVTagsIn {
|
|
|
|
string text = 1;
|
|
|
|
bool question_side = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message ExtractAVTagsOut {
|
|
|
|
string text = 1;
|
|
|
|
repeated AVTag av_tags = 2;
|
2020-01-20 10:12:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
message AVTag {
|
|
|
|
oneof value {
|
|
|
|
string sound_or_video = 1;
|
|
|
|
TTSTag tts = 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
message TTSTag {
|
2020-01-21 03:41:37 +01:00
|
|
|
string field_text = 1;
|
|
|
|
string lang = 2;
|
|
|
|
repeated string voices = 3;
|
2020-01-26 05:28:17 +01:00
|
|
|
float speed = 4;
|
|
|
|
repeated string other_args = 5;
|
2020-01-20 10:12:34 +01:00
|
|
|
}
|
2020-01-28 12:45:26 +01:00
|
|
|
|
2020-02-11 05:20:07 +01:00
|
|
|
message ExtractLatexIn {
|
|
|
|
string text = 1;
|
|
|
|
bool svg = 2;
|
2020-02-24 09:34:08 +01:00
|
|
|
bool expand_clozes = 3;
|
2020-02-11 05:20:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
message ExtractLatexOut {
|
|
|
|
string text = 1;
|
|
|
|
repeated ExtractedLatex latex = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message ExtractedLatex {
|
|
|
|
string filename = 1;
|
|
|
|
string latex_body = 2;
|
|
|
|
}
|
|
|
|
|
2020-02-11 09:08:34 +01:00
|
|
|
message AddMediaFileIn {
|
2020-01-28 12:45:26 +01:00
|
|
|
string desired_name = 1;
|
|
|
|
bytes data = 2;
|
2020-02-04 00:07:15 +01:00
|
|
|
}
|
|
|
|
|
2020-05-22 13:25:25 +02:00
|
|
|
message CheckMediaOut {
|
2020-02-10 08:58:54 +01:00
|
|
|
repeated string unused = 1;
|
|
|
|
repeated string missing = 2;
|
2020-02-14 07:15:18 +01:00
|
|
|
string report = 3;
|
2020-03-10 03:49:40 +01:00
|
|
|
bool have_trash = 4;
|
2020-02-11 08:30:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
message TrashMediaFilesIn {
|
|
|
|
repeated string fnames = 1;
|
2020-02-16 12:07:40 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
message TranslateStringIn {
|
2020-02-23 03:21:12 +01:00
|
|
|
FluentString key = 2;
|
2020-02-16 12:07:40 +01:00
|
|
|
map<string,TranslateArgValue> args = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
message TranslateArgValue {
|
|
|
|
oneof value {
|
|
|
|
string str = 1;
|
2020-02-20 01:42:16 +01:00
|
|
|
double number = 2;
|
2020-02-16 12:07:40 +01:00
|
|
|
}
|
|
|
|
}
|
2020-02-20 05:16:33 +01:00
|
|
|
|
2020-05-24 00:36:50 +02:00
|
|
|
message FormatTimespanIn {
|
2020-02-20 05:16:33 +01:00
|
|
|
enum Context {
|
2020-02-25 08:29:06 +01:00
|
|
|
PRECISE = 0;
|
2020-02-20 07:07:28 +01:00
|
|
|
ANSWER_BUTTONS = 1;
|
2020-02-25 08:29:06 +01:00
|
|
|
INTERVALS = 2;
|
2020-02-20 05:16:33 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
float seconds = 1;
|
|
|
|
Context context = 2;
|
|
|
|
}
|
2020-02-21 09:01:15 +01:00
|
|
|
|
|
|
|
message StudiedTodayIn {
|
|
|
|
uint32 cards = 1;
|
|
|
|
double seconds = 2;
|
|
|
|
}
|
2020-02-21 10:26:45 +01:00
|
|
|
|
2020-05-23 13:34:19 +02:00
|
|
|
message CongratsLearnMessageIn {
|
2020-02-21 10:26:45 +01:00
|
|
|
float next_due = 1;
|
|
|
|
uint32 remaining = 2;
|
2020-03-09 09:58:49 +01:00
|
|
|
}
|
2020-03-14 00:08:02 +01:00
|
|
|
|
|
|
|
message OpenCollectionIn {
|
|
|
|
string collection_path = 1;
|
|
|
|
string media_folder_path = 2;
|
|
|
|
string media_db_path = 3;
|
|
|
|
string log_path = 4;
|
|
|
|
}
|
2020-03-19 23:20:47 +01:00
|
|
|
|
|
|
|
message SearchCardsIn {
|
|
|
|
string search = 1;
|
2020-03-20 22:54:43 +01:00
|
|
|
SortOrder order = 2;
|
2020-03-19 23:20:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
message SearchCardsOut {
|
|
|
|
repeated int64 card_ids = 1;
|
|
|
|
|
|
|
|
}
|
2020-03-20 22:54:43 +01:00
|
|
|
|
|
|
|
message SortOrder {
|
|
|
|
oneof value {
|
|
|
|
Empty from_config = 1;
|
|
|
|
Empty none = 2;
|
|
|
|
string custom = 3;
|
2020-03-22 03:59:24 +01:00
|
|
|
BuiltinSearchOrder builtin = 4;
|
2020-03-20 22:54:43 +01:00
|
|
|
}
|
|
|
|
}
|
2020-03-21 00:00:05 +01:00
|
|
|
|
|
|
|
message SearchNotesIn {
|
|
|
|
string search = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message SearchNotesOut {
|
|
|
|
repeated int64 note_ids = 2;
|
|
|
|
}
|
2020-03-22 03:59:24 +01:00
|
|
|
|
|
|
|
message BuiltinSearchOrder {
|
2020-04-14 12:27:33 +02:00
|
|
|
enum BuiltinSortKind {
|
|
|
|
NOTE_CREATION = 0;
|
|
|
|
NOTE_MOD = 1;
|
|
|
|
NOTE_FIELD = 2;
|
|
|
|
NOTE_TAGS = 3;
|
|
|
|
NOTE_TYPE = 4;
|
|
|
|
CARD_MOD = 5;
|
|
|
|
CARD_REPS = 6;
|
|
|
|
CARD_DUE = 7;
|
|
|
|
CARD_EASE = 8;
|
|
|
|
CARD_LAPSES = 9;
|
|
|
|
CARD_INTERVAL = 10;
|
|
|
|
CARD_DECK = 11;
|
|
|
|
CARD_TEMPLATE = 12;
|
|
|
|
}
|
2020-03-22 03:59:24 +01:00
|
|
|
BuiltinSortKind kind = 1;
|
|
|
|
bool reverse = 2;
|
|
|
|
}
|
|
|
|
|
2020-03-30 12:01:16 +02:00
|
|
|
message CloseCollectionIn {
|
|
|
|
bool downgrade_to_schema11 = 1;
|
|
|
|
}
|
2020-04-03 05:54:52 +02:00
|
|
|
|
2020-05-23 07:09:16 +02:00
|
|
|
message AddOrUpdateDeckConfigLegacyIn {
|
2020-04-06 01:59:32 +02:00
|
|
|
bytes config = 1;
|
2020-04-03 05:54:52 +02:00
|
|
|
bool preserve_usn_and_mtime = 2;
|
|
|
|
}
|
2020-04-03 11:30:42 +02:00
|
|
|
|
|
|
|
message RegisterTagsIn {
|
|
|
|
string tags = 1;
|
|
|
|
bool preserve_usn = 2;
|
|
|
|
int32 usn = 3;
|
|
|
|
bool clear_first = 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
message AllTagsOut {
|
|
|
|
repeated TagUsnTuple tags = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message TagUsnTuple {
|
|
|
|
string tag = 1;
|
|
|
|
sint32 usn = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message GetChangedTagsOut {
|
|
|
|
repeated string tags = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-24 00:36:50 +02:00
|
|
|
message SetConfigJsonIn {
|
2020-04-05 13:38:58 +02:00
|
|
|
string key = 1;
|
2020-05-24 01:05:48 +02:00
|
|
|
bytes value_json = 2;
|
2020-04-05 13:38:58 +02:00
|
|
|
}
|
2020-04-12 09:45:21 +02:00
|
|
|
|
2020-04-13 11:14:30 +02:00
|
|
|
enum StockNoteType {
|
2020-05-18 00:57:30 +02:00
|
|
|
STOCK_NOTE_TYPE_BASIC = 0;
|
|
|
|
STOCK_NOTE_TYPE_BASIC_AND_REVERSED = 1;
|
|
|
|
STOCK_NOTE_TYPE_BASIC_OPTIONAL_REVERSED = 2;
|
|
|
|
STOCK_NOTE_TYPE_BASIC_TYPING = 3;
|
|
|
|
STOCK_NOTE_TYPE_CLOZE = 4;
|
2020-04-13 11:14:30 +02:00
|
|
|
}
|
2020-04-13 23:30:33 +02:00
|
|
|
|
2020-05-23 12:43:55 +02:00
|
|
|
message GetStockNotetypeIn {
|
|
|
|
StockNoteType kind = 1;
|
|
|
|
}
|
|
|
|
|
2020-04-23 02:10:28 +02:00
|
|
|
message NoteTypeNames {
|
|
|
|
repeated NoteTypeNameID entries = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteTypeUseCounts {
|
|
|
|
repeated NoteTypeNameIDUseCount entries = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteTypeNameID {
|
|
|
|
int64 id = 1;
|
|
|
|
string name = 2;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteTypeNameIDUseCount {
|
|
|
|
int64 id = 1;
|
|
|
|
string name = 2;
|
|
|
|
uint32 use_count = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
message AddOrUpdateNotetypeIn {
|
|
|
|
bytes json = 1;
|
|
|
|
bool preserve_usn_and_mtime = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message AddNoteIn {
|
|
|
|
Note note = 1;
|
|
|
|
int64 deck_id = 2;
|
|
|
|
}
|
2020-04-25 10:25:56 +02:00
|
|
|
|
|
|
|
message EmptyCardsReport {
|
|
|
|
string report = 1;
|
|
|
|
repeated NoteWithEmptyCards notes = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message NoteWithEmptyCards {
|
|
|
|
int64 note_id = 1;
|
|
|
|
repeated int64 card_ids = 2;
|
|
|
|
bool will_delete_note = 3;
|
|
|
|
}
|
2020-05-02 04:41:53 +02:00
|
|
|
|
|
|
|
message DeckNames {
|
|
|
|
repeated DeckNameID entries = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message DeckNameID {
|
|
|
|
int64 id = 1;
|
|
|
|
string name = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message AddOrUpdateDeckLegacyIn {
|
|
|
|
bytes deck = 1;
|
|
|
|
bool preserve_usn_and_mtime = 2;
|
|
|
|
}
|
2020-05-03 00:43:22 +02:00
|
|
|
|
2020-05-05 12:50:17 +02:00
|
|
|
message FieldNamesForNotesIn {
|
|
|
|
repeated int64 nids = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message FieldNamesForNotesOut {
|
|
|
|
repeated string fields = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message FindAndReplaceIn {
|
|
|
|
repeated int64 nids = 1;
|
|
|
|
string search = 2;
|
|
|
|
string replacement = 3;
|
|
|
|
bool regex = 4;
|
|
|
|
bool match_case = 5;
|
|
|
|
string field_name = 6;
|
|
|
|
}
|
2020-05-06 05:14:57 +02:00
|
|
|
|
|
|
|
message AfterNoteUpdatesIn {
|
|
|
|
repeated int64 nids = 1;
|
|
|
|
bool mark_notes_modified = 2;
|
|
|
|
bool generate_cards = 3;
|
|
|
|
}
|
2020-05-07 09:54:23 +02:00
|
|
|
|
|
|
|
message AddNoteTagsIn {
|
|
|
|
repeated int64 nids = 1;
|
|
|
|
string tags = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message UpdateNoteTagsIn {
|
|
|
|
repeated int64 nids = 1;
|
|
|
|
string tags = 2;
|
|
|
|
string replacement = 3;
|
|
|
|
bool regex = 4;
|
|
|
|
}
|
2020-05-10 05:50:04 +02:00
|
|
|
|
|
|
|
message CheckDatabaseOut {
|
|
|
|
repeated string problems = 1;
|
|
|
|
}
|
2020-05-11 10:35:15 +02:00
|
|
|
|
|
|
|
message CollectionSchedulingSettings {
|
|
|
|
enum NewReviewMix {
|
|
|
|
DISTRIBUTE = 0;
|
|
|
|
REVIEWS_FIRST = 1;
|
|
|
|
NEW_FIRST = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32 scheduler_version = 1;
|
|
|
|
uint32 rollover = 2;
|
|
|
|
uint32 learn_ahead_secs = 3;
|
|
|
|
NewReviewMix new_review_mix = 4;
|
|
|
|
bool show_remaining_due_counts = 5;
|
|
|
|
bool show_intervals_on_buttons = 6;
|
|
|
|
uint32 time_limit_secs = 7;
|
|
|
|
|
|
|
|
// v2 only
|
|
|
|
bool new_timezone = 8;
|
|
|
|
bool day_learn_first = 9;
|
|
|
|
}
|
|
|
|
|
|
|
|
message Preferences {
|
|
|
|
CollectionSchedulingSettings sched = 1;
|
|
|
|
}
|
2020-05-14 04:14:00 +02:00
|
|
|
|
|
|
|
message ClozeNumbersInNoteOut {
|
|
|
|
repeated uint32 numbers = 1;
|
|
|
|
}
|
2020-05-15 13:21:10 +02:00
|
|
|
|
|
|
|
message GetDeckNamesIn {
|
|
|
|
bool skip_empty_default = 1;
|
|
|
|
// if unset, implies skip_empty_default
|
|
|
|
bool include_filtered = 2;
|
|
|
|
}
|
2020-05-24 11:48:56 +02:00
|
|
|
|
|
|
|
message NoteIsDuplicateOrEmptyOut {
|
|
|
|
enum State {
|
|
|
|
NORMAL = 0;
|
|
|
|
EMPTY = 1;
|
|
|
|
DUPLICATE = 2;
|
|
|
|
}
|
|
|
|
State state = 1;
|
|
|
|
}
|
2020-05-28 11:49:44 +02:00
|
|
|
|
|
|
|
message SyncLoginIn {
|
|
|
|
string username = 1;
|
|
|
|
string password = 2;
|
|
|
|
}
|
|
|
|
|
2020-06-02 05:23:01 +02:00
|
|
|
message SyncStatusOut {
|
|
|
|
enum Required {
|
|
|
|
NO_CHANGES = 0;
|
|
|
|
NORMAL_SYNC = 1;
|
|
|
|
FULL_SYNC = 2;
|
|
|
|
}
|
|
|
|
Required required = 1;
|
|
|
|
}
|
|
|
|
|
2020-05-28 11:49:44 +02:00
|
|
|
message SyncCollectionOut {
|
|
|
|
enum ChangesRequired {
|
|
|
|
NO_CHANGES = 0;
|
|
|
|
NORMAL_SYNC = 1;
|
|
|
|
FULL_SYNC = 2;
|
2020-05-29 08:45:27 +02:00
|
|
|
// local collection has no cards; upload not an option
|
|
|
|
FULL_DOWNLOAD = 3;
|
|
|
|
// remote collection has no cards; download not an option
|
|
|
|
FULL_UPLOAD = 4;
|
2020-05-28 11:49:44 +02:00
|
|
|
}
|
|
|
|
|
2020-05-29 08:45:27 +02:00
|
|
|
uint32 host_number = 1;
|
2020-05-28 11:49:44 +02:00
|
|
|
string server_message = 2;
|
|
|
|
ChangesRequired required = 3;
|
|
|
|
}
|
2020-05-29 08:45:27 +02:00
|
|
|
|
|
|
|
message SyncAuth {
|
|
|
|
string hkey = 1;
|
|
|
|
uint32 host_number = 2;
|
|
|
|
}
|
2020-06-04 10:21:04 +02:00
|
|
|
|
|
|
|
message RemoveNotesIn {
|
|
|
|
repeated int64 note_ids = 1;
|
|
|
|
repeated int64 card_ids = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message RemoveCardsIn {
|
|
|
|
repeated int64 card_ids = 1;
|
|
|
|
}
|
2020-06-05 11:49:53 +02:00
|
|
|
|
|
|
|
message UpdateStatsIn {
|
|
|
|
int64 deck_id = 1;
|
|
|
|
int32 new_delta = 2;
|
|
|
|
int32 review_delta = 4;
|
|
|
|
int32 millisecond_delta = 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
message ExtendLimitsIn {
|
|
|
|
int64 deck_id = 1;
|
|
|
|
int32 new_delta = 2;
|
|
|
|
int32 review_delta = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
message CountsForDeckTodayOut {
|
|
|
|
int32 new = 1;
|
|
|
|
int32 review = 2;
|
|
|
|
}
|