644670d0d6
some errors are not yet localized, but now the Python code doesn't need to think about which property to use
326 lines
6.8 KiB
Protocol Buffer
326 lines
6.8 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
import "fluent.proto";
|
|
|
|
package backend_proto;
|
|
|
|
message Empty {}
|
|
|
|
message BackendInit {
|
|
string collection_path = 1;
|
|
string media_folder_path = 2;
|
|
string media_db_path = 3;
|
|
repeated string preferred_langs = 4;
|
|
string locale_folder_path = 5;
|
|
}
|
|
|
|
message I18nBackendInit {
|
|
repeated string preferred_langs = 4;
|
|
string locale_folder_path = 5;
|
|
}
|
|
|
|
// 1-15 reserved for future use
|
|
|
|
message BackendInput {
|
|
oneof value {
|
|
TemplateRequirementsIn template_requirements = 16;
|
|
SchedTimingTodayIn sched_timing_today = 17;
|
|
Empty deck_tree = 18;
|
|
FindCardsIn find_cards = 19;
|
|
BrowserRowsIn browser_rows = 20;
|
|
RenderCardIn render_card = 21;
|
|
int64 local_minutes_west = 22;
|
|
string strip_av_tags = 23;
|
|
ExtractAVTagsIn extract_av_tags = 24;
|
|
ExtractLatexIn extract_latex = 25;
|
|
AddMediaFileIn add_media_file = 26;
|
|
SyncMediaIn sync_media = 27;
|
|
Empty check_media = 28;
|
|
TrashMediaFilesIn trash_media_files = 29;
|
|
TranslateStringIn translate_string = 30;
|
|
FormatTimeSpanIn format_time_span = 31;
|
|
StudiedTodayIn studied_today = 32;
|
|
CongratsLearnMsgIn congrats_learn_msg = 33;
|
|
}
|
|
}
|
|
|
|
message BackendOutput {
|
|
oneof value {
|
|
// infallible commands
|
|
SchedTimingTodayOut sched_timing_today = 17;
|
|
sint32 local_minutes_west = 22;
|
|
string strip_av_tags = 23;
|
|
ExtractAVTagsOut extract_av_tags = 24;
|
|
ExtractLatexOut extract_latex = 25;
|
|
string translate_string = 30;
|
|
string format_time_span = 31;
|
|
string studied_today = 32;
|
|
string congrats_learn_msg = 33;
|
|
|
|
// fallible commands
|
|
TemplateRequirementsOut template_requirements = 16;
|
|
DeckTreeOut deck_tree = 18;
|
|
FindCardsOut find_cards = 19;
|
|
BrowserRowsOut browser_rows = 20;
|
|
RenderCardOut render_card = 21;
|
|
string add_media_file = 26;
|
|
Empty sync_media = 27;
|
|
MediaCheckOut check_media = 28;
|
|
Empty trash_media_files = 29;
|
|
|
|
BackendError error = 2047;
|
|
}
|
|
}
|
|
|
|
message BackendError {
|
|
// localized error description suitable for displaying to the user
|
|
string localized = 1;
|
|
// error specifics
|
|
oneof value {
|
|
StringError invalid_input = 2;
|
|
StringError template_parse = 3;
|
|
StringError io_error = 4;
|
|
StringError db_error = 5;
|
|
NetworkError network_error = 6;
|
|
SyncError sync_error = 7;
|
|
// user interrupted operation
|
|
Empty interrupted = 8;
|
|
}
|
|
}
|
|
|
|
message Progress {
|
|
oneof value {
|
|
MediaSyncProgress media_sync = 1;
|
|
string media_check = 2;
|
|
}
|
|
}
|
|
|
|
message StringError {
|
|
string info = 1;
|
|
}
|
|
|
|
message NetworkError {
|
|
string info = 1;
|
|
enum NetworkErrorKind {
|
|
OTHER = 0;
|
|
OFFLINE = 1;
|
|
TIMEOUT = 2;
|
|
PROXY_AUTH = 3;
|
|
}
|
|
NetworkErrorKind kind = 2;
|
|
}
|
|
|
|
message SyncError {
|
|
string info = 1;
|
|
enum SyncErrorKind {
|
|
OTHER = 0;
|
|
CONFLICT = 1;
|
|
SERVER_ERROR = 2;
|
|
CLIENT_TOO_OLD = 3;
|
|
AUTH_FAILED = 4;
|
|
SERVER_MESSAGE = 5;
|
|
MEDIA_CHECK_REQUIRED = 6;
|
|
RESYNC_REQUIRED = 7;
|
|
}
|
|
SyncErrorKind kind = 2;
|
|
}
|
|
|
|
message MediaSyncProgress {
|
|
string checked = 1;
|
|
string added = 2;
|
|
string removed = 3;
|
|
}
|
|
|
|
message MediaSyncUploadProgress {
|
|
uint32 files = 1;
|
|
uint32 deletions = 2;
|
|
}
|
|
|
|
message TemplateRequirementsIn {
|
|
repeated string template_front = 1;
|
|
map<string, uint32> field_names_to_ordinals = 2;
|
|
}
|
|
|
|
message TemplateRequirementsOut {
|
|
repeated TemplateRequirement requirements = 1;
|
|
}
|
|
|
|
message TemplateRequirement {
|
|
oneof value {
|
|
TemplateRequirementAll all = 1;
|
|
TemplateRequirementAny any = 2;
|
|
Empty none = 3;
|
|
}
|
|
}
|
|
|
|
message TemplateRequirementAll {
|
|
repeated uint32 ords = 1;
|
|
}
|
|
|
|
message TemplateRequirementAny {
|
|
repeated uint32 ords = 1;
|
|
}
|
|
|
|
message SchedTimingTodayIn {
|
|
int64 created_secs = 1;
|
|
sint32 created_mins_west = 2;
|
|
int64 now_secs = 3;
|
|
sint32 now_mins_west = 4;
|
|
sint32 rollover_hour = 5;
|
|
}
|
|
|
|
message SchedTimingTodayOut {
|
|
uint32 days_elapsed = 1;
|
|
int64 next_day_at = 2;
|
|
}
|
|
|
|
message DeckTreeOut {
|
|
DeckTreeNode top = 1;
|
|
}
|
|
|
|
message DeckTreeNode {
|
|
// the components of a deck, split on ::
|
|
repeated string names = 1;
|
|
int64 deck_id = 2;
|
|
uint32 review_count = 3;
|
|
uint32 learn_count = 4;
|
|
uint32 new_count = 5;
|
|
repeated DeckTreeNode children = 6;
|
|
bool collapsed = 7;
|
|
}
|
|
|
|
message FindCardsIn {
|
|
string search = 1;
|
|
}
|
|
|
|
message FindCardsOut {
|
|
repeated int64 card_ids = 1;
|
|
}
|
|
|
|
message BrowserRowsIn {
|
|
repeated int64 card_ids = 1;
|
|
}
|
|
|
|
message BrowserRowsOut {
|
|
// just sort fields for proof of concept
|
|
repeated string sort_fields = 1;
|
|
}
|
|
|
|
message RenderCardIn {
|
|
string question_template = 1;
|
|
string answer_template = 2;
|
|
map<string,string> fields = 3;
|
|
int32 card_ordinal = 4;
|
|
}
|
|
|
|
message RenderCardOut {
|
|
repeated RenderedTemplateNode question_nodes = 1;
|
|
repeated RenderedTemplateNode answer_nodes = 2;
|
|
}
|
|
|
|
message RenderedTemplateNode {
|
|
oneof value {
|
|
string text = 1;
|
|
RenderedTemplateReplacement replacement = 2;
|
|
}
|
|
}
|
|
|
|
message RenderedTemplateReplacement {
|
|
string field_name = 1;
|
|
string current_text = 2;
|
|
repeated string filters = 3;
|
|
}
|
|
|
|
message ExtractAVTagsIn {
|
|
string text = 1;
|
|
bool question_side = 2;
|
|
}
|
|
|
|
message ExtractAVTagsOut {
|
|
string text = 1;
|
|
repeated AVTag av_tags = 2;
|
|
}
|
|
|
|
message AVTag {
|
|
oneof value {
|
|
string sound_or_video = 1;
|
|
TTSTag tts = 2;
|
|
}
|
|
}
|
|
|
|
message TTSTag {
|
|
string field_text = 1;
|
|
string lang = 2;
|
|
repeated string voices = 3;
|
|
float speed = 4;
|
|
repeated string other_args = 5;
|
|
}
|
|
|
|
message ExtractLatexIn {
|
|
string text = 1;
|
|
bool svg = 2;
|
|
bool expand_clozes = 3;
|
|
}
|
|
|
|
message ExtractLatexOut {
|
|
string text = 1;
|
|
repeated ExtractedLatex latex = 2;
|
|
}
|
|
|
|
message ExtractedLatex {
|
|
string filename = 1;
|
|
string latex_body = 2;
|
|
}
|
|
|
|
message AddMediaFileIn {
|
|
string desired_name = 1;
|
|
bytes data = 2;
|
|
}
|
|
|
|
message SyncMediaIn {
|
|
string hkey = 1;
|
|
string endpoint = 2;
|
|
}
|
|
|
|
message MediaCheckOut {
|
|
repeated string unused = 1;
|
|
repeated string missing = 2;
|
|
string report = 3;
|
|
}
|
|
|
|
message TrashMediaFilesIn {
|
|
repeated string fnames = 1;
|
|
}
|
|
|
|
message TranslateStringIn {
|
|
FluentString key = 2;
|
|
map<string,TranslateArgValue> args = 3;
|
|
}
|
|
|
|
message TranslateArgValue {
|
|
oneof value {
|
|
string str = 1;
|
|
double number = 2;
|
|
}
|
|
}
|
|
|
|
message FormatTimeSpanIn {
|
|
enum Context {
|
|
PRECISE = 0;
|
|
ANSWER_BUTTONS = 1;
|
|
INTERVALS = 2;
|
|
}
|
|
|
|
float seconds = 1;
|
|
Context context = 2;
|
|
}
|
|
|
|
message StudiedTodayIn {
|
|
uint32 cards = 1;
|
|
double seconds = 2;
|
|
}
|
|
|
|
message CongratsLearnMsgIn {
|
|
float next_due = 1;
|
|
uint32 remaining = 2;
|
|
} |