better leech tag handling for test scheduler

This commit is contained in:
Damien Elmes 2021-05-10 14:58:04 +10:00
parent ea319b3dfc
commit 6775002709
3 changed files with 3 additions and 30 deletions

View file

@ -559,33 +559,6 @@ impl Collection {
Ok(DuplicateState::Empty)
}
}
/// Update the tags of the provided note, canonifying before save. Requires a transaction.
/// Fixme: this currently pulls in the note type, and does more work than necessary. We
/// could add a separate method to the storage layer to just update the tags in the future,
/// though it does slightly complicate the undo story.
pub(crate) fn update_note_tags<F>(&mut self, nid: NoteId, mutator: F) -> Result<()>
where
F: Fn(&mut Vec<String>),
{
self.transform_notes(&[nid], |note, _nt| {
let mut tags = note.tags.clone();
mutator(&mut tags);
let changed = if tags != note.tags {
note.tags = tags;
true
} else {
false
};
Ok(TransformNoteOutput {
changed,
generate_cards: false,
mark_modified: true,
update_tags: true,
})
})
.map(|_| ())
}
}
/// The existing note pulled from the DB will have sfld and csum set, but the

View file

@ -267,7 +267,6 @@ impl Collection {
let timing = updater.timing;
let mut card = updater.into_card();
self.update_card_inner(&mut card, original, usn)?;
println!("fixme: add_leech calls update_note_tags() which creates a transaction");
if answer.new_state.leeched() {
self.add_leech_tag(card.note_id)?;
}
@ -371,7 +370,8 @@ impl Collection {
}
fn add_leech_tag(&mut self, nid: NoteId) -> Result<()> {
self.update_note_tags(nid, |tags| tags.push("leech".into()))
self.add_tags_to_notes_inner(&[nid], "leech")?;
Ok(())
}
}

View file

@ -17,7 +17,7 @@ impl Collection {
}
impl Collection {
fn add_tags_to_notes_inner(&mut self, nids: &[NoteId], tags: &str) -> Result<usize> {
pub(crate) fn add_tags_to_notes_inner(&mut self, nids: &[NoteId], tags: &str) -> Result<usize> {
let usn = self.usn()?;
// will update tag list for any new tags, and match case