From 953e6c93605c9d8af7d6e19f6b86b1eed9baa02e Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Sat, 4 Oct 2025 20:50:11 +0100 Subject: [PATCH] Re-implement answer buttons --- proto/anki/scheduler.proto | 6 ++++++ rslib/src/scheduler/service/mod.rs | 12 +++++++++++ ts/routes/reviewer/+page.svelte | 2 +- ts/routes/reviewer/Reviewer.svelte | 8 ++++---- .../reviewer-bottom/AnswerButton.svelte | 16 ++++++++++----- .../reviewer-bottom/ReviewerBottom.svelte | 20 +++++++++++-------- ts/routes/reviewer/reviewer.ts | 20 ++++++++++--------- 7 files changed, 57 insertions(+), 27 deletions(-) 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();
diff --git a/ts/routes/reviewer/Reviewer.svelte b/ts/routes/reviewer/Reviewer.svelte index af1407370..4f7bc0536 100644 --- a/ts/routes/reviewer/Reviewer.svelte +++ b/ts/routes/reviewer/Reviewer.svelte @@ -5,12 +5,12 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
diff --git a/ts/routes/reviewer/reviewer-bottom/AnswerButton.svelte b/ts/routes/reviewer/reviewer-bottom/AnswerButton.svelte index 8519bf0f2..c04fe7e0c 100644 --- a/ts/routes/reviewer/reviewer-bottom/AnswerButton.svelte +++ b/ts/routes/reviewer/reviewer-bottom/AnswerButton.svelte @@ -3,10 +3,16 @@ Copyright: Ankitects Pty Ltd and contributors License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html --> @@ -16,8 +22,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html   {/if} -