From 07499dd890483e4d4bdadf0f4c3e3d491848806d Mon Sep 17 00:00:00 2001 From: RumovZ Date: Wed, 6 Jan 2021 18:32:29 +0100 Subject: [PATCH] Implement search replacing via Ctrl+Shift combo Also switch to using the new backend functions for concatenating and negating searches. --- qt/aqt/browser.py | 26 ++++++++++++++------------ rslib/src/backend/mod.rs | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 0771e7915..5bfd07c93 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -20,7 +20,7 @@ from anki.consts import * from anki.lang import without_unicode_isolation from anki.models import NoteType from anki.notes import Note -from anki.rsbackend import TR, DeckTreeNode, InvalidInput +from anki.rsbackend import TR, DeckTreeNode, InvalidInput, pb from anki.stats import CardStats from anki.utils import htmlToTextLine, ids2str, isMac, isWin from aqt import AnkiQt, gui_hooks @@ -1219,17 +1219,19 @@ QTableView {{ gridline-color: {grid} }} items.append(txt) txt = "" txt = " AND ".join(items) - # is there something to replace or append with? - if txt: - if self.mw.app.keyboardModifiers() & Qt.AltModifier: - txt = "-" + txt - # is there something to replace or append to? - cur = str(self.form.searchEdit.lineEdit().text()) - if cur and cur != self._searchPrompt: - if self.mw.app.keyboardModifiers() & Qt.ControlModifier: - txt = cur + " AND " + txt - elif self.mw.app.keyboardModifiers() & Qt.ShiftModifier: - txt = cur + " OR " + txt + if self.mw.app.keyboardModifiers() & Qt.AltModifier: + txt = self.col.backend.negate_search(txt) + cur = str(self.form.searchEdit.lineEdit().text()) + if cur != self._searchPrompt: + mods = self.mw.app.keyboardModifiers() + if mods & Qt.ControlModifier and mods & Qt.ShiftModifier: + txt = self.col.backend.replace_search_term(search=cur, replacement=txt) + elif mods & Qt.ControlModifier: + and_sep = pb.ConcatenateSearchesIn.Separator.AND + txt = self.col.backend.concatenate_searches(sep=and_sep, searches=[cur, txt]) + elif mods & Qt.ShiftModifier: + or_sep = pb.ConcatenateSearchesIn.Separator.OR + txt = self.col.backend.concatenate_searches(sep=or_sep, searches=[cur, txt]) self.form.searchEdit.lineEdit().setText(txt) self.onSearchActivated() diff --git a/rslib/src/backend/mod.rs b/rslib/src/backend/mod.rs index 485666f88..0762ee2ce 100644 --- a/rslib/src/backend/mod.rs +++ b/rslib/src/backend/mod.rs @@ -435,7 +435,7 @@ impl BackendService for Backend { fn negate_search(&self, input: pb::String) -> Result { Ok(negate_search(&input.val)?.into()) } - + fn concatenate_searches(&self, input: pb::ConcatenateSearchesIn) -> Result { Ok(concatenate_searches(input.sep, &input.searches)?.into()) }