deck_tree() could be made to unbury the current day's cards
When provided with a future timestamp to estimate the next day's cards, it lead to the current day's buried cards being unburied. Fixes https://forums.ankiweb.net/t/inconsistent-card-counts-when-syncing/15496
This commit is contained in:
parent
9daa0c9acb
commit
d7f5555642
@ -285,13 +285,17 @@ impl From<DeckTreeNode> for LegacyDueCounts {
|
|||||||
|
|
||||||
impl Collection {
|
impl Collection {
|
||||||
/// Get the deck tree.
|
/// Get the deck tree.
|
||||||
/// If now is provided, due counts for the provided timestamp will be populated.
|
/// - If `timestamp` is provided, due counts for the provided timestamp will
|
||||||
/// If top_deck_id is provided, only the node starting at the provided deck ID will
|
/// be populated.
|
||||||
/// have the counts populated. Currently the entire tree is returned in this case, but
|
/// - Buried cards from previous days will be unburied if necessary. Because
|
||||||
/// this may change in the future.
|
/// this does not happen for future stamps, future due numbers may not be
|
||||||
|
/// accurate.
|
||||||
|
/// - If top_deck_id is provided, only the node starting at the provided
|
||||||
|
/// deck ID will have the counts populated. Currently the entire tree is
|
||||||
|
/// returned in this case, but this may change in the future.
|
||||||
pub fn deck_tree(
|
pub fn deck_tree(
|
||||||
&mut self,
|
&mut self,
|
||||||
now: Option<TimestampSecs>,
|
timestamp: Option<TimestampSecs>,
|
||||||
top_deck_id: Option<DeckId>,
|
top_deck_id: Option<DeckId>,
|
||||||
) -> Result<DeckTreeNode> {
|
) -> Result<DeckTreeNode> {
|
||||||
let names = self.storage.get_all_deck_names()?;
|
let names = self.storage.get_all_deck_names()?;
|
||||||
@ -299,18 +303,22 @@ impl Collection {
|
|||||||
|
|
||||||
let decks_map = self.storage.get_decks_map()?;
|
let decks_map = self.storage.get_decks_map()?;
|
||||||
|
|
||||||
add_collapsed_and_filtered(&mut tree, &decks_map, now.is_none());
|
add_collapsed_and_filtered(&mut tree, &decks_map, timestamp.is_none());
|
||||||
if self.default_deck_is_empty()? {
|
if self.default_deck_is_empty()? {
|
||||||
hide_default_deck(&mut tree);
|
hide_default_deck(&mut tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(now) = now {
|
if let Some(timestamp) = timestamp {
|
||||||
|
// cards buried on previous days need to be unburied for the current
|
||||||
|
// day's counts to be accurate
|
||||||
|
let timing_today = self.timing_today()?;
|
||||||
|
self.unbury_if_day_rolled_over(timing_today)?;
|
||||||
|
|
||||||
let limit = top_deck_id
|
let limit = top_deck_id
|
||||||
.and_then(|did| decks_map.get(&did).map(|deck| deck.name.as_native_str()));
|
.and_then(|did| decks_map.get(&did).map(|deck| deck.name.as_native_str()));
|
||||||
let timing = self.timing_for_timestamp(now)?;
|
let timing_at_stamp = self.timing_for_timestamp(timestamp)?;
|
||||||
self.unbury_if_day_rolled_over(timing)?;
|
let days_elapsed = timing_at_stamp.days_elapsed;
|
||||||
let days_elapsed = timing.days_elapsed;
|
let learn_cutoff = (timestamp.0 as u32) + self.learn_ahead_secs();
|
||||||
let learn_cutoff = (now.0 as u32) + self.learn_ahead_secs();
|
|
||||||
let sched_ver = self.scheduler_version();
|
let sched_ver = self.scheduler_version();
|
||||||
let v3 = self.get_config_bool(BoolKey::Sched2021);
|
let v3 = self.get_config_bool(BoolKey::Sched2021);
|
||||||
let counts = self.due_counts(days_elapsed, learn_cutoff, limit)?;
|
let counts = self.due_counts(days_elapsed, learn_cutoff, limit)?;
|
||||||
|
Loading…
Reference in New Issue
Block a user