mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
use the original id if available when importing
This commit is contained in:
parent
20c1799be5
commit
478e4c9212
2 changed files with 14 additions and 15 deletions
|
@ -59,9 +59,11 @@ class Anki2Importer(Importer):
|
||||||
def _importNotes(self):
|
def _importNotes(self):
|
||||||
# build guid -> (id,mod,mid) hash
|
# build guid -> (id,mod,mid) hash
|
||||||
self._notes = {}
|
self._notes = {}
|
||||||
|
existing = {}
|
||||||
for id, guid, mod, mid in self.dst.db.execute(
|
for id, guid, mod, mid in self.dst.db.execute(
|
||||||
"select id, guid, mod, mid from notes"):
|
"select id, guid, mod, mid from notes"):
|
||||||
self._notes[guid] = (id, mod, mid)
|
self._notes[guid] = (id, mod, mid)
|
||||||
|
existing[id] = True
|
||||||
# iterate over source collection
|
# iterate over source collection
|
||||||
add = []
|
add = []
|
||||||
dirty = []
|
dirty = []
|
||||||
|
@ -74,8 +76,11 @@ class Anki2Importer(Importer):
|
||||||
if guid not in self._notes:
|
if guid not in self._notes:
|
||||||
# get corresponding local model
|
# get corresponding local model
|
||||||
lmid = self._mid(mid)
|
lmid = self._mid(mid)
|
||||||
|
# ensure id is unique
|
||||||
|
while note[0] in existing:
|
||||||
|
note[0] += 999
|
||||||
|
existing[note[0]] = True
|
||||||
# rewrite internal ids, models, etc
|
# rewrite internal ids, models, etc
|
||||||
note[0] = self.ts()
|
|
||||||
note[2] = lmid
|
note[2] = lmid
|
||||||
note[3] = self._did(note[3])
|
note[3] = self._did(note[3])
|
||||||
note[4] = intTime()
|
note[4] = intTime()
|
||||||
|
@ -85,7 +90,7 @@ class Anki2Importer(Importer):
|
||||||
# note we have the added note
|
# note we have the added note
|
||||||
self._notes[guid] = (note[0], note[4], note[2])
|
self._notes[guid] = (note[0], note[4], note[2])
|
||||||
else:
|
else:
|
||||||
continue #raise Exception("merging notes nyi")
|
print "merging notes nyi"
|
||||||
# add to col
|
# add to col
|
||||||
self.dst.db.executemany(
|
self.dst.db.executemany(
|
||||||
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?,?)",
|
"insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?,?)",
|
||||||
|
@ -166,16 +171,17 @@ class Anki2Importer(Importer):
|
||||||
def _importCards(self):
|
def _importCards(self):
|
||||||
if not self.needCards:
|
if not self.needCards:
|
||||||
return
|
return
|
||||||
# build map of (guid, ord) -> cid
|
# build map of (guid, ord) -> cid and used id cache
|
||||||
self._cards = {}
|
self._cards = {}
|
||||||
|
existing = {}
|
||||||
for guid, ord, cid in self.dst.db.execute(
|
for guid, ord, cid in self.dst.db.execute(
|
||||||
"select f.guid, c.ord, c.id from cards c, notes f "
|
"select f.guid, c.ord, c.id from cards c, notes f "
|
||||||
"where c.nid = f.id"):
|
"where c.nid = f.id"):
|
||||||
|
existing[cid] = True
|
||||||
self._cards[(guid, ord)] = cid
|
self._cards[(guid, ord)] = cid
|
||||||
# loop through src
|
# loop through src
|
||||||
cards = []
|
cards = []
|
||||||
revlog = []
|
revlog = []
|
||||||
print "fixme: need to check schema issues in card import"
|
|
||||||
cnt = 0
|
cnt = 0
|
||||||
for card in self.src.db.execute(
|
for card in self.src.db.execute(
|
||||||
"select f.guid, f.mid, c.* from cards c, notes f "
|
"select f.guid, f.mid, c.* from cards c, notes f "
|
||||||
|
@ -185,11 +191,6 @@ class Anki2Importer(Importer):
|
||||||
if guid not in self._notes:
|
if guid not in self._notes:
|
||||||
continue
|
continue
|
||||||
dnid = self._notes[guid]
|
dnid = self._notes[guid]
|
||||||
# does the note share the same schema?
|
|
||||||
# shash = self._srcModels[card[1]]
|
|
||||||
# mid = self._notes[guid][2]
|
|
||||||
# if shash != self._dstModels[mid]:
|
|
||||||
# continue
|
|
||||||
# does the card already exist in the dst col?
|
# does the card already exist in the dst col?
|
||||||
ord = card[5]
|
ord = card[5]
|
||||||
if (guid, ord) in self._cards:
|
if (guid, ord) in self._cards:
|
||||||
|
@ -198,8 +199,11 @@ class Anki2Importer(Importer):
|
||||||
# doesn't exist. strip off note info, and save src id for later
|
# doesn't exist. strip off note info, and save src id for later
|
||||||
card = list(card[2:])
|
card = list(card[2:])
|
||||||
scid = card[0]
|
scid = card[0]
|
||||||
|
# ensure the card id is unique
|
||||||
|
while card[0] in existing:
|
||||||
|
card[0] += 999
|
||||||
|
existing[card[0]] = True
|
||||||
# update cid, nid, etc
|
# update cid, nid, etc
|
||||||
card[0] = self.ts()
|
|
||||||
card[1] = self._notes[guid][0]
|
card[1] = self._notes[guid][0]
|
||||||
card[2] = self._did(card[2])
|
card[2] = self._did(card[2])
|
||||||
card[4] = intTime()
|
card[4] = intTime()
|
||||||
|
|
|
@ -548,11 +548,6 @@ where did in %s """ % self._limit())
|
||||||
self._line(i, _("Lowest ease factor"), "%d%%" % low)
|
self._line(i, _("Lowest ease factor"), "%d%%" % low)
|
||||||
self._line(i, _("Average ease factor"), "%d%%" % avg)
|
self._line(i, _("Average ease factor"), "%d%%" % avg)
|
||||||
self._line(i, _("Highest ease factor"), "%d%%" % high)
|
self._line(i, _("Highest ease factor"), "%d%%" % high)
|
||||||
min = self.col.db.scalar(
|
|
||||||
"select min(id) from cards where did in %s " % self._limit())
|
|
||||||
if min:
|
|
||||||
self._line(i, _("First card created"), _("%s ago") % fmtTimeSpan(
|
|
||||||
time.time() - (min/1000)))
|
|
||||||
info = "<table width=100%>" + "".join(i) + "</table><p>"
|
info = "<table width=100%>" + "".join(i) + "</table><p>"
|
||||||
info += _('''\
|
info += _('''\
|
||||||
A card's <i>ease factor</i> is the size of the next interval \
|
A card's <i>ease factor</i> is the size of the next interval \
|
||||||
|
|
Loading…
Reference in a new issue