def update_search(self, *terms: Union[str, SearchNode]) -> None: """Modify the current search string based on modifier keys, then refresh.""" mods = self.mw.app.keyboardModifiers() previous = SearchNode(parsable_text=self.browser.current_search()) current = self.mw.col.group_searches(*terms) # if Alt pressed, invert if mods & Qt.AltModifier: current = SearchNode(negated=current) try: if mods & Qt.ControlModifier and mods & Qt.ShiftModifier: # If Ctrl+Shift, replace searches nodes of the same type. search = self.col.replace_in_search_node(previous, current) elif mods & Qt.ControlModifier: # If Ctrl, AND with previous search = self.col.join_searches(previous, current, "AND") elif mods & Qt.ShiftModifier: # If Shift, OR with previous search = self.col.join_searches(previous, current, "OR") else: search = self.col.build_search_string(current) except InvalidInput as e: show_invalid_search_error(e) else: self.browser.search_for(search)
def _on_search_button(self, line: QLineEdit) -> None: try: search = self.mw.col.build_search_string(line.text()) except InvalidInput as err: line.setFocus() line.selectAll() show_invalid_search_error(err) else: aqt.dialogs.open("Browser", self.mw, search=(search, ))
def search(self) -> None: try: self.model.search(self._lastSearchTxt) except Exception as err: if(self._returnPressed): show_invalid_search_error(err) self._returnPressed = False if not self.model.cards: # no row change will fire self._onRowChanged(None, None)
def onSearchActivated(self) -> None: text = self.form.searchEdit.lineEdit().text() try: normed = self.col.build_search_string(text) except InvalidInput as err: if(self._returnPressed): show_invalid_search_error(err) self._returnPressed = False else: self.search_for(normed) self.update_history()
def accept(self): try: self.saveConf() except InvalidInput as err: show_invalid_search_error(err) return if not self.mw.col.sched.rebuild_filtered_deck(self.deck["id"]): if askUser(tr(TR.DECKS_THE_PROVIDED_SEARCH_DID_NOT_MATCH)): return self.mw.reset() QDialog.accept(self)
def save_current_search(self, _item: Any = None) -> None: try: filt = self.col.build_search_string( self.browser.form.searchEdit.lineEdit().text()) except InvalidInput as e: show_invalid_search_error(e) else: name = getOnlyText(tr(TR.BROWSING_PLEASE_GIVE_YOUR_FILTER_A_NAME)) if not name: return conf = self._get_saved_searches() conf[name] = filt self._set_saved_searches(conf) self.refresh()
def accept(self) -> None: try: self.saveConf() except InvalidInput as err: show_invalid_search_error(err) except DeckRenameError as err: showWarning(err.description) else: if not self.mw.col.sched.rebuild_filtered_deck(self.deck["id"]): if askUser(tr(TR.DECKS_THE_PROVIDED_SEARCH_DID_NOT_MATCH)): return saveGeom(self, "dyndeckconf") self.mw.reset() QDialog.accept(self) aqt.dialogs.markClosed("DynDeckConfDialog")
def save_current_search(self) -> None: try: filt = self.col.build_search_string( self.browser.form.searchEdit.lineEdit().text()) except InvalidInput as e: show_invalid_search_error(e) return name = getOnlyText(tr(TR.BROWSING_PLEASE_GIVE_YOUR_FILTER_A_NAME)) if not name: return conf = self._get_saved_searches() if name in conf and not askUser( tr(TR.BROWSING_CONFIRM_SAVED_SEARCH_OVERWRITE, name=name)): return conf[name] = filt self._set_saved_searches(conf) self.refresh(lambda item: item.item_type == SidebarItemType. SAVED_SEARCH and item.name == name)
def update_search(self, *terms: Union[str, SearchTerm]) -> None: """Modify the current search string based on modified keys, then refresh.""" try: search = self.col.build_search_string(*terms) mods = self.mw.app.keyboardModifiers() if mods & Qt.AltModifier: search = self.col.build_search_string(search, negate=True) current = self.browser.current_search() if mods & Qt.ControlModifier and mods & Qt.ShiftModifier: search = self.col.replace_search_term(current, search) elif mods & Qt.ControlModifier: search = self.col.build_search_string(current, search) elif mods & Qt.ShiftModifier: search = self.col.build_search_string(current, search, match_any=True) except InvalidInput as e: show_invalid_search_error(e) else: self.browser.search_for(search)
def on_hint_button(self) -> None: """Open the browser to show cards that match the typed-in filters but cannot be included due to internal limitations. """ manual_filters = (self.form.search.text(), *self._second_filter()) implicit_filters = ( SearchNode(card_state=SearchNode.CARD_STATE_SUSPENDED), SearchNode(card_state=SearchNode.CARD_STATE_BURIED), *self._learning_search_node(), *self._filtered_search_node(), ) manual_filter = self.col.group_searches(*manual_filters, joiner="OR") implicit_filter = self.col.group_searches(*implicit_filters, joiner="OR") try: search = self.col.build_search_string(manual_filter, implicit_filter) except InvalidInput as err: show_invalid_search_error(err) else: aqt.dialogs.open("Browser", self.mw, search=(search, ))