From b89dde97a86d7ab574cb12cad0ada2da92be0859 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 2 Feb 2012 09:52:07 +0900 Subject: [PATCH] fix deck syncing problems - delete only the decks with graves, not any children - make sure we log the deletion even if the deck didn't exist --- anki/decks.py | 12 ++++++++---- anki/sync.py | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/anki/decks.py b/anki/decks.py index fd93d930e..dc0b786a0 100644 --- a/anki/decks.py +++ b/anki/decks.py @@ -114,20 +114,24 @@ class DeckManager(object): self.maybeAddToActive() return int(id) - def rem(self, did, cardsToo=False): + def rem(self, did, cardsToo=False, childrenToo=True): "Remove the deck. If cardsToo, delete any cards inside." assert str(did) != '1' + # log the removal regardless of whether we have the deck or not + self.col._logRem([did], REM_DECK) + # do nothing else if doesn't exist if not str(did) in self.decks: return # delete children first - for name, id in self.children(did): - self.rem(id, cardsToo) + if childrenToo: + # we don't want to delete children when syncing + for name, id in self.children(did): + self.rem(id, cardsToo) # delete cards too? if cardsToo: self.col.remCards(self.cids(did)) # delete the deck and add a grave del self.decks[str(did)] - self.col._logRem([did], REM_DECK) # ensure we have an active deck if did in self.active(): self.select(int(self.decks.keys()[0])) diff --git a/anki/sync.py b/anki/sync.py index 6d4fd4032..46a4ac071 100644 --- a/anki/sync.py +++ b/anki/sync.py @@ -263,7 +263,7 @@ from notes where %s""" % d) self.col.remCards(graves['cards']) # and decks for oid in graves['decks']: - self.col.decks.rem(oid) + self.col.decks.rem(oid, childrenToo=False) self.col.server = wasServer # Models