Merge pull request #133 from toasted-nutbread/fix-note-duplicate-check

Ignore duplicates which are not in the target deck
This commit is contained in:
Alex Yatskov 2020-02-04 10:02:48 -08:00 committed by GitHub
commit 08109dafbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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