mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
New model can be edited without full sync
This commit solves a problem that I had many time in the past. When I create a new model, I usually want to edit it. Clone of existing models present no interest by themselves. And as soon as I edit it, I need to do a full sync. As far as I understand ankiweb (which is sadly closed source), the full sync is required because ankiweb needs to know that the model associated to note type on the server did change. But since the model is new, it has no note type associated to on the server, so there is no need to do a full sync immediatly. Since the model is new, it also means there is no risk of the inconsistency with a change made in another computer/smartphone. Thus, when a field/template is added, I check that the model is not new by checking both whether it's id is not null, and also that it's usn is not -1. (I set usn early in the model's life) If it does not make into anki, then it'll be an add-on. But it's worth a try first.
This commit is contained in:
parent
fed2f2fa3d
commit
b78480fe52
1 changed files with 8 additions and 5 deletions
|
@ -150,6 +150,7 @@ class ModelManager:
|
|||
m['tmpls'] = []
|
||||
m['tags'] = []
|
||||
m['id'] = None
|
||||
m['usn'] = self.col.usn()
|
||||
return m
|
||||
|
||||
def rem(self, m):
|
||||
|
@ -225,6 +226,7 @@ and notes.mid = ? and cards.ord = ?""", m['id'], ord)
|
|||
m2 = copy.deepcopy(m)
|
||||
m2['name'] = _("%s copy") % m2['name']
|
||||
self.add(m2)
|
||||
m['usn'] = self.col.usn()
|
||||
return m2
|
||||
|
||||
# Fields
|
||||
|
@ -253,9 +255,7 @@ and notes.mid = ? and cards.ord = ?""", m['id'], ord)
|
|||
self.save(m)
|
||||
|
||||
def addField(self, m, field):
|
||||
# only mod schema if model isn't new
|
||||
if m['id']:
|
||||
self.col.modSchema(check=True)
|
||||
self._modSchemaIfRequired(m)
|
||||
m['flds'].append(field)
|
||||
self._updateFieldOrds(m)
|
||||
self.save(m)
|
||||
|
@ -352,8 +352,7 @@ and notes.mid = ? and cards.ord = ?""", m['id'], ord)
|
|||
|
||||
def addTemplate(self, m, template):
|
||||
"Note: should col.genCards() afterwards."
|
||||
if m['id']:
|
||||
self.col.modSchema(check=True)
|
||||
self._modSchemaIfRequired(m)
|
||||
m['tmpls'].append(template)
|
||||
self._updateTemplOrds(m)
|
||||
self.save(m)
|
||||
|
@ -474,6 +473,10 @@ select id from notes where mid = ?)""" % " ".join(map),
|
|||
d)
|
||||
self.col.remCards(deleted)
|
||||
|
||||
def _modSchemaIfRequired(self, m):
|
||||
if m['id'] and m["usn"] != -1:
|
||||
self.col.modSchema(check=True)
|
||||
|
||||
# Schema hash
|
||||
##########################################################################
|
||||
|
||||
|
|
Loading…
Reference in a new issue