From 651b107b182a321030b14f4d3d5c50d340985571 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 20 Jan 2018 15:26:11 +1000 Subject: [PATCH] make preview delay customizable --- anki/decks.py | 3 +++ anki/schedv2.py | 10 +++++----- aqt/dyndeckconf.py | 13 +++++++++++-- designer/dyndconf.ui | 30 +++++++++++++++++++++++++++--- tests/test_schedv2.py | 2 +- 5 files changed, 47 insertions(+), 11 deletions(-) diff --git a/anki/decks.py b/anki/decks.py index eec95f713..8ef878b9c 100644 --- a/anki/decks.py +++ b/anki/decks.py @@ -42,6 +42,9 @@ defaultDynamicDeck = { 'terms': [["", 100, 0]], 'resched': True, 'return': True, # currently unused + + # v2 scheduler + "previewDelay": 10, } defaultConf = { diff --git a/anki/schedv2.py b/anki/schedv2.py index e5ae9ffbc..8325ad22a 100644 --- a/anki/schedv2.py +++ b/anki/schedv2.py @@ -94,16 +94,13 @@ class Scheduler: # update daily limit self._updateStats(card, 'rev') - # hard-coded for now - _previewDelay = 600 - def _answerCardPreview(self, card, ease): assert 1 <= ease <= 2 if ease == 1: # repeat after delay card.queue = 4 - card.due = intTime() + self._previewDelay + card.due = intTime() + self._previewDelay(card) self.lrnCount += 1 else: # restore original card state and remove from filtered deck @@ -1193,6 +1190,9 @@ where id = ? conf = self._cardConf(card) return conf['dyn'] and not conf['resched'] + def _previewDelay(self, card): + return self._cardConf(card).get("previewDelay", 10)*60 + # Daily cutoff ########################################################################## @@ -1317,7 +1317,7 @@ To study outside of the normal schedule, click the Custom Study button below.""" # preview mode? if self._previewingCard(card): if ease == 1: - return self._previewDelay + return self._previewDelay(card) return 0 # (re)learning? diff --git a/aqt/dyndeckconf.py b/aqt/dyndeckconf.py index 6c916f62e..0282de879 100644 --- a/aqt/dyndeckconf.py +++ b/aqt/dyndeckconf.py @@ -25,7 +25,7 @@ class DeckConf(QDialog): self.form.buttonBox.helpRequested.connect(lambda: openHelp("filtered")) self.setWindowTitle(_("Options for %s") % self.deck['name']) restoreGeom(self, "dyndeckconf") - self.setupOrder() + self.initialSetup() self.loadConf() if search: self.form.search.setText(search + " is:due") @@ -39,21 +39,29 @@ class DeckConf(QDialog): self.exec_() saveGeom(self, "dyndeckconf") - def setupOrder(self): + def initialSetup(self): import anki.consts as cs self.form.order.addItems(list(cs.dynOrderLabels().values())) self.form.order_2.addItems(list(cs.dynOrderLabels().values())) + self.form.resched.stateChanged.connect(self._onReschedToggled) + + def _onReschedToggled(self, _state): + self.form.previewDelayWidget.setVisible(not self.form.resched.isChecked() + and self.mw.col.schedVer() > 1) + def loadConf(self): f = self.form d = self.deck f.resched.setChecked(d['resched']) + self._onReschedToggled(0) search, limit, order = d['terms'][0] f.search.setText(search) f.order.setCurrentIndex(order) f.limit.setValue(limit) + f.previewDelay.setValue(d.get("previewDelay", 10)) if len(d['terms']) > 1: search, limit, order = d['terms'][1] @@ -86,6 +94,7 @@ class DeckConf(QDialog): f.order_2.currentIndex()]) d['terms'] = terms + d['previewDelay'] = f.previewDelay.value() self.mw.col.decks.save(d) return True diff --git a/designer/dyndconf.ui b/designer/dyndconf.ui index 3bedbdc09..74ef67734 100644 --- a/designer/dyndconf.ui +++ b/designer/dyndconf.ui @@ -6,8 +6,8 @@ 0 0 - 445 - 354 + 382 + 413 @@ -134,13 +134,36 @@ - + Enable second filter + + + + + + + Repeat failed cards after + + + + + + + + + + minutes + + + + + + @@ -177,6 +200,7 @@ limit_2 order_2 resched + previewDelay secondFilter buttonBox diff --git a/tests/test_schedv2.py b/tests/test_schedv2.py index 8f20341cb..756126d2a 100644 --- a/tests/test_schedv2.py +++ b/tests/test_schedv2.py @@ -724,7 +724,7 @@ def test_preview(): # grab the first card c = d.sched.getCard() assert d.sched.answerButtons(c) == 2 - assert d.sched.nextIvl(c, 1) == d.sched._previewDelay + assert d.sched.nextIvl(c, 1) == 600 assert d.sched.nextIvl(c, 2) == 0 # failing it will push its due time back due = c.due