From 78494283c24900199c85f10e8bebc16533a2477b Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 10 Dec 2011 04:10:56 +0900 Subject: [PATCH] store forgetting index as %, fix card sorting --- anki/decks.py | 9 ++++++++- anki/sched.py | 22 +++++++++++++++------- tests/test_sched.py | 4 ++-- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/anki/decks.py b/anki/decks.py index 259f3bfab..90ecfae06 100644 --- a/anki/decks.py +++ b/anki/decks.py @@ -48,7 +48,7 @@ defaultConf = { 'ease4': 1.3, 'fuzz': 0.05, 'minSpace': 1, - 'fi': [0.1, 0.1], + 'fi': [10, 10], 'order': REV_CARDS_RANDOM, }, 'maxTaken': 60, @@ -220,6 +220,13 @@ class DeckManager(object): grp['conf'] = id self.save(grp) + def didsForConf(self, conf): + dids = [] + for deck in self.decks: + if deck['conf'] == conf['id']: + dids.append(deck['id']) + return dids + # Deck utils ############################################################# diff --git a/anki/sched.py b/anki/sched.py index 919fb3aaa..2c68e0138 100644 --- a/anki/sched.py +++ b/anki/sched.py @@ -613,7 +613,7 @@ did = ? and queue = 2 and due <= ? %s limit ?""" % order, def _ivlForFI(self, conf, ivl): new, old = conf['rev']['fi'] - return ivl * math.log(1-new) / math.log(1-old) + return ivl * math.log(1-new/100.0) / math.log(1-old/100.0) def _daysLate(self, card): "Number of days later than scheduled." @@ -875,10 +875,18 @@ and due >= ?""" % scids, now, self.col.usn(), shiftby, low) self.col.db.executemany( "update cards set due=:due,mod=:now,usn=:usn where id = :cid""", d) - # fixme: because it's a model property now, these should be done on a - # per-model basis - def randomizeCards(self): - self.sortCards(self.col.db.list("select id from cards"), shuffle=True) + def randomizeCards(self, did): + cids = self.col.db.list("select id from cards where did = ?", did) + self.sortCards(cids, shuffle=True) + + def orderCards(self, did): + cids = self.col.db.list("select id from cards where did = ?", did) + self.sortCards(cids) + + def resortConf(self, conf): + for did in self.mw.decks.didsForConf(conf): + if conf['new']['order'] == 0: + self.randomizeCards(did) + else: + self.orderCards(did) - def orderCards(self): - self.sortCards(self.col.db.list("select id from cards")) diff --git a/tests/test_sched.py b/tests/test_sched.py index bd848e7f7..a482e92f4 100644 --- a/tests/test_sched.py +++ b/tests/test_sched.py @@ -828,12 +828,12 @@ def test_reorder(): found=False # 50/50 chance of being reordered for i in range(20): - d.sched.randomizeCards() + d.sched.randomizeCards(1) if f.cards()[0].due != f.id: found=True break assert found - d.sched.orderCards() + d.sched.orderCards(1) assert f.cards()[0].due == 1 # shifting f3 = d.newNote()