fix duplicate search in browser (#855)

This commit is contained in:
Damien Elmes 2013-05-16 14:17:07 +09:00
parent 254a2ecad6
commit 3f6266a712
2 changed files with 20 additions and 5 deletions

View file

@ -3,7 +3,7 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import re import re
from anki.utils import ids2str, splitFields, joinFields, intTime from anki.utils import ids2str, splitFields, joinFields, intTime, fieldChecksum, stripHTMLMedia
from anki.consts import * from anki.consts import *
import sre_constants 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)) add(self._findRated(val))
elif cmd == "added": elif cmd == "added":
add(self._findAdded(val)) add(self._findAdded(val))
elif cmd == "dupe":
add(self._findDupes(val))
else: else:
add(self._findField(cmd, val)) add(self._findField(cmd, val))
# normal text search # normal text search
@ -432,6 +434,21 @@ where mid in %s and flds like ? escape '\\'""" % (
return "0" return "0"
return "n.id in %s" % ids2str(nids) 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 # Find and replace
########################################################################## ##########################################################################

View file

@ -613,10 +613,8 @@ class Editor(object):
contents = stripHTMLMedia(self.note.fields[0]) contents = stripHTMLMedia(self.note.fields[0])
browser = aqt.dialogs.open("Browser", self.mw) browser = aqt.dialogs.open("Browser", self.mw)
browser.form.searchEdit.lineEdit().setText( browser.form.searchEdit.lineEdit().setText(
"'note:%s' '%s:%s'" % ( '"dupe:%s,%s"' % (self.note.model()['id'],
self.note.model()['name'], contents))
self.note.model()['flds'][0]['name'],
contents))
browser.onSearch() browser.onSearch()
def fieldsAreBlank(self): def fieldsAreBlank(self):