mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
Fix/only let FSRS take over short-term schedule when steps are empty (#3496)
This commit is contained in:
parent
a537d349b8
commit
f804abf758
5 changed files with 27 additions and 14 deletions
|
@ -63,7 +63,7 @@ impl Collection {
|
||||||
.is_ok()
|
.is_ok()
|
||||||
},
|
},
|
||||||
)?
|
)?
|
||||||
.clamp(0.75, 0.95))
|
.clamp(0.7, 0.95))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_optimal_retention_parameters(
|
pub fn get_optimal_retention_parameters(
|
||||||
|
|
|
@ -49,7 +49,10 @@ impl LearnState {
|
||||||
} else {
|
} else {
|
||||||
let (minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
let (minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
||||||
let (interval, short_term) = if let Some(states) = &ctx.fsrs_next_states {
|
let (interval, short_term) = if let Some(states) = &ctx.fsrs_next_states {
|
||||||
(states.again.interval, states.again.interval < 0.5)
|
(
|
||||||
|
states.again.interval,
|
||||||
|
ctx.steps.is_empty() && states.again.interval < 0.5,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
(ctx.graduating_interval_good as f32, false)
|
(ctx.graduating_interval_good as f32, false)
|
||||||
};
|
};
|
||||||
|
@ -91,7 +94,10 @@ impl LearnState {
|
||||||
} else {
|
} else {
|
||||||
let (minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
let (minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
||||||
let (interval, short_term) = if let Some(states) = &ctx.fsrs_next_states {
|
let (interval, short_term) = if let Some(states) = &ctx.fsrs_next_states {
|
||||||
(states.hard.interval, states.hard.interval < 0.5)
|
(
|
||||||
|
states.hard.interval,
|
||||||
|
ctx.steps.is_empty() && states.hard.interval < 0.5,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
(ctx.graduating_interval_good as f32, false)
|
(ctx.graduating_interval_good as f32, false)
|
||||||
};
|
};
|
||||||
|
@ -133,7 +139,10 @@ impl LearnState {
|
||||||
} else {
|
} else {
|
||||||
let (minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
let (minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
||||||
let (interval, short_term) = if let Some(states) = &ctx.fsrs_next_states {
|
let (interval, short_term) = if let Some(states) = &ctx.fsrs_next_states {
|
||||||
(states.good.interval, states.good.interval < 0.5)
|
(
|
||||||
|
states.good.interval,
|
||||||
|
ctx.steps.is_empty() && states.good.interval < 0.5,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
(ctx.graduating_interval_good as f32, false)
|
(ctx.graduating_interval_good as f32, false)
|
||||||
};
|
};
|
||||||
|
|
|
@ -68,10 +68,10 @@ impl RelearnState {
|
||||||
},
|
},
|
||||||
review: again_review,
|
review: again_review,
|
||||||
};
|
};
|
||||||
if interval > 0.5 {
|
if ctx.relearn_steps.is_empty() && interval < 0.5 {
|
||||||
again_review.into()
|
|
||||||
} else {
|
|
||||||
again_relearn.into()
|
again_relearn.into()
|
||||||
|
} else {
|
||||||
|
again_review.into()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.review.into()
|
self.review.into()
|
||||||
|
@ -112,10 +112,10 @@ impl RelearnState {
|
||||||
},
|
},
|
||||||
review: hard_review,
|
review: hard_review,
|
||||||
};
|
};
|
||||||
if interval > 0.5 {
|
if ctx.relearn_steps.is_empty() && interval < 0.5 {
|
||||||
hard_review.into()
|
|
||||||
} else {
|
|
||||||
hard_relearn.into()
|
hard_relearn.into()
|
||||||
|
} else {
|
||||||
|
hard_review.into()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.review.into()
|
self.review.into()
|
||||||
|
@ -162,10 +162,10 @@ impl RelearnState {
|
||||||
},
|
},
|
||||||
review: good_review,
|
review: good_review,
|
||||||
};
|
};
|
||||||
if interval > 0.5 {
|
if ctx.relearn_steps.is_empty() && interval < 0.5 {
|
||||||
good_review.into()
|
|
||||||
} else {
|
|
||||||
good_relearn.into()
|
good_relearn.into()
|
||||||
|
} else {
|
||||||
|
good_review.into()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.review.into()
|
self.review.into()
|
||||||
|
|
|
@ -124,7 +124,7 @@ impl ReviewState {
|
||||||
review: again_review,
|
review: again_review,
|
||||||
}
|
}
|
||||||
.into()
|
.into()
|
||||||
} else if scheduled_days < 0.5 {
|
} else if ctx.relearn_steps.is_empty() && scheduled_days < 0.5 {
|
||||||
again_relearn.into()
|
again_relearn.into()
|
||||||
} else {
|
} else {
|
||||||
again_review.into()
|
again_review.into()
|
||||||
|
|
|
@ -83,6 +83,10 @@ impl<'a> LearningSteps<'a> {
|
||||||
pub(crate) fn remaining_for_failed(self) -> u32 {
|
pub(crate) fn remaining_for_failed(self) -> u32 {
|
||||||
self.steps.len() as u32
|
self.steps.len() as u32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn is_empty(&self) -> bool {
|
||||||
|
self.steps.is_empty()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// If the given interval in seconds surpasses 1 day, rounds it to a whole
|
/// If the given interval in seconds surpasses 1 day, rounds it to a whole
|
||||||
|
|
Loading…
Reference in a new issue