mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
fix duplicate search in browser (#855)
This commit is contained in:
parent
254a2ecad6
commit
3f6266a712
2 changed files with 20 additions and 5 deletions
19
anki/find.py
19
anki/find.py
|
@ -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
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue