From 3f6266a7123b23f14a593d34e0cc3287e10e689f Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 16 May 2013 14:17:07 +0900 Subject: [PATCH] fix duplicate search in browser (#855) --- anki/find.py | 19 ++++++++++++++++++- aqt/editor.py | 6 ++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/anki/find.py b/anki/find.py index 1daf4d3f7..e4700a5e5 100644 --- a/anki/find.py +++ b/anki/find.py @@ -3,7 +3,7 @@ # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re -from anki.utils import ids2str, splitFields, joinFields, intTime +from anki.utils import ids2str, splitFields, joinFields, intTime, fieldChecksum, stripHTMLMedia from anki.consts import * import sre_constants @@ -174,6 +174,8 @@ select distinct(n.id) from cards c, notes n where c.nid=n.id and """+preds add(self._findRated(val)) elif cmd == "added": add(self._findAdded(val)) + elif cmd == "dupe": + add(self._findDupes(val)) else: add(self._findField(cmd, val)) # normal text search @@ -432,6 +434,21 @@ where mid in %s and flds like ? escape '\\'""" % ( return "0" return "n.id in %s" % ids2str(nids) + def _findDupes(self, val): + # caller must call stripHTMLMedia on passed val + try: + mid, val = val.split(",", 1) + except OSError: + return + csum = fieldChecksum(val) + nids = [] + for nid, flds in self.col.db.execute( + "select id, flds from notes where mid=? and csum=?", + mid, csum): + if stripHTMLMedia(splitFields(flds)[0]) == val: + nids.append(nid) + return "n.id in %s" % ids2str(nids) + # Find and replace ########################################################################## diff --git a/aqt/editor.py b/aqt/editor.py index 0ecc00146..a4ac40417 100644 --- a/aqt/editor.py +++ b/aqt/editor.py @@ -613,10 +613,8 @@ class Editor(object): contents = stripHTMLMedia(self.note.fields[0]) browser = aqt.dialogs.open("Browser", self.mw) browser.form.searchEdit.lineEdit().setText( - "'note:%s' '%s:%s'" % ( - self.note.model()['name'], - self.note.model()['flds'][0]['name'], - contents)) + '"dupe:%s,%s"' % (self.note.model()['id'], + contents)) browser.onSearch() def fieldsAreBlank(self):