mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
Auto search and check input before model search
- Search for current deck automatically on browser setup. - Hide current deck and current card searches. - Check user search input before passing it on to the model, so invalid searches don't change TableView.
This commit is contained in:
parent
80a4a85510
commit
9c4cc88b47
1 changed files with 29 additions and 37 deletions
|
@ -190,8 +190,7 @@ class DataModel(QAbstractTableModel):
|
||||||
ctx = SearchContext(search=txt, browser=self.browser)
|
ctx = SearchContext(search=txt, browser=self.browser)
|
||||||
gui_hooks.browser_will_search(ctx)
|
gui_hooks.browser_will_search(ctx)
|
||||||
if ctx.card_ids is None:
|
if ctx.card_ids is None:
|
||||||
ctx.search = self.browser.normalize_search(ctx.search)
|
ctx.card_ids = list(self.col.find_cards(ctx.search, order=ctx.order))
|
||||||
ctx.card_ids = self.col.find_cards(ctx.search, order=ctx.order)
|
|
||||||
gui_hooks.browser_did_search(ctx)
|
gui_hooks.browser_did_search(ctx)
|
||||||
self.cards = ctx.card_ids
|
self.cards = ctx.card_ids
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
|
@ -610,12 +609,8 @@ class Browser(QMainWindow):
|
||||||
self.form.searchEdit.lineEdit().setPlaceholderText(
|
self.form.searchEdit.lineEdit().setPlaceholderText(
|
||||||
tr(TR.BROWSING_SEARCH_BAR_HINT)
|
tr(TR.BROWSING_SEARCH_BAR_HINT)
|
||||||
)
|
)
|
||||||
self.form.searchEdit.addItems(
|
self.form.searchEdit.addItems(self.mw.pm.profile["searchHistory"])
|
||||||
[self.col.build_search_string(SearchTerm(current_deck=True))]
|
self.search_for(self.col.build_search_string(SearchTerm(current_deck=True)), "")
|
||||||
+ self.mw.pm.profile["searchHistory"]
|
|
||||||
)
|
|
||||||
self._onRowChanged(None, None)
|
|
||||||
self.form.searchEdit.lineEdit().selectAll()
|
|
||||||
self.form.searchEdit.setFocus()
|
self.form.searchEdit.setFocus()
|
||||||
|
|
||||||
# search triggered by user
|
# search triggered by user
|
||||||
|
@ -624,32 +619,32 @@ class Browser(QMainWindow):
|
||||||
|
|
||||||
def _onSearchActivated(self):
|
def _onSearchActivated(self):
|
||||||
text = self.form.searchEdit.lineEdit().text()
|
text = self.form.searchEdit.lineEdit().text()
|
||||||
if self.search_for(text):
|
try:
|
||||||
# Only save successful searches.
|
normed = self.col.build_search_string(text)
|
||||||
|
except InvalidInput as err:
|
||||||
|
show_invalid_search_error(err)
|
||||||
|
else:
|
||||||
|
self.search_for(normed)
|
||||||
self.update_history()
|
self.update_history()
|
||||||
|
|
||||||
def search_for(self, search: str) -> bool:
|
def search_for(self, search: str, prompt: Optional[str] = None) -> bool:
|
||||||
# keep track of search string so that we reuse identical search when
|
# keep track of search string so that we reuse identical search when
|
||||||
# refreshing, rather than whatever is currently in the search field
|
# refreshing, rather than whatever is currently in the search field
|
||||||
self._lastSearchTxt = search
|
self._lastSearchTxt = search
|
||||||
self.form.searchEdit.lineEdit().setText(search)
|
prompt = search if prompt == None else prompt
|
||||||
return self.search()
|
self.form.searchEdit.lineEdit().setText(prompt)
|
||||||
|
self.search()
|
||||||
|
|
||||||
def search(self) -> bool:
|
def search(self):
|
||||||
"""Search triggered programmatically. Caller must have saved note first.
|
"""Search triggered programmatically. Caller must have saved note first."""
|
||||||
Return bool indicating success.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.model.search(self._lastSearchTxt)
|
self.model.search(self._lastSearchTxt)
|
||||||
except InvalidInput as err:
|
except Exception as err:
|
||||||
show_invalid_search_error(err)
|
show_invalid_search_error(err)
|
||||||
return False
|
if not self.model.cards:
|
||||||
else:
|
# no row change will fire
|
||||||
if not self.model.cards:
|
self._onRowChanged(None, None)
|
||||||
# no row change will fire
|
|
||||||
self._onRowChanged(None, None)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def update_history(self) -> None:
|
def update_history(self) -> None:
|
||||||
sh = self.mw.pm.profile["searchHistory"]
|
sh = self.mw.pm.profile["searchHistory"]
|
||||||
|
@ -661,12 +656,6 @@ class Browser(QMainWindow):
|
||||||
self.form.searchEdit.addItems(sh)
|
self.form.searchEdit.addItems(sh)
|
||||||
self.mw.pm.profile["searchHistory"] = sh
|
self.mw.pm.profile["searchHistory"] = sh
|
||||||
|
|
||||||
def normalize_search(self, search: str) -> str:
|
|
||||||
normed = self.col.build_search_string(search)
|
|
||||||
self._lastSearchTxt = normed
|
|
||||||
self.form.searchEdit.lineEdit().setText(normed)
|
|
||||||
return normed
|
|
||||||
|
|
||||||
def updateTitle(self):
|
def updateTitle(self):
|
||||||
selected = len(self.form.tableView.selectionModel().selectedRows())
|
selected = len(self.form.tableView.selectionModel().selectedRows())
|
||||||
cur = len(self.model.cards)
|
cur = len(self.model.cards)
|
||||||
|
@ -680,13 +669,15 @@ class Browser(QMainWindow):
|
||||||
def show_single_card(self, card: Optional[Card]) -> None:
|
def show_single_card(self, card: Optional[Card]) -> None:
|
||||||
nid = card and card.nid
|
nid = card and card.nid
|
||||||
if nid:
|
if nid:
|
||||||
self.card = card
|
|
||||||
search = self.col.build_search_string(SearchTerm(nid=nid))
|
def on_show_single_card():
|
||||||
search = gui_hooks.default_search(search, card)
|
self.card = card
|
||||||
self.form.searchEdit.lineEdit().setText(search)
|
search = self.col.build_search_string(SearchTerm(nid=nid))
|
||||||
self.onSearchActivated()
|
search = gui_hooks.default_search(search, card)
|
||||||
self.form.tableView.clearSelection()
|
self.search_for(search, "")
|
||||||
self.focusCid(card.id)
|
self.focusCid(card.id)
|
||||||
|
|
||||||
|
self.editor.saveNow(on_show_single_card)
|
||||||
|
|
||||||
def onReset(self):
|
def onReset(self):
|
||||||
self.sidebar.refresh()
|
self.sidebar.refresh()
|
||||||
|
@ -1836,6 +1827,7 @@ where id in %s"""
|
||||||
row = self.model.cards.index(cid)
|
row = self.model.cards.index(cid)
|
||||||
except:
|
except:
|
||||||
return
|
return
|
||||||
|
self.form.tableView.clearSelection()
|
||||||
self.form.tableView.selectRow(row)
|
self.form.tableView.selectRow(row)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue