diff --git a/ftl/core/deck-config.ftl b/ftl/core/deck-config.ftl index be733b30b..2dc9ff523 100644 --- a/ftl/core/deck-config.ftl +++ b/ftl/core/deck-config.ftl @@ -328,12 +328,13 @@ deck-config-compute-optimal-retention = Compute optimal retention deck-config-compute-button = Compute deck-config-analyze-button = Analyze deck-config-desired-retention = Desired retention -deck-config-smaller-is-better = Smaller numbers indicate better memory estimates. -deck-config-steps-too-large-for-fsrs = When FSRS is enabled, interday (re)learning steps are not recommended. +deck-config-smaller-is-better = Smaller numbers indicate a better fit to your review history. +deck-config-steps-too-large-for-fsrs = When FSRS is enabled, learning steps over 1 day are not recommended. deck-config-get-params = Get Params deck-config-fsrs-on-all-clients = Please ensure all of your Anki clients are Anki(Mobile) 23.10+ or AnkiDroid 2.17+. FSRS will not work correctly if one of your clients is older. +deck-config-your-optimal-retention = Your optimal retention is { $num }. ## NO NEED TO TRANSLATE. This text is no longer used by Anki, and will be removed in the future. diff --git a/ftl/core/statistics.ftl b/ftl/core/statistics.ftl index b369741c0..d33fe7f96 100644 --- a/ftl/core/statistics.ftl +++ b/ftl/core/statistics.ftl @@ -96,7 +96,7 @@ statistics-card-ease-title = Card Ease statistics-card-difficulty-title = Card Difficulty statistics-card-retrievability-title = Card Retrievability statistics-card-ease-subtitle = The lower the ease, the more frequently a card will appear. -statistics-card-difficulty-subtitle = The higher the difficulty, the more frequently a card will appear. +statistics-card-difficulty-subtitle = The higher the difficulty, the harder it is to remember. statistics-retrievability-subtitle = How likely you are to remember. # eg "3 cards with 150-170% ease" statistics-card-ease-tooltip = diff --git a/proto/anki/scheduler.proto b/proto/anki/scheduler.proto index 536118c69..6c0315d73 100644 --- a/proto/anki/scheduler.proto +++ b/proto/anki/scheduler.proto @@ -343,7 +343,7 @@ message ComputeOptimalRetentionRequest { repeated float weights = 1; uint32 deck_size = 2; uint32 days_to_simulate = 3; - uint32 max_seconds_of_study_per_day = 4; + uint32 max_minutes_of_study_per_day = 4; uint32 max_interval = 5; string search = 6; } diff --git a/rslib/src/scheduler/fsrs/retention.rs b/rslib/src/scheduler/fsrs/retention.rs index 05d2dac3c..97e97ef8c 100644 --- a/rslib/src/scheduler/fsrs/retention.rs +++ b/rslib/src/scheduler/fsrs/retention.rs @@ -33,7 +33,7 @@ impl Collection { &SimulatorConfig { deck_size: req.deck_size as usize, learn_span: req.days_to_simulate as usize, - max_cost_perday: req.max_seconds_of_study_per_day as f64, + max_cost_perday: req.max_minutes_of_study_per_day as f64 * 60.0, max_ivl: req.max_interval as f64, recall_costs: [p.recall_secs_hard, p.recall_secs_good, p.recall_secs_easy], forget_cost: p.forget_secs, diff --git a/ts/deck-options/FsrsOptions.svelte b/ts/deck-options/FsrsOptions.svelte index f7bacb9af..d1604ff41 100644 --- a/ts/deck-options/FsrsOptions.svelte +++ b/ts/deck-options/FsrsOptions.svelte @@ -25,13 +25,15 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html export let state: DeckOptionsState; + const presetName = state.currentPresetName; + const config = state.currentConfig; const defaults = state.defaults; let computeWeightsProgress: ComputeWeightsProgress | undefined; let computeWeightsWarning = ""; - let customSearch = ""; let computing = false; + $: customSearch = `preset:"${$presetName}"`; let computeRetentionProgress: | ComputeWeightsProgress @@ -41,7 +43,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html const optimalRetentionRequest = new ComputeOptimalRetentionRequest({ deckSize: 10000, daysToSimulate: 365, - maxSecondsOfStudyPerDay: 1800, + maxMinutesOfStudyPerDay: 30, }); $: if (optimalRetentionRequest.daysToSimulate > 3650) { optimalRetentionRequest.daysToSimulate = 3650; @@ -55,11 +57,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html try { await runWithBackendProgress( async () => { - const search = customSearch - ? customSearch - : `preset:"${state.getCurrentName()}"`; const resp = await computeFsrsWeights({ - search, + search: customSearch, }); if (computeWeightsProgress) { computeWeightsProgress.current = computeWeightsProgress.total; @@ -137,7 +136,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html optimalRetentionRequest.weights = $config.fsrsWeights; optimalRetentionRequest.search = `preset:"${state.getCurrentName()}"`; const resp = await computeOptimalRetention(optimalRetentionRequest); - $config.desiredRetention = resp.optimalRetention; + alert( + tr.deckConfigYourOptimalRetention({ + num: resp.optimalRetention, + }), + ); if (computeRetentionProgress) { computeRetentionProgress.current = computeRetentionProgress.total; @@ -203,11 +206,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html