mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
clear overdue lapsed cards from learning queue
This commit is contained in:
parent
eba931a7da
commit
b2bc97ee49
3 changed files with 23 additions and 2 deletions
|
@ -164,6 +164,9 @@ class DeckManager(object):
|
||||||
"A list of all decks."
|
"A list of all decks."
|
||||||
return self.decks.values()
|
return self.decks.values()
|
||||||
|
|
||||||
|
def allIds(self):
|
||||||
|
return self.decks.keys()
|
||||||
|
|
||||||
def count(self):
|
def count(self):
|
||||||
return len(self.decks)
|
return len(self.decks)
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ class Scheduler(object):
|
||||||
self.reportLimit = 1000
|
self.reportLimit = 1000
|
||||||
self.reps = 0
|
self.reps = 0
|
||||||
self._haveQueues = False
|
self._haveQueues = False
|
||||||
|
self._clearOverdue = True
|
||||||
self._updateCutoff()
|
self._updateCutoff()
|
||||||
|
|
||||||
def getCard(self):
|
def getCard(self):
|
||||||
|
@ -41,6 +42,8 @@ class Scheduler(object):
|
||||||
def reset(self):
|
def reset(self):
|
||||||
deck = self.col.decks.current()
|
deck = self.col.decks.current()
|
||||||
self._updateCutoff()
|
self._updateCutoff()
|
||||||
|
if self._clearOverdue:
|
||||||
|
self.removeFailed(expiredOnly=True)
|
||||||
self._resetLrn()
|
self._resetLrn()
|
||||||
self._resetRev()
|
self._resetRev()
|
||||||
self._resetNew()
|
self._resetNew()
|
||||||
|
@ -532,11 +535,16 @@ limit %d""" % (self._deckLimit(), self.reportLimit), lim=self.dayCutoff)
|
||||||
time.sleep(0.01)
|
time.sleep(0.01)
|
||||||
log()
|
log()
|
||||||
|
|
||||||
def removeFailed(self, ids=None):
|
def removeFailed(self, ids=None, expiredOnly=False):
|
||||||
"Remove failed cards from the learning queue."
|
"Remove failed cards from the learning queue."
|
||||||
extra = ""
|
|
||||||
if ids:
|
if ids:
|
||||||
extra = " and id in "+ids2str(ids)
|
extra = " and id in "+ids2str(ids)
|
||||||
|
else:
|
||||||
|
# benchmarks indicate it's about 10x faster to search all decks
|
||||||
|
# with the index than scan the table
|
||||||
|
extra = " and did in "+ids2str(self.col.decks.allIds())
|
||||||
|
if expiredOnly:
|
||||||
|
extra += " and odue <= %d" % self.today
|
||||||
self.col.db.execute("""
|
self.col.db.execute("""
|
||||||
update cards set
|
update cards set
|
||||||
due = odue, queue = 2, mod = %d, usn = %d
|
due = odue, queue = 2, mod = %d, usn = %d
|
||||||
|
|
|
@ -325,12 +325,22 @@ def test_overdue_lapse():
|
||||||
c.left = 2
|
c.left = 2
|
||||||
c.ivl = 0
|
c.ivl = 0
|
||||||
c.flush()
|
c.flush()
|
||||||
|
d.sched._clearOverdue = False
|
||||||
|
# checkpoint
|
||||||
|
d.save()
|
||||||
d.sched.reset()
|
d.sched.reset()
|
||||||
assert d.sched.counts() == (0, 2, 0)
|
assert d.sched.counts() == (0, 2, 0)
|
||||||
c = d.sched.getCard()
|
c = d.sched.getCard()
|
||||||
d.sched.answerCard(c, 3)
|
d.sched.answerCard(c, 3)
|
||||||
# it should be due tomorrow
|
# it should be due tomorrow
|
||||||
assert c.due == d.sched.today + 1
|
assert c.due == d.sched.today + 1
|
||||||
|
# revert to before
|
||||||
|
d.rollback()
|
||||||
|
d.sched._clearOverdue = True
|
||||||
|
# with the default settings, the overdue card should be removed from the
|
||||||
|
# learning queue
|
||||||
|
d.sched.reset()
|
||||||
|
assert d.sched.counts() == (0, 0, 1)
|
||||||
|
|
||||||
def test_finished():
|
def test_finished():
|
||||||
d = getEmptyDeck()
|
d = getEmptyDeck()
|
||||||
|
|
Loading…
Reference in a new issue