mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
Fix/remove the lower limit of interval when set due date (#4063)
* Fix/remove the lower limit of interval when set due date * don't affect SM-2 * Apply patch from user1823 * Fix build * More suggestions from user1823
This commit is contained in:
parent
e5d34fbb18
commit
ce6497cd2b
2 changed files with 10 additions and 9 deletions
|
@ -34,11 +34,12 @@ impl Card {
|
||||||
let new_due = (today + days_from_today) as i32;
|
let new_due = (today + days_from_today) as i32;
|
||||||
let fsrs_enabled = self.memory_state.is_some();
|
let fsrs_enabled = self.memory_state.is_some();
|
||||||
let new_interval = if fsrs_enabled {
|
let new_interval = if fsrs_enabled {
|
||||||
self.interval.saturating_add_signed(new_due - self.due)
|
|
||||||
} else if force_reset || !matches!(self.ctype, CardType::Review | CardType::Relearn) {
|
|
||||||
days_from_today
|
|
||||||
} else {
|
|
||||||
self.interval
|
self.interval
|
||||||
|
.saturating_add_signed(new_due - self.original_or_current_due())
|
||||||
|
} else if force_reset || !matches!(self.ctype, CardType::Review | CardType::Relearn) {
|
||||||
|
days_from_today.max(1)
|
||||||
|
} else {
|
||||||
|
self.interval.max(1)
|
||||||
};
|
};
|
||||||
let ease_factor = (ease_factor * 1000.0).round() as u16;
|
let ease_factor = (ease_factor * 1000.0).round() as u16;
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ impl Card {
|
||||||
fn schedule_as_review(&mut self, interval: u32, due: i32, ease_factor: u16) {
|
fn schedule_as_review(&mut self, interval: u32, due: i32, ease_factor: u16) {
|
||||||
self.original_position = self.last_position();
|
self.original_position = self.last_position();
|
||||||
self.remove_from_filtered_deck_before_reschedule();
|
self.remove_from_filtered_deck_before_reschedule();
|
||||||
self.interval = interval.max(1);
|
self.interval = interval;
|
||||||
self.due = due;
|
self.due = due;
|
||||||
self.ctype = CardType::Review;
|
self.ctype = CardType::Review;
|
||||||
self.queue = CardQueue::Review;
|
self.queue = CardQueue::Review;
|
||||||
|
|
|
@ -83,7 +83,7 @@ impl ReviewState {
|
||||||
} else {
|
} else {
|
||||||
let (minimum, maximum) = ctx.min_and_max_review_intervals(ctx.minimum_lapse_interval);
|
let (minimum, maximum) = ctx.min_and_max_review_intervals(ctx.minimum_lapse_interval);
|
||||||
let interval = ctx.with_review_fuzz(
|
let interval = ctx.with_review_fuzz(
|
||||||
(self.scheduled_days as f32) * ctx.lapse_multiplier,
|
(self.scheduled_days as f32).max(1.0) * ctx.lapse_multiplier,
|
||||||
minimum,
|
minimum,
|
||||||
maximum,
|
maximum,
|
||||||
);
|
);
|
||||||
|
@ -211,7 +211,7 @@ impl ReviewState {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn passing_nonearly_review_intervals(self, ctx: &StateContext) -> (u32, u32, u32) {
|
fn passing_nonearly_review_intervals(self, ctx: &StateContext) -> (u32, u32, u32) {
|
||||||
let current_interval = self.scheduled_days as f32;
|
let current_interval = (self.scheduled_days as f32).max(1.0);
|
||||||
let days_late = self.days_late().max(0) as f32;
|
let days_late = self.days_late().max(0) as f32;
|
||||||
|
|
||||||
// hard
|
// hard
|
||||||
|
@ -251,8 +251,8 @@ impl ReviewState {
|
||||||
/// FIXME: this needs reworking in the future; it overly penalizes reviews
|
/// FIXME: this needs reworking in the future; it overly penalizes reviews
|
||||||
/// done shortly before the due date.
|
/// done shortly before the due date.
|
||||||
fn passing_early_review_intervals(self, ctx: &StateContext) -> (u32, u32, u32) {
|
fn passing_early_review_intervals(self, ctx: &StateContext) -> (u32, u32, u32) {
|
||||||
let scheduled = self.scheduled_days as f32;
|
let scheduled = (self.scheduled_days as f32).max(1.0);
|
||||||
let elapsed = (self.scheduled_days as f32) + (self.days_late() as f32);
|
let elapsed = self.elapsed_days as f32;
|
||||||
|
|
||||||
let hard_interval = {
|
let hard_interval = {
|
||||||
let factor = ctx.hard_multiplier;
|
let factor = ctx.hard_multiplier;
|
||||||
|
|
Loading…
Reference in a new issue