mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
make preview delay customizable
This commit is contained in:
parent
1343101add
commit
651b107b18
5 changed files with 47 additions and 11 deletions
|
@ -42,6 +42,9 @@ defaultDynamicDeck = {
|
|||
'terms': [["", 100, 0]],
|
||||
'resched': True,
|
||||
'return': True, # currently unused
|
||||
|
||||
# v2 scheduler
|
||||
"previewDelay": 10,
|
||||
}
|
||||
|
||||
defaultConf = {
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>445</width>
|
||||
<height>354</height>
|
||||
<width>382</width>
|
||||
<height>413</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -134,13 +134,36 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="secondFilter">
|
||||
<property name="text">
|
||||
<string>Enable second filter</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QWidget" name="previewDelayWidget" native="true">
|
||||
<layout class="QHBoxLayout" name="previewDelayBox">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Repeat failed cards after</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="previewDelay"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>minutes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -177,6 +200,7 @@
|
|||
<tabstop>limit_2</tabstop>
|
||||
<tabstop>order_2</tabstop>
|
||||
<tabstop>resched</tabstop>
|
||||
<tabstop>previewDelay</tabstop>
|
||||
<tabstop>secondFilter</tabstop>
|
||||
<tabstop>buttonBox</tabstop>
|
||||
</tabstops>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue