use the deck's groups instead of holding on to a private copy

This commit is contained in:
Damien Elmes 2011-03-29 17:35:44 +09:00
parent e93ded1e04
commit 692fba2ea3
3 changed files with 20 additions and 22 deletions

View file

@ -10,9 +10,8 @@ from anki.sched import Scheduler
class CramScheduler(Scheduler): class CramScheduler(Scheduler):
name = "cram" name = "cram"
def __init__(self, deck, gids, order, min=0, max=None): def __init__(self, deck, order, min=0, max=None):
Scheduler.__init__(self, deck) Scheduler.__init__(self, deck)
self.gids = gids
# should be the opposite order of what you want # should be the opposite order of what you want
self.order = order self.order = order
# days to limit cram to, where tomorrow=0. Max is inclusive. # days to limit cram to, where tomorrow=0. Max is inclusive.
@ -69,16 +68,12 @@ class CramScheduler(Scheduler):
maxlim = "and due <= %d" % (self.today+1+self.max) maxlim = "and due <= %d" % (self.today+1+self.max)
else: else:
maxlim = "" maxlim = ""
if self.gids:
extra = "and gid in "+ids2str(self.gids)
else:
extra = ""
self.newQueue = self.db.list(""" self.newQueue = self.db.list("""
select id from cards where queue = 2 and due >= %d select id from cards where queue = 2 and due >= %d
%s %s
%s order by %s limit %d""" % (self.today+1+self.min, %s order by %s limit %d""" % (self.today+1+self.min,
maxlim, maxlim,
extra, self._groupLimit(),
self.order, self.order,
self.reportLimit)) self.reportLimit))
self.newCount = len(self.newQueue) self.newCount = len(self.newQueue)

View file

@ -702,9 +702,9 @@ select conf from gconf where id = (select gcid from groups where id = ?)""",
self.sched = self._stdSched self.sched = self._stdSched
return True return True
def cramGroups(self, gids, order="mod desc", min=0, max=None): def cramGroups(self, order="mod desc", min=0, max=None):
self.stdSched() self.stdSched()
self.sched = anki.cram.CramScheduler(self, gids, order, min, max) self.sched = anki.cram.CramScheduler(self, order, min, max)
# Undo # Undo
########################################################################## ##########################################################################

View file

@ -328,7 +328,8 @@ def test_cram():
c.startTimer() c.startTimer()
c.flush() c.flush()
cardcopy = copy.copy(c) cardcopy = copy.copy(c)
d.cramGroups([1]) d.qconf['groups'] = [1]
d.cramGroups()
# first, test with initial intervals preserved # first, test with initial intervals preserved
conf = d.sched._lrnConf(c) conf = d.sched._lrnConf(c)
conf['reset'] = False conf['reset'] = False
@ -363,7 +364,7 @@ def test_cram():
# now try again with ivl rescheduling # now try again with ivl rescheduling
c = copy.copy(cardcopy) c = copy.copy(cardcopy)
c.flush() c.flush()
d.cramGroups([1]) d.cramGroups()
conf = d.sched._lrnConf(c) conf = d.sched._lrnConf(c)
conf['reset'] = False conf['reset'] = False
conf['resched'] = True conf['resched'] = True
@ -378,7 +379,7 @@ def test_cram():
# try with ivl reset # try with ivl reset
c = copy.copy(cardcopy) c = copy.copy(cardcopy)
c.flush() c.flush()
d.cramGroups([1]) d.cramGroups()
conf = d.sched._lrnConf(c) conf = d.sched._lrnConf(c)
conf['reset'] = True conf['reset'] = True
conf['resched'] = True conf['resched'] = True
@ -388,7 +389,8 @@ def test_cram():
assert c.ivl == 1 assert c.ivl == 1
assert c.due == d.sched.today + 1 assert c.due == d.sched.today + 1
# users should be able to cram entire deck too # users should be able to cram entire deck too
d.cramGroups([]) d.qconf['groups'] = []
d.cramGroups()
assert d.sched.counts()[0] > 0 assert d.sched.counts()[0] > 0
def test_cramLimits(): def test_cramLimits():
@ -403,29 +405,30 @@ def test_cramLimits():
c.due = d.sched.today + 1 + i c.due = d.sched.today + 1 + i
c.flush() c.flush()
# the default cram should return all three # the default cram should return all three
d.cramGroups([1]) d.qconf['groups'] = [1]
d.cramGroups()
assert d.sched.counts()[0] == 3 assert d.sched.counts()[0] == 3
# if we start from the day after tomorrow, it should be 2 # if we start from the day after tomorrow, it should be 2
d.cramGroups([1], min=1) d.cramGroups(min=1)
assert d.sched.counts()[0] == 2 assert d.sched.counts()[0] == 2
# or after 2 days # or after 2 days
d.cramGroups([1], min=2) d.cramGroups(min=2)
assert d.sched.counts()[0] == 1 assert d.sched.counts()[0] == 1
# we may get nothing # we may get nothing
d.cramGroups([1], min=3) d.cramGroups(min=3)
assert d.sched.counts()[0] == 0 assert d.sched.counts()[0] == 0
# tomorrow(0) + dayAfter(1) = 2 # tomorrow(0) + dayAfter(1) = 2
d.cramGroups([1], max=1) d.cramGroups(max=1)
assert d.sched.counts()[0] == 2 assert d.sched.counts()[0] == 2
# if max is tomorrow, we get only one # if max is tomorrow, we get only one
d.cramGroups([1], max=0) d.cramGroups(max=0)
assert d.sched.counts()[0] == 1 assert d.sched.counts()[0] == 1
# both should work # both should work
d.cramGroups([1], min=0, max=0) d.cramGroups(min=0, max=0)
assert d.sched.counts()[0] == 1 assert d.sched.counts()[0] == 1
d.cramGroups([1], min=1, max=1) d.cramGroups(min=1, max=1)
assert d.sched.counts()[0] == 1 assert d.sched.counts()[0] == 1
d.cramGroups([1], min=0, max=1) d.cramGroups(min=0, max=1)
assert d.sched.counts()[0] == 2 assert d.sched.counts()[0] == 2
def test_adjIvl(): def test_adjIvl():