From 8c1c729544ef831677d7927f6752faaa96a96d4d Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 12 Apr 2011 01:52:49 +0900 Subject: [PATCH] fix card state negation --- anki/find.py | 14 ++++++++------ tests/test_find.py | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/anki/find.py b/anki/find.py index a8869b912..e833d37cf 100644 --- a/anki/find.py +++ b/anki/find.py @@ -124,6 +124,7 @@ order by %s""" % (lim, sort) "tags %s like :_tag_%d""" % (extra, c)) def _findCardState(self, val, neg): + cond = None if val in ("rev", "new", "lrn"): if val == "rev": n = 2 @@ -131,15 +132,16 @@ order by %s""" % (lim, sort) n = 0 else: n = 1 - self.lims['card'].append("type = %d" % n) + cond = "type = %d" % n elif val == "suspended": - self.lims['card'].append("queue = -1") + cond = "queue = -1" elif val == "due": - self.lims['card'].append("(queue = 2 and due <= %d)" % - self.deck.sched.today) + cond = "(queue = 2 and due <= %d)" % self.deck.sched.today elif val == "recent": - self.lims['card'].append( - "c.id in (select id from cards order by mod desc limit 100)") + cond = "c.id in (select id from cards order by mod desc limit 100)" + if neg: + cond = "not (%s)" % cond + self.lims['card'].append(cond) def _findText(self, val, neg, c): val = val.replace("*", "%") diff --git a/tests/test_find.py b/tests/test_find.py index 512d48c72..471c6a0c9 100644 --- a/tests/test_find.py +++ b/tests/test_find.py @@ -58,6 +58,7 @@ def test_findCards(): c.due = 0; c.queue = 2 c.flush() assert deck.findCards("is:due") == [c.id] + assert len(deck.findCards("-is:due")) == 4 c.queue = -1 # ensure this card gets a later mod time import time; time.sleep(1)