new order is now a deck property

This commit is contained in:
Damien Elmes 2011-12-10 22:36:18 +09:00
parent 1e48ce9b99
commit 4428c04774
6 changed files with 29 additions and 31 deletions

View file

@ -2,7 +2,7 @@
# Copyright: Damien Elmes <anki@ichi2.net>
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time, os, random, re, stat, simplejson, datetime, copy, shutil
import time, os, random, re, stat, simplejson, datetime, copy, shutil, sys
from anki.lang import _, ngettext
from anki.utils import ids2str, hexifyID, checksum, fieldChecksum, stripHTML, \
intTime, splitFields, joinFields, maxID
@ -252,11 +252,8 @@ crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""",
if not cms:
return 0
note.flush()
# randomize?
if self.models.randomNew():
due = self._randPos()
else:
due = self.nextID("pos")
# deck conf governs which of these are used
due = self.nextID("pos")
# add cards
ncards = 0
for template in cms:
@ -264,9 +261,6 @@ crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""",
ncards += 1
return ncards
def _randPos(self):
return random.randrange(1, sys.maxint)
def remNotes(self, ids):
self.remCards(self.db.list("select id from cards where nid in "+
ids2str(ids)))
@ -347,11 +341,23 @@ insert into cards values (?,?,?,?,?,-1,0,0,?,0,0,0,0,0,0,0,"")""",
card.nid = note.id
card.ord = template['ord']
card.did = template['did'] or note.did
card.due = due
card.due = self._dueForDid(card.did, due)
if flush:
card.flush()
return card
def _dueForDid(self, did, due):
conf = self.decks.conf(did)
# in order due?
if conf['new']['order']:
return due
else:
# random mode; seed with note ts so all cards of this note get the
# same random number
r = random.Random()
r.seed(due)
return r.randrange(1, 2**32-1)
# Cards
##########################################################################

View file

@ -13,10 +13,6 @@ NEW_CARDS_FIRST = 2
NEW_CARDS_RANDOM = 0
NEW_CARDS_DUE = 1
# sort order for day's new cards
NEW_TODAY_ORD = 0
NEW_TODAY_DUE = 1
# review card sort order
REV_CARDS_RANDOM = 0
REV_CARDS_OLD_FIRST = 1
@ -64,9 +60,9 @@ def newCardSchedulingLabels():
def revCardOrderLabels():
return {
0: _("Review cards in date due order"),
1: _("Review cards from largest interval"),
2: _("Review cards from smallest interval"),
0: _("Sort by due date"),
1: _("Sort by decreasing interval (slower)"),
2: _("Sort by increasing interval (slower)"),
}
def alignmentLabels():

View file

@ -25,7 +25,8 @@ defaultConf = {
'delays': [1, 10],
'ints': [1, 4, 7], # 7 is not currently used
'initialFactor': 2500,
'order': NEW_TODAY_ORD,
'separate': True,
'order': NEW_CARDS_DUE,
'perDay': 20,
},
'lapse': {

View file

@ -17,11 +17,9 @@ defaultModel = {
'sortf': 0,
'did': 1,
'clozectx': False,
'newOrder': NEW_CARDS_DUE,
'latexPre': """\
\\documentclass[12pt]{article}
\\special{papersize=3in,5in}
% \\usepackage[utf8x]{inputenc} % uncomment this for foreign characters
\\usepackage{amssymb,amsmath}
\\pagestyle{empty}
\\setlength{\\parindent}{0in}
@ -172,9 +170,6 @@ select id from cards where nid in (select id from notes where mid = ?)""",
return self.col.db.scalar(
"select count() from notes where mid = ?", m['id'])
def randomNew(self):
return self.current()['newOrder'] == NEW_CARDS_RANDOM
# Copying
##################################################

View file

@ -264,7 +264,7 @@ select id, due from cards where did = ? and queue = 0 limit ?""", did, lim)
(id, due) = self._newQueue.pop()
# move any siblings to the end?
conf = self.col.decks.conf(self._newDids[0])
if conf['new']['order'] == NEW_TODAY_ORD:
if conf['new']['separate']:
n = len(self._newQueue)
while self._newQueue and self._newQueue[-1][1] == due:
self._newQueue.insert(0, self._newQueue.pop())
@ -823,7 +823,7 @@ your short-term review workload will become."""))
"update cards set type=0,queue=0,ivl=0 where id in "+ids2str(ids))
pmax = self.col.db.scalar("select max(due) from cards where type=0")
# takes care of mod + usn
self.sortCards(ids, start=pmax+1, shuffle=self.col.models.randomNew())
self.sortCards(ids, start=pmax+1)
def reschedCards(self, ids, imin, imax):
"Put cards in review queue with a new interval in days (min, max)."

View file

@ -578,11 +578,6 @@ and ord = ? limit 1""", m['id'], t['ord']):
self._rewriteMediaRefs()
# template handling has changed
self._upgradeTemplates()
# set new card order
for m in col.models.all():
m['newOrder'] = col.conf['oldNewOrder']
col.models.save(m)
del col.conf['oldNewOrder']
# fix creation time
col.sched._updateCutoff()
d = datetime.datetime.today()
@ -621,8 +616,13 @@ update cards set due = cast(
(case when due < :stamp then 0 else 1 end) +
((due-:stamp)/86400) as int)+:today where type = 2
""", stamp=col.sched.dayCutoff, today=col.sched.today)
# set new card order
conf = col.decks.allConf()[0]
conf['new']['order'] = col.conf['oldNewOrder']
col.decks.save(conf)
del col.conf['oldNewOrder']
# possibly re-randomize
if col.models.randomNew():
if not conf['new']['order']:
col.sched.randomizeCards(1)
# update insertion id
col.conf['nextPos'] = (