From 7ccfa7938e68b85fcb7c4b2d370db003aa829e0f Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 2 Feb 2020 16:45:05 -0500 Subject: [PATCH] Ignore duplicates which are not in the target deck --- plugin/__init__.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/plugin/__init__.py b/plugin/__init__.py index 3dfa756..c8a18ff 100644 --- a/plugin/__init__.py +++ b/plugin/__init__.py @@ -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