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