diff --git a/proto/anki/scheduler.proto b/proto/anki/scheduler.proto index 316c7ac7c..c6fe8f25b 100644 --- a/proto/anki/scheduler.proto +++ b/proto/anki/scheduler.proto @@ -291,12 +291,18 @@ message NextCardDataRequest { } message NextCardDataResponse { + message AnswerButton { + CardAnswer.Rating rating = 1; + string due = 2; + } + message NextCardData { int64 card_id = 1; string front = 2; string back = 3; SchedulingStates states = 4; + repeated AnswerButton answer_buttons = 5; } optional NextCardData next_card = 1; diff --git a/rslib/src/scheduler/service/mod.rs b/rslib/src/scheduler/service/mod.rs index 6f4dd219c..3c08835e6 100644 --- a/rslib/src/scheduler/service/mod.rs +++ b/rslib/src/scheduler/service/mod.rs @@ -7,6 +7,7 @@ mod states; use anki_proto::cards; use anki_proto::generic; use anki_proto::scheduler; +use anki_proto::scheduler::next_card_data_response::AnswerButton; use anki_proto::scheduler::next_card_data_response::NextCardData; use anki_proto::scheduler::ComputeFsrsParamsResponse; use anki_proto::scheduler::ComputeMemoryStateResponse; @@ -398,6 +399,16 @@ impl crate::services::SchedulerService for Collection { let render = self.render_existing_card(cid, false, false)?; let style = format!("", render.css); + let answer_buttons = self + .describe_next_states(&next_card.states)? + .into_iter() + .enumerate() + .map(|(i, due)| AnswerButton { + rating: i as i32, + due, + }) + .collect(); + Ok(NextCardDataResponse { next_card: Some(NextCardData { card_id: cid.0, @@ -405,6 +416,7 @@ impl crate::services::SchedulerService for Collection { back: [style, render.answer().to_string()].concat(), states: Some(next_card.states.clone().into()), + answer_buttons, }), }) } else { diff --git a/ts/routes/reviewer/+page.svelte b/ts/routes/reviewer/+page.svelte index 414cacb10..8e037789e 100644 --- a/ts/routes/reviewer/+page.svelte +++ b/ts/routes/reviewer/+page.svelte @@ -7,7 +7,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import ReviewerBottom from "./reviewer-bottom/ReviewerBottom.svelte"; import Reviewer from "./Reviewer.svelte"; - let state = new ReviewerState + const state = new ReviewerState();