mirror of
https://github.com/ankitects/anki.git
synced 2025-11-11 23:27:12 -05:00
Skip unnecessary computations when the load balancer is disabled (#4184)
* Only get_deck_config when load balancer is enabled * Refactor load balancer card addition logic to use pre-fetched deckconfig_id * Refactor get_scheduling_states to use context for deck configuration
This commit is contained in:
parent
6744a0a31a
commit
208729fa3e
1 changed files with 29 additions and 23 deletions
|
|
@ -228,28 +228,31 @@ impl Collection {
|
||||||
/// Return the next states that will be applied for each answer button.
|
/// Return the next states that will be applied for each answer button.
|
||||||
pub fn get_scheduling_states(&mut self, cid: CardId) -> Result<SchedulingStates> {
|
pub fn get_scheduling_states(&mut self, cid: CardId) -> Result<SchedulingStates> {
|
||||||
let card = self.storage.get_card(cid)?.or_not_found(cid)?;
|
let card = self.storage.get_card(cid)?.or_not_found(cid)?;
|
||||||
let deck = self.get_deck(card.deck_id)?.or_not_found(card.deck_id)?;
|
let note_id = card.note_id;
|
||||||
|
|
||||||
let note_id = deck
|
|
||||||
.config_id()
|
|
||||||
.map(|deck_config_id| self.get_deck_config(deck_config_id, false))
|
|
||||||
.transpose()?
|
|
||||||
.flatten()
|
|
||||||
.map(|deck_config| deck_config.inner.bury_reviews)
|
|
||||||
.unwrap_or(false)
|
|
||||||
.then_some(card.note_id);
|
|
||||||
|
|
||||||
let ctx = self.card_state_updater(card)?;
|
let ctx = self.card_state_updater(card)?;
|
||||||
let current = ctx.current_card_state();
|
let current = ctx.current_card_state();
|
||||||
|
|
||||||
let load_balancer_ctx = self.state.card_queues.as_ref().and_then(|card_queues| {
|
let load_balancer_ctx = if let Some(load_balancer) = self
|
||||||
match card_queues.load_balancer.as_ref() {
|
.state
|
||||||
None => None,
|
.card_queues
|
||||||
Some(load_balancer) => {
|
.as_ref()
|
||||||
Some(load_balancer.review_context(note_id, deck.config_id()?))
|
.and_then(|card_queues| card_queues.load_balancer.as_ref())
|
||||||
}
|
{
|
||||||
|
// Only get_deck_config when load balancer is enabled
|
||||||
|
if let Some(deck_config_id) = ctx.deck.config_id() {
|
||||||
|
let note_id = self
|
||||||
|
.get_deck_config(deck_config_id, false)?
|
||||||
|
.map(|deck_config| deck_config.inner.bury_reviews)
|
||||||
|
.unwrap_or(false)
|
||||||
|
.then_some(note_id);
|
||||||
|
Some(load_balancer.review_context(note_id, deck_config_id))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
}
|
}
|
||||||
});
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let state_ctx = ctx.state_context(load_balancer_ctx);
|
let state_ctx = ctx.state_context(load_balancer_ctx);
|
||||||
Ok(current.next_states(&state_ctx))
|
Ok(current.next_states(&state_ctx))
|
||||||
|
|
@ -334,6 +337,7 @@ impl Collection {
|
||||||
self.update_deck_stats_from_answer(usn, answer, &updater, original.queue)?;
|
self.update_deck_stats_from_answer(usn, answer, &updater, original.queue)?;
|
||||||
self.maybe_bury_siblings(&original, &updater.config)?;
|
self.maybe_bury_siblings(&original, &updater.config)?;
|
||||||
let timing = updater.timing;
|
let timing = updater.timing;
|
||||||
|
let deckconfig_id = updater.deck.config_id();
|
||||||
let mut card = updater.into_card();
|
let mut card = updater.into_card();
|
||||||
if !matches!(
|
if !matches!(
|
||||||
answer.current_state,
|
answer.current_state,
|
||||||
|
|
@ -352,12 +356,14 @@ impl Collection {
|
||||||
}
|
}
|
||||||
|
|
||||||
if card.queue == CardQueue::Review {
|
if card.queue == CardQueue::Review {
|
||||||
let deck = self.get_deck(card.deck_id)?;
|
if let Some(load_balancer) = self
|
||||||
if let Some(card_queues) = self.state.card_queues.as_mut() {
|
.state
|
||||||
if let Some(deckconfig_id) = deck.and_then(|deck| deck.config_id()) {
|
.card_queues
|
||||||
if let Some(load_balancer) = card_queues.load_balancer.as_mut() {
|
.as_mut()
|
||||||
load_balancer.add_card(card.id, card.note_id, deckconfig_id, card.interval)
|
.and_then(|card_queues| card_queues.load_balancer.as_mut())
|
||||||
}
|
{
|
||||||
|
if let Some(deckconfig_id) = deckconfig_id {
|
||||||
|
load_balancer.add_card(card.id, card.note_id, deckconfig_id, card.interval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue