Remove options for all/allNames

Instead, we always see default deck if it has a child
As indicated in https://github.com/ankitects/anki/pull/452
This commit is contained in:
Arthur Milchior 2020-02-22 03:55:21 -08:00
parent 1126ae293e
commit 927749d7a6
2 changed files with 41 additions and 15 deletions

View file

@ -219,7 +219,7 @@ class DeckManager:
self.select(int(list(self.decks.keys())[0])) self.select(int(list(self.decks.keys())[0]))
self.save() self.save()
def allNames(self, dyn: bool = True, forceDefault: bool = True) -> List: def allNames(self, dyn: bool = True, force_default: bool = True) -> List:
"An unsorted list of all deck names." "An unsorted list of all deck names."
if dyn: if dyn:
return [x["name"] for x in self.all(force_default=force_default)] return [x["name"] for x in self.all(force_default=force_default)]
@ -228,8 +228,15 @@ class DeckManager:
x["name"] for x in self.all(force_default=force_default) if not x["dyn"] x["name"] for x in self.all(force_default=force_default) if not x["dyn"]
] ]
def all(self, force_default: int = ALL_DECKS) -> List: def all(self, force_default: bool = True) -> List:
"A list of all decks." """A list of all decks.
list contains default deck if either:
* force_default is True
* there are no other deck
* default deck contains a card
* default deck has a child (assumed not to be the case if assume_no_child)
"""
decks = list(self.decks.values()) decks = list(self.decks.values())
if not force_default and not self.shouldDefaultBeDisplayed(force_default): if not force_default and not self.shouldDefaultBeDisplayed(force_default):
decks = [deck for deck in decks if deck["id"] != 1] decks = [deck for deck in decks if deck["id"] != 1]
@ -509,27 +516,34 @@ class DeckManager:
self._recoverOrphans() self._recoverOrphans()
self._checkDeckTree() self._checkDeckTree()
def shouldDeckBeDisplayed(self, deck, force_default: int = ALL_DECKS) -> bool: def shouldDeckBeDisplayed(
self, deck, force_default: bool = True, assume_no_child: bool = False
) -> bool:
"""Whether the deck should appear in main window, browser side list, filter, deck selection... """Whether the deck should appear in main window, browser side list, filter, deck selection...
True, except for empty default deck without children""" True, except for empty default deck without children"""
if deck["id"] != "1": if deck["id"] != "1":
return True return True
return self.shouldDefaultBeDisplayed(force_default) return self.shouldDefaultBeDisplayed(force_default, assume_no_child)
def shouldDefaultBeDisplayed( def shouldDefaultBeDisplayed(
self, force_default: int = ALL_DECKS, defaultDeck=None self,
force_default: bool = True,
assume_no_child: bool = False,
defaultDeck=None,
) -> bool: ) -> bool:
"""Whether the default deck should appear in main window, browser side list, filter, deck selection... """Whether the default deck should appear in main window, browser side list, filter, deck selection...
True, except for empty default deck (without children)""" True, except for empty default deck (without children)"""
if force_default == ALL_DECKS: if force_default:
return True return True
if self.col.db.scalar("select 1 from cards where did = 1 limit 1"): if self.col.db.scalar("select 1 from cards where did = 1 limit 1"):
return True return True
if len(self.decks) == 1: if len(self.decks) == 1:
return True return True
if force_default == WITHOUT_EMPTY_LEAF_DEFAULT: # looking for children
if assume_no_child:
return False
if defaultDeck is None: if defaultDeck is None:
defaultDeck = self.get(1) defaultDeck = self.get(1)
defaultName = defaultDeck["name"] defaultName = defaultDeck["name"]

View file

@ -1156,6 +1156,15 @@ by clicking on one on the left."""
def fillGroups(root, grps, head=""): def fillGroups(root, grps, head=""):
for g in grps: for g in grps:
baseName = g[0]
did = g[1]
children = g[5]
if str(did) == "1" and not children:
if not self.mw.col.decks.shouldDefaultBeDisplayed(
force_default=False, assume_no_child=True
):
continue
item = SidebarItem( item = SidebarItem(
g[0], g[0],
":/icons/deck.svg", ":/icons/deck.svg",
@ -1312,6 +1321,9 @@ by clicking on one on the left."""
subm.addSeparator() subm.addSeparator()
addDecks(subm, children) addDecks(subm, children)
else: else:
if did != 1 or self.col.decks.shouldDefaultBeDisplayed(
force_default=False, assume_no_child=True
):
parent.addItem(shortname, self._filterFunc("deck", name)) parent.addItem(shortname, self._filterFunc("deck", name))
# fixme: could rewrite to avoid calculating due # in the future # fixme: could rewrite to avoid calculating due # in the future