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,10 +195,6 @@ 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)
except:
time.sleep(0.01)
self._logLrn(card, ease, conf, leaving) self._logLrn(card, ease, conf, leaving)
def _delayForGrade(self, conf, grade): def _delayForGrade(self, conf, grade):
@ -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)
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.cycles, int(time.time()*1000), card.id, ease, card.cycles,
# interval
self._delayForGrade(conf, card.grade), self._delayForGrade(conf, card.grade),
# last interval
self._delayForGrade(conf, max(0, card.grade-1)), self._delayForGrade(conf, max(0, card.grade-1)),
leaving, card.timeTaken(), 0) leaving, taken, 0)
return try:
log()
except: except:
if i == 0: # duplicate pk; retry in 10ms
# last answer was less than 1ms ago; retry
time.sleep(0.01) time.sleep(0.01)
else: log()
raise
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:
log()
except: except:
if i == 0: # duplicate pk; retry in 10ms
# last answer was less than 1ms ago; retry
time.sleep(0.01) time.sleep(0.01)
else: log()
raise
# Interval management # Interval management
########################################################################## ##########################################################################