Exemplo n.º 1
0
  def processDeckTransactions_FORK(self, data):
    orig_did = self.getDID(data["on"])
    # orig_deck = mw.col.decks.get(orig_did)
    new_did = mw.col.decks.id(data["data"]["name"])
    new_deck = mw.col.decks.get(new_did)

    for cid in mw.col.decks.cids(orig_did):
        card = mw.col.getCard(cid)
        note = card.note(reload=True)
        model = note.model()
        createNewModel = False # create new model?

        if createNewModel:
            new_model = mw.col.models.copy(model) # models.copy saves
        new_note = copy.deepcopy(note)
        new_note.col = note.col
        new_note.id = timestampID(mw.col.db, "notes")
        new_note.guid = guid64()
        if createNewModel:
            new_note._model = new_model
            new_note.mid = new_model['id']
        new_note.flush()
        new_card = copy.deepcopy(card)
        new_card.col = card.col
        new_card.id = timestampID(mw.col.db, "cards")
        new_card.crt = intTime()
        new_card.did = new_did
        new_card.nid = new_note.id
        new_card.flush()
    mw.col.decks.save(new_deck)
    mw.col.decks.flush()
Exemplo n.º 2
0
 def newData(self, n):
     id = self._nextID
     self._nextID += 1
     self._ids.append(id)
     if not self.processFields(n):
         return
     # note id for card updates later
     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'],
             intTime(), self.col.usn(), self.col.tags.join(n.tags),
             n.fieldsStr, "", "", 0, ""]
Exemplo n.º 3
0
 def __init__(self, col, model=None, id=None):
     assert not (model and id)
     self.col = col
     if id:
         self.id = id
         self.load()
     else:
         self.id = timestampID(col.db, "notes")
         self.guid = guid64()
         self._model = model
         self.mid = model['id']
         self.tags = []
         self.fields = [""] * len(self._model['flds'])
         self.flags = 0
         self.data = ""
         self._fmap = self.col.models.fieldMap(self._model)
         self.scm = self.col.scm
Exemplo n.º 4
0
 def newData(self, n: ForeignNote) -> Optional[list]:
     id = self._nextID
     self._nextID += 1
     self._ids.append(id)
     self.processFields(n)
     # note id for card updates later
     for ord, c in list(n.cards.items()):
         self._cards.append((id, ord, c))
     return [
         id,
         guid64(),
         self.model["id"],
         intTime(),
         self.col.usn(),
         self.col.tags.join(n.tags),
         n.fieldsStr,
         "",
         0,
         0,
         "",
     ]
Exemplo n.º 5
0
 def __init__(self,
              col,
              model: Optional[Any] = None,
              id: Optional[int] = None) -> None:
     assert not (model and id)
     self.col = col
     self.newlyAdded = False
     if id:
         self.id = id
         self.load()
     else:
         self.id = timestampID(col.db, "notes")
         self.guid = guid64()
         self._model = model
         self.mid = model['id']
         self.tags = []
         self.fields = [""] * len(self._model['flds'])
         self.flags = 0
         self.data = ""
         self._fmap = self.col.models.fieldMap(self._model)
         self.scm = self.col.scm
Exemplo n.º 6
0
 def __init__(
     self,
     col: anki.storage._Collection,
     model: Optional[NoteType] = None,
     id: Optional[int] = None,
 ) -> None:
     assert not (model and id)
     self.col = col
     self.newlyAdded = False
     if id:
         self.id = id
         self.load()
     else:
         self.id = timestampID(col.db, "notes")
         self.guid = guid64()
         self._model = model
         self.mid = model["id"]
         self.tags = []
         self.fields = [""] * len(self._model["flds"])
         self.flags = 0
         self.data = ""
         self._fmap = self.col.models.fieldMap(self._model)
         self.scm = self.col.scm
Exemplo n.º 7
0
 def newData(
     self, n: ForeignNote
 ) -> Tuple[NoteID, str, NoteTypeID, int, int, str, str, str, int, int, str]:
     id = self._nextID
     self._nextID = NoteID(self._nextID + 1)
     self._ids.append(id)
     self.processFields(n)
     # note id for card updates later
     for ord, c in list(n.cards.items()):
         self._cards.append((id, ord, c))
     return (
         id,
         guid64(),
         self.model["id"],
         intTime(),
         self.col.usn(),
         self.col.tags.join(n.tags),
         n.fieldsStr,
         "",
         0,
         0,
         "",
     )
Exemplo n.º 8
0
    def updateCompleteDeck(self, data):
        self.startEditing()
        did = self.decks().id(data['deck'])
        self.decks().flush()
        model_manager = self.collection().models
        for _, card in data['cards'].items():
            self.database().execute(
                'replace into cards (id, nid, did, ord, type, queue, due, ivl, factor, reps, lapses, left, '
                'mod, usn, odue, odid, flags, data) '
                'values (' + '?,' * (12 + 6 - 1) + '?)',
                card['id'], card['nid'], did, card['ord'], card['type'], card['queue'], card['due'],
                card['ivl'], card['factor'], card['reps'], card['lapses'], card['left'],
                intTime(), -1, 0, 0, 0, 0
            )
            note = data['notes'][str(card['nid'])]
            tags = self.collection().tags.join(self.collection().tags.canonify(note['tags']))
            self.database().execute(
                'replace into notes(id, mid, tags, flds,'
                'guid, mod, usn, flags, data, sfld, csum) values (' + '?,' * (4 + 7 - 1) + '?)',
                note['id'], note['mid'], tags, joinFields(note['fields']),
                guid64(), intTime(), -1, 0, 0, '', fieldChecksum(note['fields'][0])
            )
            model = data['models'][str(note['mid'])]
            if not model_manager.get(model['id']):
                model_o = model_manager.new(model['name'])
                for field_name in model['fields']:
                    field = model_manager.newField(field_name)
                    model_manager.addField(model_o, field)
                for template_name in model['templateNames']:
                    template = model_manager.newTemplate(template_name)
                    model_manager.addTemplate(model_o, template)
                model_o['id'] = model['id']
                model_manager.update(model_o)
                model_manager.flush()

        self.stopEditing()
Exemplo n.º 9
0
    def updateCompleteDeck(self, data):
        self.startEditing()
        did = self.decks().id(data["deck"])
        self.decks().flush()
        model_manager = self.collection().models
        for _, card in data["cards"].items():
            self.database().execute(
                "replace into cards (id, nid, did, ord, type, queue, due, ivl, factor, reps, lapses, left, "
                "mod, usn, odue, odid, flags, data) "
                "values (" + "?," * (12 + 6 - 1) + "?)",
                card["id"], card["nid"], did, card["ord"], card["type"], card["queue"], card["due"],
                card["ivl"], card["factor"], card["reps"], card["lapses"], card["left"],
                intTime(), -1, 0, 0, 0, 0
            )
            note = data["notes"][str(card["nid"])]
            tags = self.collection().tags.join(self.collection().tags.canonify(note["tags"]))
            self.database().execute(
                "replace into notes(id, mid, tags, flds,"
                "guid, mod, usn, flags, data, sfld, csum) values (" + "?," * (4 + 7 - 1) + "?)",
                note["id"], note["mid"], tags, joinFields(note["fields"]),
                guid64(), intTime(), -1, 0, 0, "", fieldChecksum(note["fields"][0])
            )
            model = data["models"][str(note["mid"])]
            if not model_manager.get(model["id"]):
                model_o = model_manager.new(model["name"])
                for field_name in model["fields"]:
                    field = model_manager.newField(field_name)
                    model_manager.addField(model_o, field)
                for template_name in model["templateNames"]:
                    template = model_manager.newTemplate(template_name)
                    model_manager.addTemplate(model_o, template)
                model_o["id"] = model["id"]
                model_manager.update(model_o)
                model_manager.flush()

        self.stopEditing()