mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -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]],
|
'terms': [["", 100, 0]],
|
||||||
'resched': True,
|
'resched': True,
|
||||||
'return': True, # currently unused
|
'return': True, # currently unused
|
||||||
|
|
||||||
|
# v2 scheduler
|
||||||
|
"previewDelay": 10,
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConf = {
|
defaultConf = {
|
||||||
|
|
|
@ -94,16 +94,13 @@ class Scheduler:
|
||||||
# update daily limit
|
# update daily limit
|
||||||
self._updateStats(card, 'rev')
|
self._updateStats(card, 'rev')
|
||||||
|
|
||||||
# hard-coded for now
|
|
||||||
_previewDelay = 600
|
|
||||||
|
|
||||||
def _answerCardPreview(self, card, ease):
|
def _answerCardPreview(self, card, ease):
|
||||||
assert 1 <= ease <= 2
|
assert 1 <= ease <= 2
|
||||||
|
|
||||||
if ease == 1:
|
if ease == 1:
|
||||||
# repeat after delay
|
# repeat after delay
|
||||||
card.queue = 4
|
card.queue = 4
|
||||||
card.due = intTime() + self._previewDelay
|
card.due = intTime() + self._previewDelay(card)
|
||||||
self.lrnCount += 1
|
self.lrnCount += 1
|
||||||
else:
|
else:
|
||||||
# restore original card state and remove from filtered deck
|
# restore original card state and remove from filtered deck
|
||||||
|
@ -1193,6 +1190,9 @@ where id = ?
|
||||||
conf = self._cardConf(card)
|
conf = self._cardConf(card)
|
||||||
return conf['dyn'] and not conf['resched']
|
return conf['dyn'] and not conf['resched']
|
||||||
|
|
||||||
|
def _previewDelay(self, card):
|
||||||
|
return self._cardConf(card).get("previewDelay", 10)*60
|
||||||
|
|
||||||
# Daily cutoff
|
# Daily cutoff
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
@ -1317,7 +1317,7 @@ To study outside of the normal schedule, click the Custom Study button below."""
|
||||||
# preview mode?
|
# preview mode?
|
||||||
if self._previewingCard(card):
|
if self._previewingCard(card):
|
||||||
if ease == 1:
|
if ease == 1:
|
||||||
return self._previewDelay
|
return self._previewDelay(card)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
# (re)learning?
|
# (re)learning?
|
||||||
|
|
|
@ -25,7 +25,7 @@ class DeckConf(QDialog):
|
||||||
self.form.buttonBox.helpRequested.connect(lambda: openHelp("filtered"))
|
self.form.buttonBox.helpRequested.connect(lambda: openHelp("filtered"))
|
||||||
self.setWindowTitle(_("Options for %s") % self.deck['name'])
|
self.setWindowTitle(_("Options for %s") % self.deck['name'])
|
||||||
restoreGeom(self, "dyndeckconf")
|
restoreGeom(self, "dyndeckconf")
|
||||||
self.setupOrder()
|
self.initialSetup()
|
||||||
self.loadConf()
|
self.loadConf()
|
||||||
if search:
|
if search:
|
||||||
self.form.search.setText(search + " is:due")
|
self.form.search.setText(search + " is:due")
|
||||||
|
@ -39,21 +39,29 @@ class DeckConf(QDialog):
|
||||||
self.exec_()
|
self.exec_()
|
||||||
saveGeom(self, "dyndeckconf")
|
saveGeom(self, "dyndeckconf")
|
||||||
|
|
||||||
def setupOrder(self):
|
def initialSetup(self):
|
||||||
import anki.consts as cs
|
import anki.consts as cs
|
||||||
self.form.order.addItems(list(cs.dynOrderLabels().values()))
|
self.form.order.addItems(list(cs.dynOrderLabels().values()))
|
||||||
self.form.order_2.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):
|
def loadConf(self):
|
||||||
f = self.form
|
f = self.form
|
||||||
d = self.deck
|
d = self.deck
|
||||||
|
|
||||||
f.resched.setChecked(d['resched'])
|
f.resched.setChecked(d['resched'])
|
||||||
|
self._onReschedToggled(0)
|
||||||
|
|
||||||
search, limit, order = d['terms'][0]
|
search, limit, order = d['terms'][0]
|
||||||
f.search.setText(search)
|
f.search.setText(search)
|
||||||
f.order.setCurrentIndex(order)
|
f.order.setCurrentIndex(order)
|
||||||
f.limit.setValue(limit)
|
f.limit.setValue(limit)
|
||||||
|
f.previewDelay.setValue(d.get("previewDelay", 10))
|
||||||
|
|
||||||
if len(d['terms']) > 1:
|
if len(d['terms']) > 1:
|
||||||
search, limit, order = d['terms'][1]
|
search, limit, order = d['terms'][1]
|
||||||
|
@ -86,6 +94,7 @@ class DeckConf(QDialog):
|
||||||
f.order_2.currentIndex()])
|
f.order_2.currentIndex()])
|
||||||
|
|
||||||
d['terms'] = terms
|
d['terms'] = terms
|
||||||
|
d['previewDelay'] = f.previewDelay.value()
|
||||||
|
|
||||||
self.mw.col.decks.save(d)
|
self.mw.col.decks.save(d)
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>445</width>
|
<width>382</width>
|
||||||
<height>354</height>
|
<height>413</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -134,13 +134,36 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QCheckBox" name="secondFilter">
|
<widget class="QCheckBox" name="secondFilter">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Enable second filter</string>
|
<string>Enable second filter</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -177,6 +200,7 @@
|
||||||
<tabstop>limit_2</tabstop>
|
<tabstop>limit_2</tabstop>
|
||||||
<tabstop>order_2</tabstop>
|
<tabstop>order_2</tabstop>
|
||||||
<tabstop>resched</tabstop>
|
<tabstop>resched</tabstop>
|
||||||
|
<tabstop>previewDelay</tabstop>
|
||||||
<tabstop>secondFilter</tabstop>
|
<tabstop>secondFilter</tabstop>
|
||||||
<tabstop>buttonBox</tabstop>
|
<tabstop>buttonBox</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
|
|
|
@ -724,7 +724,7 @@ def test_preview():
|
||||||
# grab the first card
|
# grab the first card
|
||||||
c = d.sched.getCard()
|
c = d.sched.getCard()
|
||||||
assert d.sched.answerButtons(c) == 2
|
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
|
assert d.sched.nextIvl(c, 2) == 0
|
||||||
# failing it will push its due time back
|
# failing it will push its due time back
|
||||||
due = c.due
|
due = c.due
|
||||||
|
|
Loading…
Reference in a new issue