diff --git a/anki/find.py b/anki/find.py index 203658b63..cd9678ee6 100644 --- a/anki/find.py +++ b/anki/find.py @@ -350,7 +350,7 @@ n.mid in %s and n.id %s in %s""" % ( token['value'] = token['value'][3:].lower() type = SEARCH_TYPE elif token['value'].startswith("note:"): - token['value'] = token['value'][6:].lower() + token['value'] = token['value'][5:].lower() type = SEARCH_MODEL elif token['value'].startswith("deck:"): token['value'] = token['value'][5:].lower() diff --git a/anki/sched.py b/anki/sched.py index 8fd5c5559..d924582ed 100644 --- a/anki/sched.py +++ b/anki/sched.py @@ -468,7 +468,8 @@ limit %d""" % (self._deckLimit(), self.reportLimit), lim=self.dayCutoff) def _rescheduleAsRev(self, card, conf, early): if card.type == 2: - card.due = card.odue + card.due = max(self.today+1, card.odue) + card.odue = 0 else: self._rescheduleNew(card, conf, early) card.queue = 2 diff --git a/tests/test_sched.py b/tests/test_sched.py index f3267535a..6cc2ab961 100644 --- a/tests/test_sched.py +++ b/tests/test_sched.py @@ -230,7 +230,6 @@ def test_reviews(): c.due = d.sched.today - 8 c.factor = 2500 c.reps = 3 - c.streak = 2 c.lapses = 1 c.ivl = 100 c.startTimer() @@ -310,6 +309,29 @@ def test_reviews(): c.load() assert c.queue == -1 +def test_overdue_lapse(): + d = getEmptyDeck() + # add a note + f = d.newNote() + f['Front'] = u"one" + d.addNote(f) + # simulate a review that was lapsed and is now due for its normal review + c = f.cards()[0] + c.type = 2 + c.queue = 1 + c.due = -1 + c.odue = -1 + c.factor = 2500 + c.left = 2 + c.ivl = 0 + c.flush() + d.sched.reset() + assert d.sched.counts() == (0, 2, 0) + c = d.sched.getCard() + d.sched.answerCard(c, 3) + # it should be due tomorrow + assert c.due == d.sched.today + 1 + def test_finished(): d = getEmptyDeck() # nothing due