move time taken maximum into group conf

This commit is contained in:
Damien Elmes 2011-03-21 08:18:51 +09:00
parent eb18460945
commit 8b2971f91c
3 changed files with 33 additions and 37 deletions

View file

@ -5,8 +5,6 @@
import time import time
from anki.utils import intTime, hexifyID from anki.utils import intTime, hexifyID
MAX_TIMER = 60
# Cards # Cards
########################################################################## ##########################################################################
@ -122,4 +120,4 @@ streak=?, lapses=?, grade=?, cycles=?, edue=? where id = ?""",
def timeTaken(self): def timeTaken(self):
"Time taken to answer card, in integer MS." "Time taken to answer card, in integer MS."
return int(min(time.time() - self.timerStarted, MAX_TIMER)*1000) return int(time.time() - self.timerStarted)*1000

View file

@ -34,6 +34,7 @@ defaultConf = {
'fuzz': 0.05, 'fuzz': 0.05,
'minSpace': 1, 'minSpace': 1,
}, },
'maxTaken': 60,
} }
class GroupConfig(object): class GroupConfig(object):

View file

@ -195,11 +195,7 @@ limit %d""" % self.reportLimit, lim=self.dayCutoff)
else: else:
card.grade = 0 card.grade = 0
card.due = time.time() + self._delayForGrade(conf, card.grade) card.due = time.time() + self._delayForGrade(conf, card.grade)
try: self._logLrn(card, ease, conf, leaving)
self._logLrn(card, ease, conf, leaving)
except:
time.sleep(0.01)
self._logLrn(card, ease, conf, leaving)
def _delayForGrade(self, conf, grade): def _delayForGrade(self, conf, grade):
return conf['delays'][grade]*60 return conf['delays'][grade]*60
@ -237,21 +233,23 @@ limit %d""" % self.reportLimit, lim=self.dayCutoff)
card.factor = conf['initialFactor'] card.factor = conf['initialFactor']
def _logLrn(self, card, ease, conf, leaving): def _logLrn(self, card, ease, conf, leaving):
for i in range(2): # limit time taken to global setting
try: taken = min(card.timeTaken(), self._cardConf(card)['maxTaken']*1000)
self.deck.db.execute( def log():
"insert into revlog values (?,?,?,?,?,?,?,?,?)", self.deck.db.execute(
int(time.time()*1000), card.id, ease, card.cycles, "insert into revlog values (?,?,?,?,?,?,?,?,?)",
self._delayForGrade(conf, card.grade), int(time.time()*1000), card.id, ease, card.cycles,
self._delayForGrade(conf, max(0, card.grade-1)), # interval
leaving, card.timeTaken(), 0) self._delayForGrade(conf, card.grade),
return # last interval
except: self._delayForGrade(conf, max(0, card.grade-1)),
if i == 0: leaving, taken, 0)
# last answer was less than 1ms ago; retry try:
time.sleep(0.01) log()
else: except:
raise # duplicate pk; retry in 10ms
time.sleep(0.01)
log()
def removeFailed(self): def removeFailed(self):
"Remove failed cards from the learning queue." "Remove failed cards from the learning queue."
@ -338,20 +336,19 @@ queue = 2 %s and due <= :lim order by %s limit %d""" % (
card.due = self.today + card.ivl card.due = self.today + card.ivl
def _logRev(self, card, ease): def _logRev(self, card, ease):
for i in range(2): taken = min(card.timeTaken(), self._cardConf(card)['maxTaken']*1000)
try: def log():
self.deck.db.execute( self.deck.db.execute(
"insert into revlog values (?,?,?,?,?,?,?,?,?)", "insert into revlog values (?,?,?,?,?,?,?,?,?)",
int(time.time()*1000), card.id, ease, card.reps, int(time.time()*1000), card.id, ease, card.reps,
card.ivl, card.lastIvl, card.factor, card.timeTaken(), card.ivl, card.lastIvl, card.factor, taken,
1) 1)
return try:
except: log()
if i == 0: except:
# last answer was less than 1ms ago; retry # duplicate pk; retry in 10ms
time.sleep(0.01) time.sleep(0.01)
else: log()
raise
# Interval management # Interval management
########################################################################## ##########################################################################