obsolete suspended tag

- add suspendCards/unsuspendCards()
- set priority = -3 to manually suspend
- ignore cards with negative priorities when updating
- remove suspended from list of initial tags
This commit is contained in:
Damien Elmes 2009-06-18 02:25:14 +09:00
parent 03369658ee
commit 6a286d1eca

View file

@ -29,11 +29,17 @@ from anki.hooks import runHook
import anki.models, anki.facts, anki.cards, anki.stats
import anki.history, anki.media
# auto priorities
PRIORITY_HIGH = 4
PRIORITY_MED = 3
PRIORITY_NORM = 2
PRIORITY_LOW = 1
PRIORITY_NONE = 0
# manual priorities
PRIORITY_REVEARLY = -1
PRIORITY_BURIED = -2
PRIORITY_SUSPENDED = -3
# rest
MATURE_THRESHOLD = 21
NEW_CARDS_DISTRIBUTE = 0
NEW_CARDS_LAST = 1
@ -49,7 +55,7 @@ SEARCH_TAG = 0
SEARCH_TYPE = 1
SEARCH_PHRASE = 2
SEARCH_FID = 3
DECK_VERSION = 37
DECK_VERSION = 38
deckVarsTable = Table(
'deckVars', metadata,
@ -87,7 +93,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"Suspended"),
Column('suspended', UnicodeText, nullable=False, default=u""),
# 0 is random, 1 is by input date
Column('newCardOrder', Integer, nullable=False, default=1),
# when to show new cards
@ -827,7 +833,7 @@ group by cardTags.cardId""" % limit)
if cs:
self.s.statement((
"update cards set priority = :pri %s where id in %s "
"and priority != :pri") % (
"and priority != :pri and priority >= 0") % (
extra, ids2str(cs)), pri=pri, m=time.time())
cnt = self.s.execute(
"update cards set isDue = 0 where type in (0,1,2) and "
@ -840,6 +846,26 @@ group by cardTags.cardId""" % limit)
self.s.flush()
self.updatePriorities([card.id])
# Suspending
##########################################################################
def suspendCards(self, ids):
self.startProgress()
self.s.statement(
"update cards set isDue=0, priority=-3, modified=:t "
"where id in %s" % ids2str(ids), t=time.time())
self.rebuildCounts(full=False)
self.finishProgress()
def unsuspendCards(self, ids):
self.startProgress()
self.s.statement(
"update cards set priority=0, modified=:t where id in %s" %
ids2str(ids), t=time.time())
self.updatePriorities(ids)
self.rebuildCounts(full=False)
self.finishProgress()
# Card/fact counts - all in deck, not just due
##########################################################################
@ -1831,6 +1857,9 @@ cardTags.tagId in %s""" % ids2str(ids)
qquery += ("select id from cards where "
"due < %d and isDue = 0 and "
"priority in (1,2,3,4)") % time.time()
elif token == "suspended":
qquery += ("select id from cards where "
"priority in (-3, 0)")
else: # due
qquery += ("select id from cards where "
"type in (0,1) and isDue = 1")
@ -3142,6 +3171,20 @@ nextFactor, reps, thinkingTime, yesCount, noCount from reviewHistory""")
deck.failedCardMax = 0
deck.version = 37
deck.s.commit()
if deck.version < 38:
# manually suspend all suspended cards
ids = deck.findCards("tag:suspended")
if ids:
deck.suspendCards(ids)
deck.deleteTags(deck.s.column0(
"select distinct factId from cards "
"where id in %s" % ids2str(ids)),
"Suspended")
# suspended tag obsolete
deck.suspended = re.sub(" ?Suspended ?", "", deck.suspended)
deck.updateTagPriorities()
deck.version = 38
deck.s.commit()
# executing a pragma here is very slow on large decks, so we store
# our own record
if not deck.getInt("pageSize") == 4096: