Make browser accept optional args and add reopen

That way, the caller doesn't have to hold a reference to the browser and
explicitly call it again, if it wants to search for something specific.
Also, if the browser was closed and opened for a single-card-search, it
now won't perform a redundant current-deck-search first.
This commit is contained in:
RumovZ 2021-02-01 11:54:28 +01:00
parent d2024d1d1e
commit 6de6e5f339
6 changed files with 55 additions and 31 deletions

View file

@ -162,7 +162,7 @@ class AddCards(QDialog):
m.exec_(self.historyButton.mapToGlobal(QPoint(0, 0))) m.exec_(self.historyButton.mapToGlobal(QPoint(0, 0)))
def editHistory(self, nid): def editHistory(self, nid):
self.mw.browser_search(SearchTerm(nid=nid)) aqt.dialogs.open("Browser", self.mw, search=(SearchTerm(nid=nid),))
def addNote(self, note) -> Optional[Note]: def addNote(self, note) -> Optional[Note]:
note.model()["did"] = self.deckChooser.selectedId() note.model()["did"] = self.deckChooser.selectedId()

View file

@ -437,7 +437,12 @@ class Browser(QMainWindow):
col: Collection col: Collection
editor: Optional[Editor] editor: Optional[Editor]
def __init__(self, mw: AnkiQt) -> None: def __init__(
self,
mw: AnkiQt,
card: Optional[Card] = None,
search: Optional[Tuple[Union[str, SearchTerm]]] = None,
) -> None:
QMainWindow.__init__(self, None, Qt.Window) QMainWindow.__init__(self, None, Qt.Window)
self.mw = mw self.mw = mw
self.col = self.mw.col self.col = self.mw.col
@ -461,7 +466,7 @@ class Browser(QMainWindow):
self.setupEditor() self.setupEditor()
self.updateFont() self.updateFont()
self.onUndoState(self.mw.form.actionUndo.isEnabled()) self.onUndoState(self.mw.form.actionUndo.isEnabled())
self.setupSearch() self.setupSearch(card, search)
gui_hooks.browser_will_show(self) gui_hooks.browser_will_show(self)
self.show() self.show()
@ -600,17 +605,41 @@ class Browser(QMainWindow):
] ]
self.columns.sort(key=itemgetter(1)) self.columns.sort(key=itemgetter(1))
def reopen(
self,
_mw: AnkiQt,
card: Optional[Card] = None,
search: Optional[Tuple[Union[str, SearchTerm]]] = None,
) -> None:
if search is not None:
self.search_for_terms(*search)
self.form.searchEdit.setFocus()
elif card:
self.show_single_card(card)
self.form.searchEdit.setFocus()
# Searching # Searching
###################################################################### ######################################################################
def setupSearch(self): def setupSearch(
self,
card: Optional[Card] = None,
search: Optional[Tuple[Union[str, SearchTerm]]] = None,
):
qconnect(self.form.searchEdit.lineEdit().returnPressed, self.onSearchActivated) qconnect(self.form.searchEdit.lineEdit().returnPressed, self.onSearchActivated)
self.form.searchEdit.setCompleter(None) self.form.searchEdit.setCompleter(None)
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.mw.pm.profile["searchHistory"]) self.form.searchEdit.addItems(self.mw.pm.profile["searchHistory"])
self.search_for(self.col.build_search_string(SearchTerm(deck="current")), "") if search is not None:
self.search_for_terms(*search)
elif card:
self.show_single_card(card)
else:
self.search_for(
self.col.build_search_string(SearchTerm(deck="current")), ""
)
self.form.searchEdit.setFocus() self.form.searchEdit.setFocus()
# search triggered by user # search triggered by user
@ -669,15 +698,17 @@ class Browser(QMainWindow):
) )
return selected return selected
def show_single_card(self, card: Optional[Card]): def search_for_terms(self, *search_terms: Union[str, SearchTerm]):
"""Try to search for the according note and select the given card.""" search = self.col.build_search_string(*search_terms)
self.form.searchEdit.setEditText(search)
self.onSearchActivated()
nid: Optional[int] = card and card.nid or 0 def show_single_card(self, card: Card):
if nid: if card.nid:
def on_show_single_card(): def on_show_single_card():
self.card = card self.card = card
search = self.col.build_search_string(SearchTerm(nid=nid)) search = self.col.build_search_string(SearchTerm(nid=card.nid))
search = gui_hooks.default_search(search, card) search = gui_hooks.default_search(search, card)
self.search_for(search, "") self.search_for(search, "")
self.focusCid(card.id) self.focusCid(card.id)

View file

@ -538,11 +538,16 @@ class Editor:
self.web.eval("setBackgrounds(%s);" % json.dumps(cols)) self.web.eval("setBackgrounds(%s);" % json.dumps(cols))
def showDupes(self): def showDupes(self):
self.mw.browser_search( aqt.dialogs.open(
SearchTerm( "Browser",
dupe=SearchTerm.Dupe( self.mw,
notetype_id=self.note.model()["id"], first_field=self.note.fields[0] search=(
) SearchTerm(
dupe=SearchTerm.Dupe(
notetype_id=self.note.model()["id"],
first_field=self.note.fields[0],
)
),
) )
) )

View file

@ -66,7 +66,7 @@ class EmptyCardsDialog(QDialog):
self._delete_button.clicked.connect(self._on_delete) self._delete_button.clicked.connect(self._on_delete)
def _on_note_link_clicked(self, link): def _on_note_link_clicked(self, link):
self.mw.browser_search(link) aqt.dialogs.open("Browser", self.mw, search=(link,))
def _on_delete(self): def _on_delete(self):
self.mw.progress.start() self.mw.progress.start()

View file

@ -27,7 +27,7 @@ import aqt.toolbar
import aqt.webview import aqt.webview
from anki import hooks from anki import hooks
from anki._backend import RustBackend as _RustBackend from anki._backend import RustBackend as _RustBackend
from anki.collection import Collection, SearchTerm from anki.collection import Collection
from anki.decks import Deck from anki.decks import Deck
from anki.hooks import runHook from anki.hooks import runHook
from anki.sound import AVTag, SoundOrVideoTag from anki.sound import AVTag, SoundOrVideoTag
@ -1044,8 +1044,7 @@ title="%s" %s>%s</button>""" % (
aqt.dialogs.open("AddCards", self) aqt.dialogs.open("AddCards", self)
def onBrowse(self) -> None: def onBrowse(self) -> None:
browser = aqt.dialogs.open("Browser", self) aqt.dialogs.open("Browser", self, card=self.reviewer.card)
browser.show_single_card(self.reviewer.card)
def onEditCurrent(self): def onEditCurrent(self):
aqt.dialogs.open("EditCurrent", self) aqt.dialogs.open("EditCurrent", self)
@ -1598,14 +1597,3 @@ title="%s" %s>%s</button>""" % (
def serverURL(self) -> str: def serverURL(self) -> str:
return "http://127.0.0.1:%d/" % self.mediaServer.getPort() return "http://127.0.0.1:%d/" % self.mediaServer.getPort()
# Helpers for all windows
##########################################################################
def browser_search(self, *terms: Union[str, SearchTerm]) -> None:
"""Wrapper for col.build_search_string() to look up the result in the browser."""
search = self.col.build_search_string(*terms)
browser = aqt.dialogs.open("Browser", self)
browser.form.searchEdit.lineEdit().setText(search)
browser.onSearchActivated()

View file

@ -148,7 +148,7 @@ class MediaChecker:
if out is not None: if out is not None:
nid, err = out nid, err = out
self.mw.browser_search(SearchTerm(nid=nid)) aqt.dialogs.open("Browser", self.mw, search=(SearchTerm(nid=nid),))
showText(err, type="html") showText(err, type="html")
else: else:
tooltip(tr(TR.MEDIA_CHECK_ALL_LATEX_RENDERED)) tooltip(tr(TR.MEDIA_CHECK_ALL_LATEX_RENDERED))