diff --git a/rslib/src/stats/card.rs b/rslib/src/stats/card.rs index 48fdc3457..6971311bf 100644 --- a/rslib/src/stats/card.rs +++ b/rslib/src/stats/card.rs @@ -152,14 +152,23 @@ impl Collection { let mut revlog_index = 0; for entry in revlog { let mut stats_entry = stats_revlog_entry(&entry); - let memory_state: FsrsMemoryState = - if entry.id == item.filtered_revlogs[revlog_index].id { - revlog_index += 1; - memory_states[revlog_index - 1].into() - } else { - memory_states[revlog_index].into() - }; - stats_entry.memory_state = Some(memory_state.into()); + let memory_state: Option = if revlog_index >= memory_states.len() { + // The removed revlog is in the end of the revlog, so we use the last memory + // state + Some(memory_states[memory_states.len() - 1].into()) + } else if entry.id == item.filtered_revlogs[revlog_index].id { + revlog_index += 1; + Some(memory_states[revlog_index - 1].into()) + } else if revlog_index == 0 { + // The removed revlog is in the start of the revlog, so we don't have a memory + // state for it + None + } else { + // The removed revlog is in the middle of the revlog, so we use the memory + // state for the previous revlog entry + Some(memory_states[revlog_index].into()) + }; + stats_entry.memory_state = memory_state.map(|s| s.into()); result.push(stats_entry); } Ok(result.into_iter().rev().collect()) diff --git a/ts/routes/card-info/forgetting-curve.ts b/ts/routes/card-info/forgetting-curve.ts index cb9dc2962..9f0301fce 100644 --- a/ts/routes/card-info/forgetting-curve.ts +++ b/ts/routes/card-info/forgetting-curve.ts @@ -56,7 +56,10 @@ export function filterRevlogEntryByReviewKind(entry: RevlogEntry): boolean { export function filterRevlog(revlog: RevlogEntry[]): RevlogEntry[] { const result: RevlogEntry[] = []; for (const entry of revlog) { - if (entry.reviewKind === RevlogEntry_ReviewKind.MANUAL && entry.ease === 0) { + if ( + (entry.reviewKind === RevlogEntry_ReviewKind.MANUAL && entry.ease === 0) + || entry.memoryState === undefined + ) { break; } result.push(entry);