remove some duplicate code & add deck.or() helper
This commit is contained in:
parent
390a8421aa
commit
35063316d3
@ -36,6 +36,16 @@ use crate::{
|
|||||||
|
|
||||||
define_newtype!(DeckId, i64);
|
define_newtype!(DeckId, i64);
|
||||||
|
|
||||||
|
impl DeckId {
|
||||||
|
pub(crate) fn or(self, other: DeckId) -> Self {
|
||||||
|
if self.0 == 0 {
|
||||||
|
other
|
||||||
|
} else {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub struct Deck {
|
pub struct Deck {
|
||||||
pub id: DeckId,
|
pub id: DeckId,
|
||||||
|
@ -135,11 +135,7 @@ impl Collection {
|
|||||||
map.entry("Tags").or_insert_with(|| tags.into());
|
map.entry("Tags").or_insert_with(|| tags.into());
|
||||||
map.entry("Type").or_insert_with(|| nt.name.clone().into());
|
map.entry("Type").or_insert_with(|| nt.name.clone().into());
|
||||||
let deck_name: Cow<str> = self
|
let deck_name: Cow<str> = self
|
||||||
.get_deck(if card.original_deck_id.0 > 0 {
|
.get_deck(card.original_deck_id.or(card.deck_id))?
|
||||||
card.original_deck_id
|
|
||||||
} else {
|
|
||||||
card.deck_id
|
|
||||||
})?
|
|
||||||
.map(|d| d.human_name().into())
|
.map(|d| d.human_name().into())
|
||||||
.unwrap_or_else(|| "(Deck)".into());
|
.unwrap_or_else(|| "(Deck)".into());
|
||||||
let subdeck_name = deck_name.rsplit("::").next().unwrap();
|
let subdeck_name = deck_name.rsplit("::").next().unwrap();
|
||||||
|
@ -72,11 +72,7 @@ impl Card {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn original_or_current_deck_id(&self) -> DeckId {
|
pub(crate) fn original_or_current_deck_id(&self) -> DeckId {
|
||||||
if self.original_deck_id.0 > 0 {
|
self.original_deck_id.or(self.deck_id)
|
||||||
self.original_deck_id
|
|
||||||
} else {
|
|
||||||
self.deck_id
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn remove_from_filtered_deck_restoring_queue(&mut self, sched: SchedulerVersion) {
|
pub(crate) fn remove_from_filtered_deck_restoring_queue(&mut self, sched: SchedulerVersion) {
|
||||||
|
@ -217,6 +217,18 @@ impl Collection {
|
|||||||
let selected_deck_limits = limits[parent_count];
|
let selected_deck_limits = limits[parent_count];
|
||||||
let mut queues = QueueBuilder::new(sort_options);
|
let mut queues = QueueBuilder::new(sort_options);
|
||||||
|
|
||||||
|
let get_bury_mode = |home_deck: DeckId| {
|
||||||
|
deck_map
|
||||||
|
.get(&home_deck)
|
||||||
|
.and_then(|deck| deck.config_id())
|
||||||
|
.and_then(|config_id| config.get(&config_id))
|
||||||
|
.map(|config| BuryMode {
|
||||||
|
bury_new: config.inner.bury_new,
|
||||||
|
bury_reviews: config.inner.bury_reviews,
|
||||||
|
})
|
||||||
|
.unwrap_or_default()
|
||||||
|
};
|
||||||
|
|
||||||
for (deck, mut limit) in decks.iter().zip(limits).skip(parent_count) {
|
for (deck, mut limit) in decks.iter().zip(limits).skip(parent_count) {
|
||||||
if limit.review > 0 {
|
if limit.review > 0 {
|
||||||
self.storage.for_each_due_card_in_deck(
|
self.storage.for_each_due_card_in_deck(
|
||||||
@ -224,40 +236,14 @@ impl Collection {
|
|||||||
timing.next_day_at,
|
timing.next_day_at,
|
||||||
deck.id,
|
deck.id,
|
||||||
|queue, card| {
|
|queue, card| {
|
||||||
let home_deck = if card.original_deck_id.0 == 0 {
|
let bury = get_bury_mode(card.original_deck_id.or(deck.id));
|
||||||
deck.id
|
|
||||||
} else {
|
|
||||||
card.original_deck_id
|
|
||||||
};
|
|
||||||
let bury = deck_map
|
|
||||||
.get(&home_deck)
|
|
||||||
.and_then(|deck| deck.config_id())
|
|
||||||
.and_then(|config_id| config.get(&config_id))
|
|
||||||
.map(|config| BuryMode {
|
|
||||||
bury_new: config.inner.bury_new,
|
|
||||||
bury_reviews: config.inner.bury_reviews,
|
|
||||||
})
|
|
||||||
.unwrap_or_default();
|
|
||||||
queues.add_due_card(&mut limit, queue, card, bury)
|
queues.add_due_card(&mut limit, queue, card, bury)
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
if limit.new > 0 {
|
if limit.new > 0 {
|
||||||
self.storage.for_each_new_card_in_deck(deck.id, |card| {
|
self.storage.for_each_new_card_in_deck(deck.id, |card| {
|
||||||
let home_deck = if card.original_deck_id.0 == 0 {
|
let bury = get_bury_mode(card.original_deck_id.or(deck.id));
|
||||||
deck.id
|
|
||||||
} else {
|
|
||||||
card.original_deck_id
|
|
||||||
};
|
|
||||||
let bury = deck_map
|
|
||||||
.get(&home_deck)
|
|
||||||
.and_then(|deck| deck.config_id())
|
|
||||||
.and_then(|config_id| config.get(&config_id))
|
|
||||||
.map(|config| BuryMode {
|
|
||||||
bury_new: config.inner.bury_new,
|
|
||||||
bury_reviews: config.inner.bury_reviews,
|
|
||||||
})
|
|
||||||
.unwrap_or_default();
|
|
||||||
queues.add_new_card(&mut limit, card, bury)
|
queues.add_new_card(&mut limit, card, bury)
|
||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user