mirror of
https://github.com/ankitects/anki.git
synced 2025-09-22 16:02:23 -04:00
new active/inactive handling, bigger queues
- separate categories for new & review cards - 'only these tags' + 'none of these tags'
This commit is contained in:
parent
be4dea39b1
commit
b7e3d87e5d
1 changed files with 37 additions and 16 deletions
53
anki/deck.py
53
anki/deck.py
|
@ -94,7 +94,7 @@ decksTable = Table(
|
|||
Column('highPriority', UnicodeText, nullable=False, default=u"PriorityVeryHigh"),
|
||||
Column('medPriority', UnicodeText, nullable=False, default=u"PriorityHigh"),
|
||||
Column('lowPriority', UnicodeText, nullable=False, default=u"PriorityLow"),
|
||||
Column('suspended', UnicodeText, nullable=False, default=u""),
|
||||
Column('suspended', UnicodeText, nullable=False, default=u""), # obsolete
|
||||
# 0 is random, 1 is by input date
|
||||
Column('newCardOrder', Integer, nullable=False, default=1),
|
||||
# when to show new cards
|
||||
|
@ -146,10 +146,14 @@ class Deck(object):
|
|||
self.updateCutoff()
|
||||
self.setupStandardScheduler()
|
||||
# if most recent deck var not defined, make sure defaults are set
|
||||
if not self.s.scalar("select 1 from deckVars where key = 'perDay'"):
|
||||
if not self.s.scalar("select 1 from deckVars where key = 'revInactive'"):
|
||||
self.setVarDefault("suspendLeeches", True)
|
||||
self.setVarDefault("leechFails", 16)
|
||||
self.setVarDefault("perDay", True)
|
||||
self.setVarDefault("newActive", "")
|
||||
self.setVarDefault("revActive", "")
|
||||
self.setVarDefault("newInactive", self.suspended)
|
||||
self.setVarDefault("revInactive", self.suspended)
|
||||
|
||||
def modifiedSinceSave(self):
|
||||
return self.modified > self.lastLoaded
|
||||
|
@ -169,10 +173,6 @@ class Deck(object):
|
|||
self.updateNewCountToday = self._updateNewCountToday
|
||||
self.finishScheduler = None
|
||||
|
||||
def _noop(self):
|
||||
"Do nothing."
|
||||
pass
|
||||
|
||||
def fillQueues(self):
|
||||
self.fillFailedQueue()
|
||||
self.fillRevQueue()
|
||||
|
@ -187,6 +187,21 @@ class Deck(object):
|
|||
self.rebuildRevCount()
|
||||
self.rebuildNewCount()
|
||||
|
||||
def cardLimit(self, active, inactive):
|
||||
yes = parseTags(self.getVar(active))
|
||||
no = parseTags(self.getVar(inactive))
|
||||
if yes:
|
||||
yids = tagIds(self.s, yes).values()
|
||||
nids = tagIds(self.s, no).values()
|
||||
return """
|
||||
and id in (select cardId from cardTags where
|
||||
tagId in %s and tagId not in %s)""" % (ids2str(yids), ids2str(nids))
|
||||
else:
|
||||
nids = tagIds(self.s, no).values()
|
||||
return """
|
||||
and id not in (select cardId from cardTags where
|
||||
tagId in %s)""" % (ids2str(nids))
|
||||
|
||||
def _rebuildFailedCount(self):
|
||||
self.failedSoonCount = self.s.scalar(
|
||||
"select count(*) from cards where type = 0 "
|
||||
|
@ -194,14 +209,16 @@ class Deck(object):
|
|||
lim=self.dueCutoff)
|
||||
|
||||
def _rebuildRevCount(self):
|
||||
self.revCount = self.s.scalar(
|
||||
"select count(*) from cards where type = 1 "
|
||||
"and combinedDue < :lim", lim=self.dueCutoff)
|
||||
self.revCount = self.s.scalar("""
|
||||
select count(*) from cards where type = 1
|
||||
and combinedDue < :lim """ + self.cardLimit("revActive", "revInactive"),
|
||||
lim=self.dueCutoff)
|
||||
|
||||
def _rebuildNewCount(self):
|
||||
self.newCount = self.s.scalar(
|
||||
"select count(*) from cards where type = 2 "
|
||||
"and combinedDue < :lim", lim=self.dueCutoff)
|
||||
self.newCount = self.s.scalar("""
|
||||
select count(*) from cards where type = 2
|
||||
and combinedDue < :lim """ + self.cardLimit("newActive", "newInactive"),
|
||||
lim=self.dueCutoff)
|
||||
self.updateNewCountToday()
|
||||
|
||||
def _updateNewCountToday(self):
|
||||
|
@ -215,7 +232,7 @@ class Deck(object):
|
|||
select id, factId, combinedDue from cards
|
||||
where type = 0 and combinedDue < :lim
|
||||
order by combinedDue
|
||||
limit 50""", lim=self.dueCutoff)
|
||||
limit 200""", lim=self.dueCutoff)
|
||||
self.failedQueue.reverse()
|
||||
|
||||
def _fillRevQueue(self):
|
||||
|
@ -223,8 +240,10 @@ limit 50""", lim=self.dueCutoff)
|
|||
self.revQueue = self.s.all("""
|
||||
select id, factId from cards
|
||||
where type = 1 and combinedDue < :lim
|
||||
%s
|
||||
order by %s
|
||||
limit 50""" % self.revOrder(), lim=self.dueCutoff)
|
||||
limit 200""" % (self.cardLimit("revActive", "revInactive"),
|
||||
self.revOrder()), lim=self.dueCutoff)
|
||||
self.revQueue.reverse()
|
||||
|
||||
def _fillNewQueue(self):
|
||||
|
@ -232,8 +251,10 @@ limit 50""" % self.revOrder(), lim=self.dueCutoff)
|
|||
self.newQueue = self.s.all("""
|
||||
select id, factId from cards
|
||||
where type = 2 and combinedDue < :lim
|
||||
%s
|
||||
order by %s
|
||||
limit 50""" % self.newOrder(), lim=self.dueCutoff)
|
||||
limit 200""" % (self.cardLimit("newActive", "newInactive"),
|
||||
self.newOrder()), lim=self.dueCutoff)
|
||||
self.newQueue.reverse()
|
||||
|
||||
def queueNotEmpty(self, queue, fillFunc):
|
||||
|
@ -369,7 +390,7 @@ select count() from cards where type = 1 and combinedDue > :now
|
|||
if self.revCount and not self.revQueue:
|
||||
self.revQueue = self.s.all("""
|
||||
select id, factId from cards where type = 1 and combinedDue > :lim
|
||||
order by combinedDue limit 50""", lim=self.dueCutoff)
|
||||
order by combinedDue limit 200""", lim=self.dueCutoff)
|
||||
self.revQueue.reverse()
|
||||
|
||||
# Learn more
|
||||
|
|
Loading…
Reference in a new issue