mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
Make backend deck deletion take vec of ids
This commit is contained in:
parent
2c25645975
commit
f7c20e40b5
5 changed files with 25 additions and 14 deletions
|
@ -68,6 +68,10 @@ message DeckID {
|
|||
int64 did = 1;
|
||||
}
|
||||
|
||||
message DeckIDs {
|
||||
repeated int64 dids = 1;
|
||||
}
|
||||
|
||||
message DeckConfigID {
|
||||
int64 dcid = 1;
|
||||
}
|
||||
|
@ -146,7 +150,7 @@ service BackendService {
|
|||
rpc GetDeckLegacy(DeckID) returns (Json);
|
||||
rpc GetDeckNames(GetDeckNamesIn) returns (DeckNames);
|
||||
rpc NewDeckLegacy(Bool) returns (Json);
|
||||
rpc RemoveDeck(DeckID) returns (Empty);
|
||||
rpc RemoveDecks(DeckIDs) returns (Empty);
|
||||
rpc DragDropDecks(DragDropDecksIn) returns (Empty);
|
||||
|
||||
// deck config
|
||||
|
|
|
@ -69,6 +69,12 @@ impl From<pb::DeckId> for DeckID {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<pb::DeckIDs> for Vec<DeckID> {
|
||||
fn from(dids: pb::DeckIDs) -> Self {
|
||||
dids.dids.into_iter().map(DeckID).collect()
|
||||
}
|
||||
}
|
||||
|
||||
impl From<pb::DeckConfigId> for DeckConfID {
|
||||
fn from(dcid: pb::DeckConfigId) -> Self {
|
||||
DeckConfID(dcid.dcid)
|
||||
|
|
|
@ -898,8 +898,8 @@ impl BackendService for Backend {
|
|||
.map(Into::into)
|
||||
}
|
||||
|
||||
fn remove_deck(&self, input: pb::DeckId) -> BackendResult<Empty> {
|
||||
self.with_col(|col| col.remove_deck_and_child_decks(input.into()))
|
||||
fn remove_decks(&self, input: pb::DeckIDs) -> BackendResult<Empty> {
|
||||
self.with_col(|col| col.remove_decks_and_child_decks(input.into()))
|
||||
.map(Into::into)
|
||||
}
|
||||
|
||||
|
|
|
@ -442,22 +442,23 @@ impl Collection {
|
|||
self.storage.get_deck_id(&machine_name)
|
||||
}
|
||||
|
||||
pub fn remove_deck_and_child_decks(&mut self, did: DeckID) -> Result<()> {
|
||||
pub fn remove_decks_and_child_decks(&mut self, dids: Vec<DeckID>) -> Result<()> {
|
||||
// fixme: vet cache clearing
|
||||
self.state.deck_cache.clear();
|
||||
|
||||
self.transact(None, |col| {
|
||||
let usn = col.usn()?;
|
||||
for did in dids {
|
||||
if let Some(deck) = col.storage.get_deck(did)? {
|
||||
let child_decks = col.storage.child_decks(&deck)?;
|
||||
|
||||
if let Some(deck) = col.storage.get_deck(did)? {
|
||||
let child_decks = col.storage.child_decks(&deck)?;
|
||||
|
||||
// top level
|
||||
col.remove_single_deck(&deck, usn)?;
|
||||
|
||||
// remove children
|
||||
for deck in child_decks {
|
||||
// top level
|
||||
col.remove_single_deck(&deck, usn)?;
|
||||
|
||||
// remove children
|
||||
for deck in child_decks {
|
||||
col.remove_single_deck(&deck, usn)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
@ -775,7 +776,7 @@ mod test {
|
|||
|
||||
// delete top level
|
||||
let top = col.get_or_create_normal_deck("one")?;
|
||||
col.remove_deck_and_child_decks(top.id)?;
|
||||
col.remove_decks_and_child_decks(vec![top.id])?;
|
||||
|
||||
// should have come back as "Default+" due to conflict
|
||||
assert_eq!(sorted_names(&col), vec!["default", "Default+"]);
|
||||
|
|
|
@ -1522,7 +1522,7 @@ mod test {
|
|||
col1.remove_cards_and_orphaned_notes(&[cardid])?;
|
||||
let usn = col1.usn()?;
|
||||
col1.remove_note_only(noteid, usn)?;
|
||||
col1.remove_deck_and_child_decks(deckid)?;
|
||||
col1.remove_decks_and_child_decks(vec![deckid])?;
|
||||
|
||||
let out = ctx.normal_sync(&mut col1).await;
|
||||
assert_eq!(out.required, SyncActionRequired::NoChanges);
|
||||
|
|
Loading…
Reference in a new issue