rebuild_filtered_deck() and new_filtered()

This commit is contained in:
Damien Elmes 2020-09-03 18:02:47 +10:00
parent f87fa762be
commit ade7f438ce
9 changed files with 50 additions and 46 deletions

View file

@ -556,7 +556,7 @@ class DeckManager:
# Dynamic decks
##########################################################################
def newDyn(self, name: str) -> int:
def new_filtered(self, name: str) -> int:
"Return a new dynamic deck and set it as the current deck."
did = self.id(name, type=1)
self.select(did)
@ -565,3 +565,7 @@ class DeckManager:
# 1 for dyn, 0 for standard
def isDyn(self, did: Union[int, str]) -> int:
return self.get(did)["dyn"]
# legacy
newDyn = new_filtered

View file

@ -1070,15 +1070,6 @@ select id from cards where did in %s and queue = {QUEUE_TYPE_REV} and due <= ? l
def empty_filtered_deck(self, deck_id: int) -> None:
self.col.backend.empty_filtered_deck(deck_id)
def rebuildDyn(self, did: Optional[int] = None) -> Optional[int]:
did = did or self.col.decks.selected()
count = self.rebuild_filtered_deck(did) or None
if not count:
return None
# and change to our new deck
self.col.decks.select(did)
return count
def _removeFromFiltered(self, card: Card) -> None:
if card.odid:
card.did = card.odid
@ -1102,6 +1093,15 @@ select id from cards where did in %s and queue = {QUEUE_TYPE_REV} and due <= ? l
# legacy
def rebuildDyn(self, did: Optional[int] = None) -> Optional[int]:
did = did or self.col.decks.selected()
count = self.rebuild_filtered_deck(did) or None
if not count:
return None
# and change to our new deck
self.col.decks.select(did)
return count
def emptyDyn(self, did: Optional[int], lim: Optional[str] = None) -> None:
if lim is None:
self.empty_filtered_deck(did)

View file

@ -84,7 +84,7 @@ def test_rename():
for n in "yo", "yo::two", "yo::two::three":
assert n in names
# over filtered
filteredId = col.decks.newDyn("filtered")
filteredId = col.decks.new_filtered("filtered")
filtered = col.decks.get(filteredId)
childId = col.decks.id("child")
child = col.decks.get(childId)

View file

@ -545,8 +545,8 @@ def test_suspend():
# should cope with cards in cram decks
c.due = 1
c.flush()
col.decks.newDyn("tmp")
col.sched.rebuildDyn()
did = col.decks.new_filtered("tmp")
col.sched.rebuild_filtered_deck(did)
c.load()
assert c.due != 1
assert c.did != 1
@ -575,8 +575,8 @@ def test_cram():
assert col.sched.counts() == (0, 0, 0)
cardcopy = copy.copy(c)
# create a dynamic deck and refresh it
did = col.decks.newDyn("Cram")
col.sched.rebuildDyn(did)
did = col.decks.new_filtered("Cram")
col.sched.rebuild_filtered_deck(did)
col.reset()
# should appear as new in the deck list
assert sorted(col.sched.deck_due_tree().children)[0].new_count == 1
@ -616,7 +616,7 @@ def test_cram():
# and it will have moved back to the previous deck
assert c.did == 1
# cram the deck again
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
# check ivls again - passing should be idempotent
@ -646,8 +646,8 @@ def test_cram():
col.reset()
assert col.sched.counts() == (0, 0, 1)
# cram again
did = col.decks.newDyn("Cram")
col.sched.rebuildDyn(did)
did = col.decks.new_filtered("Cram")
col.sched.rebuild_filtered_deck(did)
col.reset()
assert col.sched.counts() == (0, 0, 1)
c.load()
@ -673,8 +673,8 @@ def test_cram_rem():
note["Front"] = "one"
col.addNote(note)
oldDue = note.cards()[0].due
did = col.decks.newDyn("Cram")
col.sched.rebuildDyn(did)
did = col.decks.new_filtered("Cram")
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
col.sched.answerCard(c, 2)
@ -695,11 +695,11 @@ def test_cram_resched():
note["Front"] = "one"
col.addNote(note)
# cram deck
did = col.decks.newDyn("Cram")
did = col.decks.new_filtered("Cram")
cram = col.decks.get(did)
cram["resched"] = False
col.decks.save(cram)
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
# graduate should return it to new
c = col.sched.getCard()
@ -718,7 +718,7 @@ def test_cram_resched():
c.factor = STARTING_FACTOR
c.flush()
cardcopy = copy.copy(c)
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
assert ni(c, 1) == 600
@ -730,7 +730,7 @@ def test_cram_resched():
# check failure too
c = cardcopy
c.flush()
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
col.sched.answerCard(c, 1)
@ -741,7 +741,7 @@ def test_cram_resched():
# fail+grad early
c = cardcopy
c.flush()
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
col.sched.answerCard(c, 1)
@ -754,7 +754,7 @@ def test_cram_resched():
c = cardcopy
c.due = -25
c.flush()
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
col.sched.answerCard(c, 3)
@ -766,7 +766,7 @@ def test_cram_resched():
c = cardcopy
c.due = -25
c.flush()
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
col.sched.answerCard(c, 1)
@ -778,7 +778,7 @@ def test_cram_resched():
c = cardcopy
c.due = -25
c.flush()
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
col.sched.answerCard(c, 1)
@ -789,7 +789,7 @@ def test_cram_resched():
# lapsed card pulled into cram
# col.sched._cardConf(c)['lapse']['mult']=0.5
# col.sched.answerCard(c, 1)
# col.sched.rebuildDyn(did)
# col.sched.rebuild_filtered_deck(did)
# col.reset()
# c = col.sched.getCard()
# col.sched.answerCard(c, 2)

View file

@ -668,8 +668,8 @@ def test_suspend():
# should cope with cards in cram decks
c.due = 1
c.flush()
col.decks.newDyn("tmp")
col.sched.rebuildDyn()
did = col.decks.new_filtered("tmp")
col.sched.rebuild_filtered_deck(did)
c.load()
assert c.due != 1
assert c.did != 1
@ -698,8 +698,8 @@ def test_filt_reviewing_early_normal():
col.reset()
assert col.sched.counts() == (0, 0, 0)
# create a dynamic deck and refresh it
did = col.decks.newDyn("Cram")
col.sched.rebuildDyn(did)
did = col.decks.new_filtered("Cram")
col.sched.rebuild_filtered_deck(did)
col.reset()
# should appear as normal in the deck list
assert sorted(col.sched.deck_due_tree().children)[0].review_count == 1
@ -727,7 +727,7 @@ def test_filt_reviewing_early_normal():
c.ivl = 100
c.due = col.sched.today + 75
c.flush()
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
c = col.sched.getCard()
@ -758,8 +758,8 @@ def test_filt_keep_lrn_state():
assert c.type == CARD_TYPE_LRN and c.queue == QUEUE_TYPE_LRN
# create a dynamic deck and refresh it
did = col.decks.newDyn("Cram")
col.sched.rebuildDyn(did)
did = col.decks.new_filtered("Cram")
col.sched.rebuild_filtered_deck(did)
col.reset()
# card should still be in learning state
@ -792,11 +792,11 @@ def test_preview():
note2["Front"] = "two"
col.addNote(note2)
# cram deck
did = col.decks.newDyn("Cram")
did = col.decks.new_filtered("Cram")
cram = col.decks.get(did)
cram["resched"] = False
col.decks.save(cram)
col.sched.rebuildDyn(did)
col.sched.rebuild_filtered_deck(did)
col.reset()
# grab the first card
c = col.sched.getCard()
@ -1253,8 +1253,8 @@ def test_negativeDueFilter():
c.flush()
# into and out of filtered deck
did = col.decks.newDyn("Cram")
col.sched.rebuildDyn(did)
did = col.decks.new_filtered("Cram")
col.sched.rebuild_filtered_deck(did)
col.sched.empty_filtered_deck(did)
col.reset()

View file

@ -150,7 +150,7 @@ class CustomStudy(QDialog):
dyn = cur
self.mw.col.decks.select(cur["id"])
else:
did = self.mw.col.decks.newDyn(_("Custom Study Session"))
did = self.mw.col.decks.new_filtered(_("Custom Study Session"))
dyn = self.mw.col.decks.get(did)
# and then set various options
if i == RADIO_FORGOT:
@ -186,7 +186,7 @@ class CustomStudy(QDialog):
self.mw.col.decks.save(dyn)
# generate cards
self.created_custom_study = True
if not self.mw.col.sched.rebuildDyn():
if not self.mw.col.sched.rebuild_filtered_deck(dyn["id"]):
return showWarning(_("No cards matched the criteria you provided."))
self.mw.moveToState("overview")
QDialog.accept(self)

View file

@ -122,7 +122,7 @@ class DeckConf(QDialog):
def accept(self):
if not self.saveConf():
return
if not self.mw.col.sched.rebuildDyn():
if not self.mw.col.sched.rebuild_filtered_deck(self.deck["id"]):
if askUser(
_(
"""\

View file

@ -1159,7 +1159,7 @@ title="%s" %s>%s</button>""" % (
while self.col.decks.id_for_name(_("Filtered Deck %d") % n):
n += 1
name = _("Filtered Deck %d") % n
did = self.col.decks.newDyn(name)
did = self.col.decks.new_filtered(name)
diag = aqt.dyndeckconf.DeckConf(self, first=True, search=search)
if not diag.ok:
# user cancelled first config

View file

@ -76,7 +76,7 @@ class Overview:
deck = self.mw.col.decks.current()
self.mw.onCram("'deck:%s'" % deck["name"])
elif url == "refresh":
self.mw.col.sched.rebuildDyn()
self.mw.col.sched.rebuild_filtered_deck(self.mw.col.decks.selected())
self.mw.reset()
elif url == "empty":
self.mw.col.sched.empty_filtered_deck(self.mw.col.decks.selected())
@ -107,7 +107,7 @@ class Overview:
def onRebuildKey(self):
if self._filteredDeck():
self.mw.col.sched.rebuildDyn()
self.mw.col.sched.rebuild_filtered_deck(self.mw.col.decks.selected())
self.mw.reset()
def onEmptyKey(self):