add find_deck_in_tree()

This commit is contained in:
Damien Elmes 2020-05-16 13:05:20 +10:00
parent 578b60c104
commit 8eada2b57d
2 changed files with 14 additions and 11 deletions

View file

@ -12,6 +12,7 @@ from anki import hooks
from anki.consts import *
from anki.errors import DeckRenameError
from anki.lang import _
from anki.rsbackend import DeckTreeNode
from anki.utils import ids2str, intTime
# legacy code may pass this in as the type argument to .id()
@ -175,6 +176,16 @@ class DeckManager:
def deck_tree(self) -> pb.DeckTreeNode:
return self.col.backend.deck_tree(include_counts=False)
@classmethod
def find_deck_in_tree(cls, node: DeckTreeNode, deck_id: int) -> Optional[DeckTreeNode]:
if node.deck_id == deck_id:
return node
for child in node.children:
match = cls.find_deck_in_tree(child, deck_id)
if match:
return match
return None
def all(self) -> List:
"All decks. Expensive; prefer all_names_and_ids()"
return self.get_all_legacy()

View file

@ -268,18 +268,10 @@ where id > ?""",
def _collapse(self, did: int) -> None:
self.mw.col.decks.collapse(did)
self._toggle_collapsed_in_node(did, self._dueTree)
self._renderPage(reuse=True)
def _toggle_collapsed_in_node(self, deck_id: int, node: DeckTreeNode) -> bool:
"Toggle collapsed on deck in tree. Returns true if found."
if node.deck_id == deck_id:
node = self.mw.col.decks.find_deck_in_tree(self._dueTree, did)
if node:
node.collapsed = not node.collapsed
return True
for child in node.children:
if self._toggle_collapsed_in_node(deck_id, child):
return True
return False
self._renderPage(reuse=True)
def _dragDeckOnto(self, draggedDeckDid, ontoDeckDid):
try: