def rename(self, g, newName): "Rename deck prefix to NAME if not exists. Updates children." # make sure target node doesn't already exist if newName in self.allNames(): raise DeckRenameError(_("That deck already exists.")) # ensure we have parents newName = self._ensureParents(newName) # make sure we're not nesting under a filtered deck if '::' in newName: newParent = '::'.join(newName.split('::')[:-1]) if self.byName(newParent)['dyn']: raise DeckRenameError( _("A filtered deck cannot have subdecks.")) # rename children for grp in self.all(): if grp['name'].startswith(g['name'] + "::"): grp['name'] = grp['name'].replace(g['name'] + "::", newName + "::", 1) self.save(grp) # adjust name g['name'] = newName # ensure we have parents again, as we may have renamed parent->child newName = self._ensureParents(newName) self.save(g) # renaming may have altered active did order self.maybeAddToActive()
def rename(self, g: Dict[str, Any], newName: str) -> None: "Rename deck prefix to NAME if not exists. Updates children." # make sure target node doesn't already exist if self.byName(newName): raise DeckRenameError(_("That deck already exists.")) # make sure we're not nesting under a filtered deck for p in self.parentsByName(newName): if p["dyn"]: raise DeckRenameError( _("A filtered deck cannot have subdecks.")) # ensure we have parents newName = self._ensureParents(newName) # rename children for grp in self.all(): if grp["name"].startswith(g["name"] + "::"): grp["name"] = grp["name"].replace(g["name"] + "::", newName + "::", 1) self.save(grp) # adjust name g["name"] = newName # ensure we have parents again, as we may have renamed parent->child newName = self._ensureParents(newName) self.save(g) # renaming may have altered active did order self.maybeAddToActive()
def rename(self, g, newName): """Rename the deck object g to newName. Updates children. Creates parents of newName if required. If newName already exists or if it a descendant of a filtered deck, the operation is aborted.""" # make sure target node doesn't already exist if newName in self.allNames(): raise DeckRenameError(_("That deck already exists.")) # ensure we have parents. newName = self._ensureParents(newName) # make sure we're not nesting under a filtered deck for p in self.parentsByName(newName): if p['dyn']: raise DeckRenameError( _("A filtered deck cannot have subdecks.")) # ensure we have parents newName = self._ensureParents(newName) # rename children for grp in self.all(): if grp['name'].startswith(g['name'] + "::"): grp['name'] = grp['name'].replace(g['name'] + "::", newName + "::", 1) self.save(grp) # adjust name g['name'] = newName # ensure we have parents again, as we may have renamed parent->child newName = self._ensureParents(newName) self.save(g) # renaming may have altered active did order self.maybeAddToActive()
def update(self, g: Dict[str, Any], preserve_usn=True) -> None: "Add or update an existing deck. Used for syncing and merging." try: self.col.backend.add_or_update_deck_legacy(g, preserve_usn) except anki.rsbackend.DeckIsFilteredError: raise DeckRenameError("deck was filtered") except anki.rsbackend.ExistsError: raise DeckRenameError("deck already exists")
def update(self, g: Dict[str, Any], preserve_usn=True) -> None: "Add or update an existing deck. Used for syncing and merging." try: g["id"] = self.col.backend.add_or_update_deck_legacy( deck=to_json_bytes(g), preserve_usn_and_mtime=preserve_usn) except anki.rsbackend.DeckIsFilteredError: raise DeckRenameError("deck was filtered")
def update(self, g: Deck, preserve_usn: bool = True) -> None: "Add or update an existing deck. Used for syncing and merging." try: g["id"] = self.col._backend.add_or_update_deck_legacy( deck=to_json_bytes(g), preserve_usn_and_mtime=preserve_usn) except DeckIsFilteredError as exc: raise DeckRenameError("deck was filtered") from exc
def rename(self, g, newName): """Rename the deck object g to newName. Updates descendants. Creates parents of newName if required. If newName already exists, the content of g is merged in it. If newName is a descendant of a filtered deck, the operation is aborted. """ oldName = g['name'] # ensure we have parents newName = self._ensureParents(newName) # make sure we're not nesting under a filtered deck for p in self.parentsByName(newName): if p['dyn']: raise DeckRenameError(_("A filtered deck cannot have subdecks.")) children = self.children(g['id']) + [g['id']] childrenDecks = list(map(self.get, children)) for grp in childrenDecks: newChildName = grp['name'].replace(oldName, newName, 1) newGrp = self.byName(newChildName) grpId = grp["id"] if newGrp: # deck with same name already existed. We move cards. self.col.db.execute( "update cards set did=?, mod=?, usn=? where did=?", newGrp["id"], intTime(), self.col.usn(), grpId) self.rem(grpId, childrenToo=False) else: # no deck with same name. Deck renamed. grp['name'] = newChildName self.save(grp) # ensure we have parents again, as we may have renamed parent->Descendant self._ensureParents(newName) # renaming may have altered active did order self.maybeAddToActive()
def _canDragAndDrop(self, draggedDeckName, ontoDeckName): if draggedDeckName == ontoDeckName \ or self._isParent(ontoDeckName, draggedDeckName) \ or self._isAncestor(draggedDeckName, ontoDeckName): return False elif self.byName(ontoDeckName)['dyn']: raise DeckRenameError(_("A filtered deck cannot have subdecks.")) else: return True
def rename(self, g, newName): "Rename deck prefix to NAME if not exists. Updates children." # make sure target node doesn't already exist if newName in self.allNames(): raise DeckRenameError(_("That deck already exists.")) # ensure we have parents newName = self._ensureParents(newName) # rename children for grp in self.all(): if grp['name'].startswith(g['name'] + "::"): grp['name'] = grp['name'].replace(g['name'] + "::", newName + "::") self.save(grp) # adjust name and save g['name'] = newName self.save(g)
def rename(self, g, newName): "Rename deck prefix to NAME if not exists. Updates children." # make sure target node doesn't already exist if newName in self.allNames(): raise DeckRenameError(_("That deck already exists.")) # ensure we have parents newName = self._ensureParents(newName) # rename children for grp in self.all(): if grp['name'].startswith(g['name'] + "::"): grp['name'] = grp['name'].replace(g['name'] + "::", newName + "::", 1) self.save(grp) # adjust name g['name'] = newName # ensure we have parents again, as we may have renamed parent->child newName = self._ensureParents(newName) self.save(g) # renaming may have altered active did order self.maybeAddToActive()