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.
|
||||
pub fn get_scheduling_states(&mut self, cid: CardId) -> Result<SchedulingStates> {
|
||||
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 = 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 note_id = card.note_id;
|
||||
|
||||
let ctx = self.card_state_updater(card)?;
|
||||
let current = ctx.current_card_state();
|
||||
|
||||
let load_balancer_ctx = self.state.card_queues.as_ref().and_then(|card_queues| {
|
||||
match card_queues.load_balancer.as_ref() {
|
||||
None => None,
|
||||
Some(load_balancer) => {
|
||||
Some(load_balancer.review_context(note_id, deck.config_id()?))
|
||||
let load_balancer_ctx = if let Some(load_balancer) = self
|
||||
.state
|
||||
.card_queues
|
||||
.as_ref()
|
||||
.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);
|
||||
Ok(current.next_states(&state_ctx))
|
||||
|
|
@ -334,6 +337,7 @@ impl Collection {
|
|||
self.update_deck_stats_from_answer(usn, answer, &updater, original.queue)?;
|
||||
self.maybe_bury_siblings(&original, &updater.config)?;
|
||||
let timing = updater.timing;
|
||||
let deckconfig_id = updater.deck.config_id();
|
||||
let mut card = updater.into_card();
|
||||
if !matches!(
|
||||
answer.current_state,
|
||||
|
|
@ -352,15 +356,17 @@ impl Collection {
|
|||
}
|
||||
|
||||
if card.queue == CardQueue::Review {
|
||||
let deck = self.get_deck(card.deck_id)?;
|
||||
if let Some(card_queues) = self.state.card_queues.as_mut() {
|
||||
if let Some(deckconfig_id) = deck.and_then(|deck| deck.config_id()) {
|
||||
if let Some(load_balancer) = card_queues.load_balancer.as_mut() {
|
||||
if let Some(load_balancer) = self
|
||||
.state
|
||||
.card_queues
|
||||
.as_mut()
|
||||
.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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle queue updates based on from_queue flag
|
||||
if answer.from_queue {
|
||||
|
|
|
|||
Loading…
Reference in a new issue