mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
remove did from notes, use model did instead
This commit is contained in:
parent
ffaf7ffc66
commit
f6b2e69669
13 changed files with 44 additions and 47 deletions
|
@ -292,10 +292,11 @@ crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""",
|
|||
now = intTime()
|
||||
rem = []
|
||||
usn = self.usn()
|
||||
for nid, mid, did, flds in self.db.execute(
|
||||
"select id, mid, did, flds from notes where id in "+snids):
|
||||
for nid, mid, flds in self.db.execute(
|
||||
"select id, mid, flds from notes where id in "+snids):
|
||||
model = self.models.get(mid)
|
||||
avail = self.models.availOrds(model, flds)
|
||||
did = model['did']
|
||||
for t in model['tmpls']:
|
||||
doHave = nid in have and t['ord'] in have[nid]
|
||||
# if have ord but empty, add cid to remove list
|
||||
|
@ -335,7 +336,7 @@ insert into cards values (?,?,?,?,?,?,0,0,?,0,0,0,0,0,0,0,0,"")""",
|
|||
card = anki.cards.Card(self)
|
||||
card.nid = note.id
|
||||
card.ord = template['ord']
|
||||
card.did = template['did'] or note.did
|
||||
card.did = template['did'] or note.model()['did']
|
||||
card.due = self._dueForDid(card.did, due)
|
||||
if flush:
|
||||
card.flush()
|
||||
|
|
|
@ -32,7 +32,7 @@ MEDIA_ADD = 0
|
|||
MEDIA_REM = 1
|
||||
|
||||
# deck schema & syncing vars
|
||||
SCHEMA_VERSION = 2
|
||||
SCHEMA_VERSION = 3
|
||||
SYNC_ZIP_SIZE = int(2.5*1024*1024)
|
||||
SYNC_URL = os.environ.get("SYNC_URL") or "https://beta.ankiweb.net/sync/"
|
||||
SYNC_VER = 1
|
||||
|
|
|
@ -147,7 +147,7 @@ class AnkiExporter(Exporter):
|
|||
notedata = self.src.db.all("select * from notes where id in "+
|
||||
strnids)
|
||||
self.dst.db.executemany(
|
||||
"insert into notes values (?,?,?,?,?,?,?,?,?,?,?,?)",
|
||||
"insert into notes values (?,?,?,?,?,?,?,?,?,?,?)",
|
||||
notedata)
|
||||
# models used by the notes
|
||||
mids = self.dst.db.list("select distinct mid from notes where id in "+
|
||||
|
|
|
@ -83,19 +83,18 @@ class Anki2Importer(Importer):
|
|||
existing[note[0]] = True
|
||||
# rewrite internal ids, models, etc
|
||||
note[2] = lmid
|
||||
note[3] = self._did(note[3])
|
||||
note[4] = intTime()
|
||||
note[5] = usn
|
||||
note[3] = intTime()
|
||||
note[4] = usn
|
||||
add.append(note)
|
||||
dirty.append(note[0])
|
||||
# note we have the added note
|
||||
self._notes[guid] = (note[0], note[4], note[2])
|
||||
self._notes[guid] = (note[0], note[3], note[2])
|
||||
else:
|
||||
# not yet implemented
|
||||
pass
|
||||
# add to col
|
||||
self.dst.db.executemany(
|
||||
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?,?)",
|
||||
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)",
|
||||
add)
|
||||
self.dst.updateFieldCache(dirty)
|
||||
self.dst.tags.registerNotes(dirty)
|
||||
|
|
|
@ -150,13 +150,13 @@ class NoteImporter(Importer):
|
|||
for ord, c in n.cards.items():
|
||||
self._cards.append((id, ord, c))
|
||||
self.col.tags.register(n.tags)
|
||||
return [id, guid64(), self.model['id'], self.didForNote(n),
|
||||
return [id, guid64(), self.model['id'],
|
||||
intTime(), self.col.usn(), self.col.tags.join(n.tags),
|
||||
n.fieldsStr, "", "", 0, ""]
|
||||
|
||||
def addNew(self, rows):
|
||||
self.col.db.executemany(
|
||||
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?,?)",
|
||||
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)",
|
||||
rows)
|
||||
|
||||
# need to document that deck is ignored in this case
|
||||
|
@ -175,13 +175,6 @@ class NoteImporter(Importer):
|
|||
update notes set mod = ?, usn = ?, flds = ?, tags = ?
|
||||
where id = ? and (flds != ? or tags != ?)""", rows)
|
||||
|
||||
def didForNote(self, n):
|
||||
if not n.deck:
|
||||
n.deck = _("Imported")
|
||||
if n.deck not in self._deckMap:
|
||||
self._deckMap[n.deck] = self.col.decks.id(n.deck)
|
||||
return self._deckMap[n.deck]
|
||||
|
||||
def processFields(self, note):
|
||||
fields = [""]*len(self.model['flds'])
|
||||
for c, f in enumerate(self.mapping):
|
||||
|
|
|
@ -19,7 +19,6 @@ class Note(object):
|
|||
self.id = timestampID(col.db, "notes")
|
||||
self.guid = guid64()
|
||||
self._model = model
|
||||
self.did = model['did']
|
||||
self.mid = model['id']
|
||||
self.tags = []
|
||||
self.fields = [""] * len(self._model['flds'])
|
||||
|
@ -31,14 +30,13 @@ class Note(object):
|
|||
def load(self):
|
||||
(self.guid,
|
||||
self.mid,
|
||||
self.did,
|
||||
self.mod,
|
||||
self.usn,
|
||||
self.tags,
|
||||
self.fields,
|
||||
self.flags,
|
||||
self.data) = self.col.db.first("""
|
||||
select guid, mid, did, mod, usn, tags, flds, flags, data
|
||||
select guid, mid, mod, usn, tags, flds, flags, data
|
||||
from notes where id = ?""", self.id)
|
||||
self.fields = splitFields(self.fields)
|
||||
self.tags = self.col.tags.split(self.tags)
|
||||
|
@ -55,8 +53,8 @@ from notes where id = ?""", self.id)
|
|||
tags = self.stringTags()
|
||||
csum = fieldChecksum(self.fields[0])
|
||||
res = self.col.db.execute("""
|
||||
insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?,?)""",
|
||||
self.id, self.guid, self.mid, self.did,
|
||||
insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)""",
|
||||
self.id, self.guid, self.mid,
|
||||
self.mod, self.usn, tags,
|
||||
self.joinedFields(), sfld, csum, self.flags,
|
||||
self.data)
|
||||
|
@ -73,12 +71,6 @@ insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?,?)""",
|
|||
def model(self):
|
||||
return self._model
|
||||
|
||||
def updateCardDids(self):
|
||||
for c in self.cards():
|
||||
if c.did != self.did and not c.template()['did']:
|
||||
c.did = self.did
|
||||
c.flush()
|
||||
|
||||
# Dict interface
|
||||
##################################################
|
||||
|
||||
|
|
|
@ -50,8 +50,7 @@ class CardStats(object):
|
|||
self.addLine(_("Position"), c.due)
|
||||
self.addLine(_("Card Type"), c.template()['name'])
|
||||
self.addLine(_("Note Type"), c.model()['name'])
|
||||
self.addLine(_("Card Deck"), self.col.decks.name(c.did))
|
||||
self.addLine(_("Note Deck"), self.col.decks.name(c.note().did))
|
||||
self.addLine(_("Deck"), self.col.decks.name(c.did))
|
||||
self.txt += "</table>"
|
||||
return self.txt
|
||||
|
||||
|
|
|
@ -46,8 +46,11 @@ def Collection(path, lock=True, server=False, sync=True):
|
|||
|
||||
# no upgrades necessary at the moment
|
||||
def _upgradeSchema(db):
|
||||
if db.scalar("select ver from col") < SCHEMA_VERSION:
|
||||
print "upgrading"
|
||||
if db.scalar("select ver from col") == SCHEMA_VERSION:
|
||||
return SCHEMA_VERSION
|
||||
# add odid to cards, edue->odue
|
||||
######################################################################
|
||||
if db.scalar("select ver from col") == 1:
|
||||
db.execute("alter table cards rename to cards2")
|
||||
_addSchema(db)
|
||||
db.execute("""
|
||||
|
@ -57,6 +60,17 @@ left, edue, 0, flags, data from cards2""")
|
|||
db.execute("drop table cards2")
|
||||
db.execute("update col set ver = 2")
|
||||
_updateIndices(db)
|
||||
# remove did from notes
|
||||
######################################################################
|
||||
if db.scalar("select ver from col") == 2:
|
||||
db.execute("alter table notes rename to notes2")
|
||||
_addSchema(db)
|
||||
db.execute("""
|
||||
insert into notes select
|
||||
id, guid, mid, mod, usn, tags, flds, sfld, csum, flags, data from notes2""")
|
||||
db.execute("drop table notes2")
|
||||
db.execute("update col set ver = 3")
|
||||
_updateIndices(db)
|
||||
return SCHEMA_VERSION
|
||||
|
||||
def _upgrade(col, ver):
|
||||
|
@ -96,7 +110,6 @@ create table if not exists notes (
|
|||
id integer primary key,
|
||||
guid text not null,
|
||||
mid integer not null,
|
||||
did integer not null,
|
||||
mod integer not null,
|
||||
usn integer not null,
|
||||
tags text not null,
|
||||
|
|
|
@ -185,7 +185,7 @@ select id, nid, did, ord, mod, %d, type, queue, due, ivl, factor, reps,
|
|||
lapses, left, odue, odid, flags, data from cards where %s""" % d)
|
||||
else:
|
||||
return x("""
|
||||
select id, guid, mid, did, mod, %d, tags, flds, '', '', flags, data
|
||||
select id, guid, mid, mod, %d, tags, flds, '', '', flags, data
|
||||
from notes where %s""" % d)
|
||||
|
||||
def chunk(self):
|
||||
|
@ -369,7 +369,7 @@ from notes where %s""" % d)
|
|||
def mergeNotes(self, notes):
|
||||
rows = self.newerRows(notes, "notes", 4)
|
||||
self.col.db.executemany(
|
||||
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?,?)",
|
||||
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)",
|
||||
rows)
|
||||
self.col.updateFieldCache([f[0] for f in rows])
|
||||
|
||||
|
|
|
@ -149,7 +149,7 @@ end)
|
|||
""")
|
||||
# pull facts into memory, so we can merge them with fields efficiently
|
||||
facts = db.all("""
|
||||
select id, id, modelId, 1, cast(created*1000 as int), cast(modified as int),
|
||||
select id, id, modelId, cast(created*1000 as int), cast(modified as int),
|
||||
0, tags from facts order by created""")
|
||||
# build field hash
|
||||
fields = {}
|
||||
|
@ -185,7 +185,7 @@ select id, id, modelId, 1, cast(created*1000 as int), cast(modified as int),
|
|||
# and put the facts into the new table
|
||||
db.execute("drop table facts")
|
||||
_addSchema(db, False)
|
||||
db.executemany("insert into notes values (?,?,?,?,?,?,?,?,'','',0,'')", data)
|
||||
db.executemany("insert into notes values (?,?,?,?,?,?,?,'','',0,'')", data)
|
||||
db.execute("drop table fields")
|
||||
|
||||
# cards
|
||||
|
|
|
@ -39,7 +39,7 @@ def test_remove():
|
|||
g1 = deck.decks.id("g1")
|
||||
f = deck.newNote()
|
||||
f['Front'] = u"1"
|
||||
f.did = g1
|
||||
f.model()['did'] = g1
|
||||
deck.addNote(f)
|
||||
c = f.cards()[0]
|
||||
assert c.did == g1
|
||||
|
|
|
@ -20,7 +20,7 @@ def setup1():
|
|||
# with a different deck
|
||||
f = deck.newNote()
|
||||
f['Front'] = u"baz"; f['Back'] = u"qux"
|
||||
f.did = deck.decks.id("new deck")
|
||||
f.model()['did'] = deck.decks.id("new deck")
|
||||
deck.addNote(f)
|
||||
|
||||
##########################################################################
|
||||
|
|
|
@ -61,7 +61,7 @@ def test_newLimits():
|
|||
f = d.newNote()
|
||||
f['Front'] = str(i)
|
||||
if i > 4:
|
||||
f.did = g2
|
||||
f.model()['did'] = g2
|
||||
d.addNote(f)
|
||||
# give the child deck a different configuration
|
||||
c2 = d.decks.confId("new conf")
|
||||
|
@ -716,7 +716,7 @@ def test_deckDue():
|
|||
# and one that's a child
|
||||
f = d.newNote()
|
||||
f['Front'] = u"two"
|
||||
default1 = f.did = d.decks.id("Default::1")
|
||||
default1 = f.model()['did'] = d.decks.id("Default::1")
|
||||
d.addNote(f)
|
||||
# make it a review card
|
||||
c = f.cards()[0]
|
||||
|
@ -726,12 +726,12 @@ def test_deckDue():
|
|||
# add one more with a new deck
|
||||
f = d.newNote()
|
||||
f['Front'] = u"two"
|
||||
foobar = f.did = d.decks.id("foo::bar")
|
||||
foobar = f.model()['did'] = d.decks.id("foo::bar")
|
||||
d.addNote(f)
|
||||
# and one that's a sibling
|
||||
f = d.newNote()
|
||||
f['Front'] = u"three"
|
||||
foobaz = f.did = d.decks.id("foo::baz")
|
||||
foobaz = f.model()['did'] = d.decks.id("foo::baz")
|
||||
d.addNote(f)
|
||||
d.reset()
|
||||
assert len(d.decks.decks) == 5
|
||||
|
@ -775,12 +775,12 @@ def test_deckFlow():
|
|||
# and one that's a child
|
||||
f = d.newNote()
|
||||
f['Front'] = u"two"
|
||||
default1 = f.did = d.decks.id("Default::2")
|
||||
default1 = f.model()['did'] = d.decks.id("Default::2")
|
||||
d.addNote(f)
|
||||
# and another that's higher up
|
||||
f = d.newNote()
|
||||
f['Front'] = u"three"
|
||||
default1 = f.did = d.decks.id("Default::1")
|
||||
default1 = f.model()['did'] = d.decks.id("Default::1")
|
||||
d.addNote(f)
|
||||
# should get top level one first, then ::1, then ::2
|
||||
d.reset()
|
||||
|
|
Loading…
Reference in a new issue