~foosoft/anki-connect

7ccfa7938e68b85fcb7c4b2d370db003aa829e0f — toasted-nutbread 5 years ago 0b66f6a
Ignore duplicates which are not in the target deck
1 files changed, 27 insertions(+), 1 deletions(-)

M plugin/__init__.py
M plugin/__init__.py => plugin/__init__.py +27 -1
@@ 207,7 207,7 @@ class AnkiConnect:
            if type(allowDuplicate) is not bool:
              raise Exception('option parameter \'allowDuplicate\' must be boolean')

        duplicateOrEmpty = ankiNote.dupeOrEmpty()
        duplicateOrEmpty = self.isNoteDuplicateOrEmptyInDeck(ankiNote, deck)
        if duplicateOrEmpty == 1:
            raise Exception('cannot create note because it is empty')
        elif duplicateOrEmpty == 2:


@@ 220,6 220,32 @@ class AnkiConnect:
        else:
            raise Exception('cannot create note for unknown reason')

    def isNoteDuplicateOrEmptyInDeck(self, note, deck):
        "1 if first is empty; 2 if first is a duplicate, False otherwise."
        result = note.dupeOrEmpty()
        if result != 2:
            return result

        # dupeOrEmpty returns if a note is a global duplicate
        # the rest of the function checks to see if the note is a duplicate in the deck
        val = note.fields[0].strip()
        did = deck['id']
        csum = anki.utils.fieldChecksum(val)

        for noteId in note.col.db.list(
            "select id from notes where csum = ? and id != ? and mid = ?",
            csum,
            note.id or 0,
            note.mid,
        ):
            if note.col.db.scalar(
                "select id from cards where nid = ? and did = ?",
                noteId,
                did
            ):
                return 2
        return False


    #
    # Miscellaneous

Do not follow this link