mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
Fix/recompute memory state when deck-specific DR is changed (#4293)
This commit is contained in:
parent
3521da3ad6
commit
4fdb4983dd
1 changed files with 12 additions and 10 deletions
|
@ -216,9 +216,6 @@ impl Collection {
|
||||||
for deck in self.storage.get_all_decks()? {
|
for deck in self.storage.get_all_decks()? {
|
||||||
if let Ok(normal) = deck.normal() {
|
if let Ok(normal) = deck.normal() {
|
||||||
let deck_id = deck.id;
|
let deck_id = deck.id;
|
||||||
if let Some(desired_retention) = normal.desired_retention {
|
|
||||||
deck_desired_retention.insert(deck_id, desired_retention);
|
|
||||||
}
|
|
||||||
// previous order & params
|
// previous order & params
|
||||||
let previous_config_id = DeckConfigId(normal.config_id);
|
let previous_config_id = DeckConfigId(normal.config_id);
|
||||||
let previous_config = configs_before_update.get(&previous_config_id);
|
let previous_config = configs_before_update.get(&previous_config_id);
|
||||||
|
@ -226,21 +223,23 @@ impl Collection {
|
||||||
.map(|c| c.inner.new_card_insert_order())
|
.map(|c| c.inner.new_card_insert_order())
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let previous_params = previous_config.map(|c| c.fsrs_params());
|
let previous_params = previous_config.map(|c| c.fsrs_params());
|
||||||
let previous_retention = previous_config.map(|c| c.inner.desired_retention);
|
let previous_preset_dr = previous_config.map(|c| c.inner.desired_retention);
|
||||||
|
let previous_deck_dr = normal.desired_retention;
|
||||||
|
let previous_dr = previous_deck_dr.or(previous_preset_dr);
|
||||||
let previous_easy_days = previous_config.map(|c| &c.inner.easy_days_percentages);
|
let previous_easy_days = previous_config.map(|c| &c.inner.easy_days_percentages);
|
||||||
|
|
||||||
// if a selected (sub)deck, or its old config was removed, update deck to point
|
// if a selected (sub)deck, or its old config was removed, update deck to point
|
||||||
// to new config
|
// to new config
|
||||||
let current_config_id = if selected_deck_ids.contains(&deck.id)
|
let (current_config_id, current_deck_dr) = if selected_deck_ids.contains(&deck.id)
|
||||||
|| !configs_after_update.contains_key(&previous_config_id)
|
|| !configs_after_update.contains_key(&previous_config_id)
|
||||||
{
|
{
|
||||||
let mut updated = deck.clone();
|
let mut updated = deck.clone();
|
||||||
updated.normal_mut()?.config_id = selected_config.id.0;
|
updated.normal_mut()?.config_id = selected_config.id.0;
|
||||||
update_deck_limits(updated.normal_mut()?, &req.limits, today);
|
update_deck_limits(updated.normal_mut()?, &req.limits, today);
|
||||||
self.update_deck_inner(&mut updated, deck, usn)?;
|
self.update_deck_inner(&mut updated, deck, usn)?;
|
||||||
selected_config.id
|
(selected_config.id, updated.normal()?.desired_retention)
|
||||||
} else {
|
} else {
|
||||||
previous_config_id
|
(previous_config_id, previous_deck_dr)
|
||||||
};
|
};
|
||||||
|
|
||||||
// if new order differs, deck needs re-sorting
|
// if new order differs, deck needs re-sorting
|
||||||
|
@ -254,11 +253,12 @@ impl Collection {
|
||||||
|
|
||||||
// if params differ, memory state needs to be recomputed
|
// if params differ, memory state needs to be recomputed
|
||||||
let current_params = current_config.map(|c| c.fsrs_params());
|
let current_params = current_config.map(|c| c.fsrs_params());
|
||||||
let current_retention = current_config.map(|c| c.inner.desired_retention);
|
let current_preset_dr = current_config.map(|c| c.inner.desired_retention);
|
||||||
|
let current_dr = current_deck_dr.or(current_preset_dr);
|
||||||
let current_easy_days = current_config.map(|c| &c.inner.easy_days_percentages);
|
let current_easy_days = current_config.map(|c| &c.inner.easy_days_percentages);
|
||||||
if fsrs_toggled
|
if fsrs_toggled
|
||||||
|| previous_params != current_params
|
|| previous_params != current_params
|
||||||
|| previous_retention != current_retention
|
|| previous_dr != current_dr
|
||||||
|| (req.fsrs_reschedule && previous_easy_days != current_easy_days)
|
|| (req.fsrs_reschedule && previous_easy_days != current_easy_days)
|
||||||
{
|
{
|
||||||
decks_needing_memory_recompute
|
decks_needing_memory_recompute
|
||||||
|
@ -266,7 +266,9 @@ impl Collection {
|
||||||
.or_default()
|
.or_default()
|
||||||
.push(deck_id);
|
.push(deck_id);
|
||||||
}
|
}
|
||||||
|
if let Some(desired_retention) = current_deck_dr {
|
||||||
|
deck_desired_retention.insert(deck_id, desired_retention);
|
||||||
|
}
|
||||||
self.adjust_remaining_steps_in_deck(deck_id, previous_config, current_config, usn)?;
|
self.adjust_remaining_steps_in_deck(deck_id, previous_config, current_config, usn)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue