consume original card when updating

This commit is contained in:
Damien Elmes 2021-03-12 16:20:58 +10:00
parent 24762261d9
commit 7b7d7e8330
7 changed files with 16 additions and 16 deletions

View file

@ -145,7 +145,7 @@ impl Collection {
op: Option<UndoableOpKind>, op: Option<UndoableOpKind>,
) -> Result<()> { ) -> Result<()> {
let existing = self.storage.get_card(card.id)?.ok_or(AnkiError::NotFound)?; let existing = self.storage.get_card(card.id)?.ok_or(AnkiError::NotFound)?;
self.transact(op, |col| col.update_card_inner(card, &existing, col.usn()?)) self.transact(op, |col| col.update_card_inner(card, existing, col.usn()?))
} }
#[cfg(test)] #[cfg(test)]
@ -159,7 +159,7 @@ impl Collection {
.ok_or_else(|| AnkiError::invalid_input("no such card"))?; .ok_or_else(|| AnkiError::invalid_input("no such card"))?;
let mut card = orig.clone(); let mut card = orig.clone();
func(&mut card)?; func(&mut card)?;
self.update_card_inner(&mut card, &orig, self.usn()?)?; self.update_card_inner(&mut card, orig, self.usn()?)?;
Ok(card) Ok(card)
} }
@ -167,7 +167,7 @@ impl Collection {
pub(crate) fn update_card_inner( pub(crate) fn update_card_inner(
&mut self, &mut self,
card: &mut Card, card: &mut Card,
original: &Card, original: Card,
usn: Usn, usn: Usn,
) -> Result<()> { ) -> Result<()> {
card.set_modified(usn); card.set_modified(usn);
@ -218,7 +218,7 @@ impl Collection {
} }
let original = card.clone(); let original = card.clone();
card.set_deck(deck_id, sched); card.set_deck(deck_id, sched);
col.update_card_inner(&mut card, &original, usn)?; col.update_card_inner(&mut card, original, usn)?;
} }
Ok(()) Ok(())
}) })

View file

@ -21,7 +21,7 @@ impl Collection {
.storage .storage
.get_card(card.id)? .get_card(card.id)?
.ok_or_else(|| AnkiError::invalid_input("card disappeared"))?; .ok_or_else(|| AnkiError::invalid_input("card disappeared"))?;
self.update_card_undoable(&mut *card, &current) self.update_card_undoable(&mut *card, current)
} }
UndoableCardChange::Removed(card) => self.restore_deleted_card(*card), UndoableCardChange::Removed(card) => self.restore_deleted_card(*card),
UndoableCardChange::GraveAdded(e) => self.remove_card_grave(e.0, e.1), UndoableCardChange::GraveAdded(e) => self.remove_card_grave(e.0, e.1),
@ -35,11 +35,11 @@ impl Collection {
Ok(()) Ok(())
} }
pub(super) fn update_card_undoable(&mut self, card: &mut Card, original: &Card) -> Result<()> { pub(super) fn update_card_undoable(&mut self, card: &mut Card, original: Card) -> Result<()> {
if card.id.0 == 0 { if card.id.0 == 0 {
return Err(AnkiError::invalid_input("card id not set")); return Err(AnkiError::invalid_input("card id not set"));
} }
self.save_undo(UndoableCardChange::Updated(Box::new(original.clone()))); self.save_undo(UndoableCardChange::Updated(Box::new(original)));
self.storage.update_card(card) self.storage.update_card(card)
} }

View file

@ -184,7 +184,7 @@ impl Collection {
if let Some(mut card) = self.storage.get_card(*cid)? { if let Some(mut card) = self.storage.get_card(*cid)? {
let original = card.clone(); let original = card.clone();
card.remove_from_filtered_deck_restoring_queue(sched); card.remove_from_filtered_deck_restoring_queue(sched);
self.update_card_inner(&mut card, &original, usn)?; self.update_card_inner(&mut card, original, usn)?;
} }
} }
Ok(()) Ok(())
@ -249,7 +249,7 @@ impl Collection {
for mut card in self.storage.all_searched_cards_in_search_order()? { for mut card in self.storage.all_searched_cards_in_search_order()? {
let original = card.clone(); let original = card.clone();
card.move_into_filtered_deck(ctx, position); card.move_into_filtered_deck(ctx, position);
self.update_card_inner(&mut card, &original, ctx.usn)?; self.update_card_inner(&mut card, original, ctx.usn)?;
position += 1; position += 1;
} }

View file

@ -269,7 +269,7 @@ impl Collection {
self.maybe_bury_siblings(&original, &updater.config)?; self.maybe_bury_siblings(&original, &updater.config)?;
let timing = updater.timing; let timing = updater.timing;
let mut card = updater.into_card(); let mut card = updater.into_card();
self.update_card_inner(&mut card, &original, usn)?; self.update_card_inner(&mut card, original, usn)?;
if answer.new_state.leeched() { if answer.new_state.leeched() {
self.add_leech_tag(card.note_id)?; self.add_leech_tag(card.note_id)?;
} }

View file

@ -62,7 +62,7 @@ impl Collection {
for original in self.storage.all_searched_cards()? { for original in self.storage.all_searched_cards()? {
let mut card = original.clone(); let mut card = original.clone();
if card.restore_queue_after_bury_or_suspend() { if card.restore_queue_after_bury_or_suspend() {
self.update_card_inner(&mut card, &original, usn)?; self.update_card_inner(&mut card, original, usn)?;
} }
} }
self.storage.clear_searched_cards_table() self.storage.clear_searched_cards_table()
@ -113,7 +113,7 @@ impl Collection {
card.remove_from_learning(); card.remove_from_learning();
} }
card.queue = desired_queue; card.queue = desired_queue;
self.update_card_inner(&mut card, &original, usn)?; self.update_card_inner(&mut card, original, usn)?;
} }
} }

View file

@ -115,7 +115,7 @@ impl Collection {
if log { if log {
col.log_manually_scheduled_review(&card, &original, usn)?; col.log_manually_scheduled_review(&card, &original, usn)?;
} }
col.update_card_inner(&mut card, &original, usn)?; col.update_card_inner(&mut card, original, usn)?;
position += 1; position += 1;
} }
col.set_next_card_position(position)?; col.set_next_card_position(position)?;
@ -156,7 +156,7 @@ impl Collection {
for mut card in cards { for mut card in cards {
let original = card.clone(); let original = card.clone();
card.set_new_position(sorter.position(&card)); card.set_new_position(sorter.position(&card));
self.update_card_inner(&mut card, &original, usn)?; self.update_card_inner(&mut card, original, usn)?;
} }
self.storage.clear_searched_cards_table() self.storage.clear_searched_cards_table()
} }
@ -178,7 +178,7 @@ impl Collection {
for mut card in self.storage.all_searched_cards()? { for mut card in self.storage.all_searched_cards()? {
let original = card.clone(); let original = card.clone();
card.set_new_position(card.due as u32 + by); card.set_new_position(card.due as u32 + by);
self.update_card_inner(&mut card, &original, usn)?; self.update_card_inner(&mut card, original, usn)?;
} }
self.storage.clear_searched_cards_table()?; self.storage.clear_searched_cards_table()?;
Ok(()) Ok(())

View file

@ -107,7 +107,7 @@ impl Collection {
let days_from_today = distribution.sample(&mut rng); let days_from_today = distribution.sample(&mut rng);
card.set_due_date(today, days_from_today, spec.force_reset); card.set_due_date(today, days_from_today, spec.force_reset);
col.log_manually_scheduled_review(&card, &original, usn)?; col.log_manually_scheduled_review(&card, &original, usn)?;
col.update_card_inner(&mut card, &original, usn)?; col.update_card_inner(&mut card, original, usn)?;
} }
col.storage.clear_searched_cards_table()?; col.storage.clear_searched_cards_table()?;
if let Some(key) = context { if let Some(key) = context {