remove _hook/_filter suffix

This commit is contained in:
Damien Elmes 2020-01-15 16:53:24 +10:00
parent b2f756f1b7
commit cab572b63c
34 changed files with 188 additions and 190 deletions

View file

@ -87,7 +87,7 @@ class Card:
self.usn = self.col.usn() self.usn = self.col.usn()
# bug check # bug check
if self.queue == 2 and self.odue and not self.col.decks.isDyn(self.did): if self.queue == 2 and self.odue and not self.col.decks.isDyn(self.did):
hooks.card_odue_was_invalid_hook() hooks.card_odue_was_invalid()
assert self.due < 4294967296 assert self.due < 4294967296
self.col.db.execute( self.col.db.execute(
""" """
@ -119,7 +119,7 @@ insert or replace into cards values
self.usn = self.col.usn() self.usn = self.col.usn()
# bug checks # bug checks
if self.queue == 2 and self.odue and not self.col.decks.isDyn(self.did): if self.queue == 2 and self.odue and not self.col.decks.isDyn(self.did):
hooks.card_odue_was_invalid_hook() hooks.card_odue_was_invalid()
assert self.due < 4294967296 assert self.due < 4294967296
self.col.db.execute( self.col.db.execute(
"""update cards set """update cards set

View file

@ -272,7 +272,7 @@ crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""",
def modSchema(self, check: bool) -> None: def modSchema(self, check: bool) -> None:
"Mark schema modified. Call this first so user can abort if necessary." "Mark schema modified. Call this first so user can abort if necessary."
if not self.schemaChanged(): if not self.schemaChanged():
if check and not hooks.schema_will_change_filter(proceed=True): if check and not hooks.schema_will_change(proceed=True):
raise AnkiError("abortSchemaMod") raise AnkiError("abortSchemaMod")
self.scm = intTime(1000) self.scm = intTime(1000)
self.setMod() self.setMod()
@ -372,7 +372,7 @@ crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""",
strids = ids2str(ids) strids = ids2str(ids)
# we need to log these independently of cards, as one side may have # we need to log these independently of cards, as one side may have
# more card templates # more card templates
hooks.notes_will_delete_hook(self, ids) hooks.notes_will_delete(self, ids)
self._logRem(ids, REM_NOTE) self._logRem(ids, REM_NOTE)
self.db.execute("delete from notes where id in %s" % strids) self.db.execute("delete from notes where id in %s" % strids)
@ -665,12 +665,12 @@ where c.nid = n.id and c.id in %s group by nid"""
fields["c%d" % (card_ord + 1)] = "1" fields["c%d" % (card_ord + 1)] = "1"
# allow add-ons to modify the available fields # allow add-ons to modify the available fields
hooks.fields_will_render_hook(fields, model, data) hooks.fields_will_render(fields, model, data)
fields = runFilter("mungeFields", fields, model, data, self) # legacy fields = runFilter("mungeFields", fields, model, data, self) # legacy
# and the template prior to rendering # and the template prior to rendering
qfmt = hooks.card_template_will_render_filter(qfmt, True) qfmt = hooks.card_template_will_render(qfmt, True)
afmt = hooks.card_template_will_render_filter(afmt, False) afmt = hooks.card_template_will_render(afmt, False)
# render fields # render fields
qatext = render_card(self, qfmt, afmt, fields, card_ord) qatext = render_card(self, qfmt, afmt, fields, card_ord)
@ -678,7 +678,7 @@ where c.nid = n.id and c.id in %s group by nid"""
# allow add-ons to modify the generated result # allow add-ons to modify the generated result
for type in "q", "a": for type in "q", "a":
ret[type] = hooks.card_template_did_render_filter( ret[type] = hooks.card_template_did_render(
ret[type], type, fields, model, data, self ret[type], type, fields, model, data, self
) )

View file

@ -165,7 +165,7 @@ class DeckManager:
self.decks[str(id)] = g self.decks[str(id)] = g
self.save(g) self.save(g)
self.maybeAddToActive() self.maybeAddToActive()
hooks.deck_did_create_hook(g) hooks.deck_did_create(g)
return int(id) return int(id)
def rem(self, did: int, cardsToo: bool = False, childrenToo: bool = True) -> None: def rem(self, did: int, cardsToo: bool = False, childrenToo: bool = True) -> None:

View file

@ -347,7 +347,7 @@ class AnkiPackageExporter(AnkiExporter):
else: else:
z.write(mpath, cStr, zipfile.ZIP_STORED) z.write(mpath, cStr, zipfile.ZIP_STORED)
media[cStr] = unicodedata.normalize("NFC", file) media[cStr] = unicodedata.normalize("NFC", file)
hooks.media_files_did_export_hook(c) hooks.media_files_did_export(c)
return media return media
@ -417,5 +417,5 @@ def exporters() -> List[Tuple[str, Any]]:
id(TextNoteExporter), id(TextNoteExporter),
id(TextCardExporter), id(TextCardExporter),
] ]
hooks.exporters_list_did_create_hook(exps) hooks.exporters_list_did_create(exps)
return exps return exps

View file

@ -40,7 +40,7 @@ class Finder:
flag=self._findFlag, flag=self._findFlag,
) )
self.search["is"] = self._findCardState self.search["is"] = self._findCardState
hooks.search_terms_did_prepare_hook(self.search) hooks.search_terms_did_prepare(self.search)
def findCards(self, query, order=False) -> Any: def findCards(self, query, order=False) -> Any:
"Return a list of card ids for QUERY." "Return a list of card ids for QUERY."

View file

@ -51,7 +51,7 @@ class _CardDidLeechHook:
runHook("leech", card) runHook("leech", card)
card_did_leech_hook = _CardDidLeechHook() card_did_leech = _CardDidLeechHook()
class _CardOdueWasInvalidHook: class _CardOdueWasInvalidHook:
@ -75,7 +75,7 @@ class _CardOdueWasInvalidHook:
raise raise
card_odue_was_invalid_hook = _CardOdueWasInvalidHook() card_odue_was_invalid = _CardOdueWasInvalidHook()
class _CardTemplateDidRenderFilter: class _CardTemplateDidRenderFilter:
@ -150,7 +150,7 @@ class _CardTemplateDidRenderFilter:
return text return text
card_template_did_render_filter = _CardTemplateDidRenderFilter() card_template_did_render = _CardTemplateDidRenderFilter()
class _CardTemplateFilterWillApplyFilter: class _CardTemplateFilterWillApplyFilter:
@ -177,7 +177,7 @@ class _CardTemplateFilterWillApplyFilter:
return field_text return field_text
card_template_filter_will_apply_filter = _CardTemplateFilterWillApplyFilter() card_template_filter_will_apply = _CardTemplateFilterWillApplyFilter()
class _CardTemplateWillRenderFilter: class _CardTemplateWillRenderFilter:
@ -204,7 +204,7 @@ class _CardTemplateWillRenderFilter:
return template return template
card_template_will_render_filter = _CardTemplateWillRenderFilter() card_template_will_render = _CardTemplateWillRenderFilter()
class _DeckDidCreateHook: class _DeckDidCreateHook:
@ -230,7 +230,7 @@ class _DeckDidCreateHook:
runHook("newDeck") runHook("newDeck")
deck_did_create_hook = _DeckDidCreateHook() deck_did_create = _DeckDidCreateHook()
class _ExportersListDidCreateHook: class _ExportersListDidCreateHook:
@ -256,7 +256,7 @@ class _ExportersListDidCreateHook:
runHook("exportersList", exporters) runHook("exportersList", exporters)
exporters_list_did_create_hook = _ExportersListDidCreateHook() exporters_list_did_create = _ExportersListDidCreateHook()
class _FieldsWillRenderHook: class _FieldsWillRenderHook:
@ -288,7 +288,7 @@ class _FieldsWillRenderHook:
raise raise
fields_will_render_hook = _FieldsWillRenderHook() fields_will_render = _FieldsWillRenderHook()
class _HttpDataDidReceiveHook: class _HttpDataDidReceiveHook:
@ -312,7 +312,7 @@ class _HttpDataDidReceiveHook:
raise raise
http_data_did_receive_hook = _HttpDataDidReceiveHook() http_data_did_receive = _HttpDataDidReceiveHook()
class _HttpDataDidSendHook: class _HttpDataDidSendHook:
@ -336,7 +336,7 @@ class _HttpDataDidSendHook:
raise raise
http_data_did_send_hook = _HttpDataDidSendHook() http_data_did_send = _HttpDataDidSendHook()
class _MediaFilesDidExportHook: class _MediaFilesDidExportHook:
@ -360,7 +360,7 @@ class _MediaFilesDidExportHook:
raise raise
media_files_did_export_hook = _MediaFilesDidExportHook() media_files_did_export = _MediaFilesDidExportHook()
class _NoteTypeDidCreateHook: class _NoteTypeDidCreateHook:
@ -386,7 +386,7 @@ class _NoteTypeDidCreateHook:
runHook("newModel") runHook("newModel")
note_type_did_create_hook = _NoteTypeDidCreateHook() note_type_did_create = _NoteTypeDidCreateHook()
class _NotesWillDeleteHook: class _NotesWillDeleteHook:
@ -416,7 +416,7 @@ class _NotesWillDeleteHook:
runHook("remNotes", col, ids) runHook("remNotes", col, ids)
notes_will_delete_hook = _NotesWillDeleteHook() notes_will_delete = _NotesWillDeleteHook()
class _SchemaWillChangeFilter: class _SchemaWillChangeFilter:
@ -441,7 +441,7 @@ class _SchemaWillChangeFilter:
return proceed return proceed
schema_will_change_filter = _SchemaWillChangeFilter() schema_will_change = _SchemaWillChangeFilter()
class _SearchTermsDidPrepareHook: class _SearchTermsDidPrepareHook:
@ -467,7 +467,7 @@ class _SearchTermsDidPrepareHook:
runHook("search", searches) runHook("search", searches)
search_terms_did_prepare_hook = _SearchTermsDidPrepareHook() search_terms_did_prepare = _SearchTermsDidPrepareHook()
class _SyncProgressDidChangeHook: class _SyncProgressDidChangeHook:
@ -493,7 +493,7 @@ class _SyncProgressDidChangeHook:
runHook("syncMsg", msg) runHook("syncMsg", msg)
sync_progress_did_change_hook = _SyncProgressDidChangeHook() sync_progress_did_change = _SyncProgressDidChangeHook()
class _SyncStageDidChangeHook: class _SyncStageDidChangeHook:
@ -519,7 +519,7 @@ class _SyncStageDidChangeHook:
runHook("sync", stage) runHook("sync", stage)
sync_stage_did_change_hook = _SyncStageDidChangeHook() sync_stage_did_change = _SyncStageDidChangeHook()
class _TagDidCreateHook: class _TagDidCreateHook:
@ -545,7 +545,7 @@ class _TagDidCreateHook:
runHook("newTag") runHook("newTag")
tag_did_create_hook = _TagDidCreateHook() tag_did_create = _TagDidCreateHook()
# @@AUTOGEN@@ # @@AUTOGEN@@
# Legacy hook handling # Legacy hook handling

View file

@ -184,4 +184,4 @@ def _errMsg(type: str, texpath: str) -> Any:
# setup q/a filter - type ignored due to import cycle # setup q/a filter - type ignored due to import cycle
hooks.card_template_did_render_filter.append(mungeQA) # type: ignore hooks.card_template_did_render.append(mungeQA) # type: ignore

View file

@ -107,7 +107,7 @@ class ModelManager:
if templates: if templates:
self._syncTemplates(m) self._syncTemplates(m)
self.changed = True self.changed = True
hooks.note_type_did_create_hook(m) hooks.note_type_did_create(m)
def flush(self) -> None: def flush(self) -> None:
"Flush the registry if any models were changed." "Flush the registry if any models were changed."

View file

@ -1150,7 +1150,7 @@ did = ?, queue = %s, due = ?, usn = ? where id = ?"""
card.odue = card.odid = 0 card.odue = card.odid = 0
card.queue = -1 card.queue = -1
# notify UI # notify UI
hooks.card_did_leech_hook(card) hooks.card_did_leech(card)
return True return True
# Tools # Tools

View file

@ -1270,7 +1270,7 @@ where id = ?
if a == 0: if a == 0:
card.queue = -1 card.queue = -1
# notify UI # notify UI
hooks.card_did_leech_hook(card) hooks.card_did_leech(card)
return True return True
return None return None

View file

@ -55,7 +55,7 @@ class Syncer:
self.col.save() self.col.save()
# step 1: login & metadata # step 1: login & metadata
hooks.sync_stage_did_change_hook("login") hooks.sync_stage_did_change("login")
meta = self.server.meta() meta = self.server.meta()
self.col.log("rmeta", meta) self.col.log("rmeta", meta)
if not meta: if not meta:
@ -95,7 +95,7 @@ class Syncer:
self.col.log("basic check") self.col.log("basic check")
return "basicCheckFailed" return "basicCheckFailed"
# step 2: startup and deletions # step 2: startup and deletions
hooks.sync_stage_did_change_hook("meta") hooks.sync_stage_did_change("meta")
rrem = self.server.start( rrem = self.server.start(
minUsn=self.minUsn, lnewer=self.lnewer, offset=self.col.localOffset() minUsn=self.minUsn, lnewer=self.lnewer, offset=self.col.localOffset()
) )
@ -118,31 +118,31 @@ class Syncer:
self.server.abort() self.server.abort()
return self._forceFullSync() return self._forceFullSync()
# step 3: stream large tables from server # step 3: stream large tables from server
hooks.sync_stage_did_change_hook("server") hooks.sync_stage_did_change("server")
while 1: while 1:
hooks.sync_stage_did_change_hook("stream") hooks.sync_stage_did_change("stream")
chunk = self.server.chunk() chunk = self.server.chunk()
self.col.log("server chunk", chunk) self.col.log("server chunk", chunk)
self.applyChunk(chunk=chunk) self.applyChunk(chunk=chunk)
if chunk["done"]: if chunk["done"]:
break break
# step 4: stream to server # step 4: stream to server
hooks.sync_stage_did_change_hook("client") hooks.sync_stage_did_change("client")
while 1: while 1:
hooks.sync_stage_did_change_hook("stream") hooks.sync_stage_did_change("stream")
chunk = self.chunk() chunk = self.chunk()
self.col.log("client chunk", chunk) self.col.log("client chunk", chunk)
self.server.applyChunk(chunk=chunk) self.server.applyChunk(chunk=chunk)
if chunk["done"]: if chunk["done"]:
break break
# step 5: sanity check # step 5: sanity check
hooks.sync_stage_did_change_hook("sanity") hooks.sync_stage_did_change("sanity")
c = self.sanityCheck() c = self.sanityCheck()
ret = self.server.sanityCheck2(client=c) ret = self.server.sanityCheck2(client=c)
if ret["status"] != "ok": if ret["status"] != "ok":
return self._forceFullSync() return self._forceFullSync()
# finalize # finalize
hooks.sync_stage_did_change_hook("finalize") hooks.sync_stage_did_change("finalize")
mod = self.server.finish() mod = self.server.finish()
self.finish(mod) self.finish(mod)
return "success" return "success"
@ -501,7 +501,7 @@ class AnkiRequestsClient:
buf = io.BytesIO() buf = io.BytesIO()
for chunk in resp.iter_content(chunk_size=HTTP_BUF_SIZE): for chunk in resp.iter_content(chunk_size=HTTP_BUF_SIZE):
hooks.http_data_did_receive_hook(len(chunk)) hooks.http_data_did_receive(len(chunk))
buf.write(chunk) buf.write(chunk)
return buf.getvalue() return buf.getvalue()
@ -523,7 +523,7 @@ if os.environ.get("ANKI_NOVERIFYSSL"):
class _MonitoringFile(io.BufferedReader): class _MonitoringFile(io.BufferedReader):
def read(self, size=-1) -> bytes: def read(self, size=-1) -> bytes:
data = io.BufferedReader.read(self, HTTP_BUF_SIZE) data = io.BufferedReader.read(self, HTTP_BUF_SIZE)
hooks.http_data_did_send_hook(len(data)) hooks.http_data_did_send(len(data))
return data return data
@ -707,13 +707,13 @@ class FullSyncer(HttpSyncer):
self.col = col self.col = col
def download(self) -> Optional[str]: def download(self) -> Optional[str]:
hooks.sync_stage_did_change_hook("download") hooks.sync_stage_did_change("download")
localNotEmpty = self.col.db.scalar("select 1 from cards") localNotEmpty = self.col.db.scalar("select 1 from cards")
self.col.close() self.col.close()
cont = self.req("download") cont = self.req("download")
tpath = self.col.path + ".tmp" tpath = self.col.path + ".tmp"
if cont == "upgradeRequired": if cont == "upgradeRequired":
hooks.sync_stage_did_change_hook("upgradeRequired") hooks.sync_stage_did_change("upgradeRequired")
return None return None
open(tpath, "wb").write(cont) open(tpath, "wb").write(cont)
# check the received file is ok # check the received file is ok
@ -733,7 +733,7 @@ class FullSyncer(HttpSyncer):
def upload(self) -> bool: def upload(self) -> bool:
"True if upload successful." "True if upload successful."
hooks.sync_stage_did_change_hook("upload") hooks.sync_stage_did_change("upload")
# make sure it's ok before we try to upload # make sure it's ok before we try to upload
if self.col.db.scalar("pragma integrity_check") != "ok": if self.col.db.scalar("pragma integrity_check") != "ok":
return False return False
@ -765,7 +765,7 @@ class MediaSyncer:
def sync(self) -> Any: def sync(self) -> Any:
# check if there have been any changes # check if there have been any changes
hooks.sync_stage_did_change_hook("findMedia") hooks.sync_stage_did_change("findMedia")
self.col.log("findChanges") self.col.log("findChanges")
try: try:
self.col.media.findChanges() self.col.media.findChanges()
@ -835,7 +835,7 @@ class MediaSyncer:
if not fnames: if not fnames:
break break
hooks.sync_progress_did_change_hook( hooks.sync_progress_did_change(
ngettext( ngettext(
"%d media change to upload", "%d media changes to upload", toSend "%d media change to upload", "%d media changes to upload", toSend
) )
@ -886,7 +886,7 @@ class MediaSyncer:
fnames = fnames[cnt:] fnames = fnames[cnt:]
n = self.downloadCount n = self.downloadCount
hooks.sync_progress_did_change_hook( hooks.sync_progress_did_change(
ngettext("%d media file downloaded", "%d media files downloaded", n) ngettext("%d media file downloaded", "%d media files downloaded", n)
% n, % n,
) )

View file

@ -50,7 +50,7 @@ class TagManager:
self.tags[t] = self.col.usn() if usn is None else usn self.tags[t] = self.col.usn() if usn is None else usn
self.changed = True self.changed = True
if found: if found:
hooks.tag_did_create_hook(t) # pylint: disable=undefined-loop-variable hooks.tag_did_create(t) # pylint: disable=undefined-loop-variable
def all(self) -> List: def all(self) -> List:
return list(self.tags.keys()) return list(self.tags.keys())

View file

@ -15,7 +15,7 @@ the filter is skipped.
Add-ons can register a filter with the following code: Add-ons can register a filter with the following code:
from anki import hooks from anki import hooks
hooks.field_replacement_filter.append(myfunc) hooks.field_replacement.append(myfunc)
This will call myfunc, passing the field text in as the first argument. This will call myfunc, passing the field text in as the first argument.
Your function should decide if it wants to modify the text by checking Your function should decide if it wants to modify the text by checking
@ -72,7 +72,7 @@ def apply_custom_filters(
field_text = node.current_text field_text = node.current_text
for filter_name in node.filters: for filter_name in node.filters:
field_text = hooks.card_template_filter_will_apply_filter( field_text = hooks.card_template_filter_will_apply(
field_text, node.field_name, filter_name, fields field_text, node.field_name, filter_name, fields
) )
# legacy hook - the second and fifth argument are no longer used # legacy hook - the second and fifth argument are no longer used

View file

@ -373,7 +373,7 @@ def test_reviews():
def onLeech(card): def onLeech(card):
hooked.append(1) hooked.append(1)
hooks.card_did_leech_hook.append(onLeech) hooks.card_did_leech.append(onLeech)
d.sched.answerCard(c, 1) d.sched.answerCard(c, 1)
assert hooked assert hooked
assert c.queue == -1 assert c.queue == -1

View file

@ -395,7 +395,7 @@ def test_reviews():
def onLeech(card): def onLeech(card):
hooked.append(1) hooked.append(1)
hooks.card_did_leech_hook.append(onLeech) hooks.card_did_leech.append(onLeech)
d.sched.answerCard(c, 1) d.sched.answerCard(c, 1)
assert hooked assert hooked
assert c.queue == -1 assert c.queue == -1

View file

@ -84,7 +84,7 @@ class {self.classname()}:
if cb in self._hooks: if cb in self._hooks:
self._hooks.remove(cb) self._hooks.remove(cb)
{self.fire_code()} {self.fire_code()}
{self.full_name()} = {self.classname()}() {self.name} = {self.classname()}()
""" """
return code return code

View file

@ -43,8 +43,8 @@ class AddCards(QDialog):
self.history: List[int] = [] self.history: List[int] = []
self.previousNote = None self.previousNote = None
restoreGeom(self, "add") restoreGeom(self, "add")
gui_hooks.state_did_reset_hook.append(self.onReset) gui_hooks.state_did_reset.append(self.onReset)
gui_hooks.current_note_type_did_change_hook.append(self.onModelChange) gui_hooks.current_note_type_did_change.append(self.onModelChange)
addCloseShortcut(self) addCloseShortcut(self)
self.show() self.show()
@ -156,7 +156,7 @@ class AddCards(QDialog):
else: else:
a = m.addAction(_("(Note deleted)")) a = m.addAction(_("(Note deleted)"))
a.setEnabled(False) a.setEnabled(False)
gui_hooks.add_cards_history_menu_will_show_hook(self, m) gui_hooks.add_cards_history_menu_will_show(self, m)
m.exec_(self.historyButton.mapToGlobal(QPoint(0, 0))) m.exec_(self.historyButton.mapToGlobal(QPoint(0, 0)))
def editHistory(self, nid): def editHistory(self, nid):
@ -196,7 +196,7 @@ question on all cards."""
self.addHistory(note) self.addHistory(note)
self.mw.requireReset() self.mw.requireReset()
self.previousNote = note self.previousNote = note
gui_hooks.add_cards_note_did_add_hook(note) gui_hooks.add_cards_note_did_add(note)
return note return note
def addCards(self): def addCards(self):
@ -223,8 +223,8 @@ question on all cards."""
self.ifCanClose(self._reject) self.ifCanClose(self._reject)
def _reject(self) -> None: def _reject(self) -> None:
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
gui_hooks.current_note_type_did_change_hook.remove(self.onModelChange) gui_hooks.current_note_type_did_change.remove(self.onModelChange)
clearAudioQueue() clearAudioQueue()
self.removeTempNote(self.editor.note) self.removeTempNote(self.editor.note)
self.editor.cleanup() self.editor.cleanup()

View file

@ -639,7 +639,7 @@ class Browser(QMainWindow):
self.pgDownCut = QShortcut(QKeySequence("Shift+End"), self) self.pgDownCut = QShortcut(QKeySequence("Shift+End"), self)
self.pgDownCut.activated.connect(self.onLastCard) self.pgDownCut.activated.connect(self.onLastCard)
# add-on hook # add-on hook
gui_hooks.browser_menus_did_setup_hook(self) gui_hooks.browser_menus_did_setup(self)
self.mw.maybeHideAccelerators(self) self.mw.maybeHideAccelerators(self)
# context menu # context menu
@ -653,7 +653,7 @@ class Browser(QMainWindow):
m.addSeparator() m.addSeparator()
for act in self.form.menu_Notes.actions(): for act in self.form.menu_Notes.actions():
m.addAction(act) m.addAction(act)
gui_hooks.browser_context_menu_will_show_hook(self, m) gui_hooks.browser_context_menu_will_show(self, m)
qtMenuShortcutWorkaround(m) qtMenuShortcutWorkaround(m)
m.exec_(QCursor.pos()) m.exec_(QCursor.pos())
@ -844,7 +844,7 @@ class Browser(QMainWindow):
self.editor.card = self.card self.editor.card = self.card
self.singleCard = True self.singleCard = True
self._updateFlagsMenu() self._updateFlagsMenu()
gui_hooks.browser_row_did_change_hook(self) gui_hooks.browser_row_did_change(self)
self._renderPreview(True) self._renderPreview(True)
def refreshCurrentCard(self, note): def refreshCurrentCard(self, note):
@ -1716,9 +1716,7 @@ where id in %s"""
play(audio) play(audio)
txt = mungeQA(self.col, txt) txt = mungeQA(self.col, txt)
gui_hooks.card_text_filter( gui_hooks.card_text(txt, c, "preview" + self._previewState.capitalize())
txt, c, "preview" + self._previewState.capitalize()
)
self._lastPreviewState = self._previewStateAndMod() self._lastPreviewState = self._previewStateAndMod()
self._updatePreviewButtons() self._updatePreviewButtons()
self._previewWeb.eval("{}({},'{}');".format(func, json.dumps(txt), bodyclass)) self._previewWeb.eval("{}({},'{}');".format(func, json.dumps(txt), bodyclass))
@ -2020,24 +2018,24 @@ update cards set usn=?, mod=?, did=? where id in """
###################################################################### ######################################################################
def setupHooks(self): def setupHooks(self):
gui_hooks.undo_state_did_change_hook.append(self.onUndoState) gui_hooks.undo_state_did_change.append(self.onUndoState)
gui_hooks.state_did_reset_hook.append(self.onReset) gui_hooks.state_did_reset.append(self.onReset)
gui_hooks.editor_typing_timer_did_fire_hook.append(self.refreshCurrentCard) gui_hooks.editor_typing_timer_did_fire.append(self.refreshCurrentCard)
gui_hooks.editor_note_did_load_hook.append(self.onLoadNote) gui_hooks.editor_note_did_load.append(self.onLoadNote)
gui_hooks.editor_field_did_lose_focus_filter.append(self.refreshCurrentCard) gui_hooks.editor_field_did_lose_focus.append(self.refreshCurrentCard)
hooks.tag_did_create_hook.append(self.maybeRefreshSidebar) hooks.tag_did_create.append(self.maybeRefreshSidebar)
hooks.note_type_did_create_hook.append(self.maybeRefreshSidebar) hooks.note_type_did_create.append(self.maybeRefreshSidebar)
hooks.deck_did_create_hook.append(self.maybeRefreshSidebar) hooks.deck_did_create.append(self.maybeRefreshSidebar)
def teardownHooks(self): def teardownHooks(self):
gui_hooks.undo_state_did_change_hook.remove(self.onUndoState) gui_hooks.undo_state_did_change.remove(self.onUndoState)
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
gui_hooks.editor_typing_timer_did_fire_hook.remove(self.refreshCurrentCard) gui_hooks.editor_typing_timer_did_fire.remove(self.refreshCurrentCard)
gui_hooks.editor_note_did_load_hook.remove(self.onLoadNote) gui_hooks.editor_note_did_load.remove(self.onLoadNote)
gui_hooks.editor_field_did_lose_focus_filter.remove(self.refreshCurrentCard) gui_hooks.editor_field_did_lose_focus.remove(self.refreshCurrentCard)
hooks.tag_did_create_hook.remove(self.maybeRefreshSidebar) hooks.tag_did_create.remove(self.maybeRefreshSidebar)
hooks.note_type_did_create_hook.remove(self.maybeRefreshSidebar) hooks.note_type_did_create.remove(self.maybeRefreshSidebar)
hooks.deck_did_create_hook.remove(self.maybeRefreshSidebar) hooks.deck_did_create.remove(self.maybeRefreshSidebar)
def onUndoState(self, on): def onUndoState(self, on):
self.form.actionUndo.setEnabled(on) self.form.actionUndo.setEnabled(on)
@ -2271,8 +2269,8 @@ class ChangeModel(QDialog):
self.setWindowModality(Qt.WindowModal) self.setWindowModality(Qt.WindowModal)
self.setup() self.setup()
restoreGeom(self, "changeModel") restoreGeom(self, "changeModel")
gui_hooks.state_did_reset_hook.append(self.onReset) gui_hooks.state_did_reset.append(self.onReset)
gui_hooks.current_note_type_did_change_hook.append(self.onReset) gui_hooks.current_note_type_did_change.append(self.onReset)
self.exec_() self.exec_()
def setup(self): def setup(self):
@ -2395,8 +2393,8 @@ class ChangeModel(QDialog):
) )
def cleanup(self): def cleanup(self):
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
gui_hooks.current_note_type_did_change_hook.remove(self.onReset) gui_hooks.current_note_type_did_change.remove(self.onReset)
self.modelChooser.cleanup() self.modelChooser.cleanup()
saveGeom(self, "changeModel") saveGeom(self, "changeModel")

View file

@ -335,10 +335,10 @@ Please create a new card type first."""
bodyclass = bodyClass(self.mw.col, c) bodyclass = bodyClass(self.mw.col, c)
q = ti(mungeQA(self.mw.col, c.q(reload=True))) q = ti(mungeQA(self.mw.col, c.q(reload=True)))
q = gui_hooks.card_text_filter(q, c, "clayoutQuestion") q = gui_hooks.card_text(q, c, "clayoutQuestion")
a = ti(mungeQA(self.mw.col, c.a()), type="a") a = ti(mungeQA(self.mw.col, c.a()), type="a")
a = gui_hooks.card_text_filter(a, c, "clayoutAnswer") a = gui_hooks.card_text(a, c, "clayoutAnswer")
# use _showAnswer to avoid the longer delay # use _showAnswer to avoid the longer delay
self.pform.frontWeb.eval("_showAnswer(%s,'%s');" % (json.dumps(q), bodyclass)) self.pform.frontWeb.eval("_showAnswer(%s,'%s');" % (json.dumps(q), bodyclass))

View file

@ -245,7 +245,7 @@ where id > ?""",
a.triggered.connect(lambda b, did=did: self._export(did)) a.triggered.connect(lambda b, did=did: self._export(did))
a = m.addAction(_("Delete")) a = m.addAction(_("Delete"))
a.triggered.connect(lambda b, did=did: self._delete(did)) a.triggered.connect(lambda b, did=did: self._delete(did))
gui_hooks.deck_browser_options_menu_will_show_hook(m, did) gui_hooks.deck_browser_options_menu_will_show(m, did)
m.exec_(QCursor.pos()) m.exec_(QCursor.pos())
def _export(self, did): def _export(self, did):

View file

@ -19,7 +19,7 @@ class DeckChooser(QHBoxLayout):
self.setSpacing(8) self.setSpacing(8)
self.setupDecks() self.setupDecks()
self.widget.setLayout(self) self.widget.setLayout(self)
gui_hooks.current_note_type_did_change_hook.append(self.onModelChange) gui_hooks.current_note_type_did_change.append(self.onModelChange)
def setupDecks(self): def setupDecks(self):
if self.label: if self.label:
@ -64,7 +64,7 @@ class DeckChooser(QHBoxLayout):
self.widget.hide() self.widget.hide()
def cleanup(self): def cleanup(self):
gui_hooks.current_note_type_did_change_hook.remove(self.onModelChange) gui_hooks.current_note_type_did_change.remove(self.onModelChange)
def onModelChange(self): def onModelChange(self):
if not self.mw.col.conf.get("addToCur", True): if not self.mw.col.conf.get("addToCur", True):

View file

@ -57,7 +57,7 @@ class Downloader(QThread):
self.recvTotal += bytes self.recvTotal += bytes
self.recv.emit() self.recv.emit()
hooks.http_data_did_receive_hook.append(recvEvent) hooks.http_data_did_receive.append(recvEvent)
client = AnkiRequestsClient() client = AnkiRequestsClient()
try: try:
resp = client.get(aqt.appShared + "download/%s?v=2.1" % self.code) resp = client.get(aqt.appShared + "download/%s?v=2.1" % self.code)
@ -75,7 +75,7 @@ class Downloader(QThread):
self.error = _("Please check your internet connection.") + "\n\n" + str(e) self.error = _("Please check your internet connection.") + "\n\n" + str(e)
return return
finally: finally:
hooks.http_data_did_receive_hook.remove(recvEvent) hooks.http_data_did_receive.remove(recvEvent)
self.fname = re.match( self.fname = re.match(
"attachment; filename=(.+)", resp.headers["content-disposition"] "attachment; filename=(.+)", resp.headers["content-disposition"]

View file

@ -26,7 +26,7 @@ class EditCurrent(QDialog):
self.editor.card = self.mw.reviewer.card self.editor.card = self.mw.reviewer.card
self.editor.setNote(self.mw.reviewer.card.note(), focusTo=0) self.editor.setNote(self.mw.reviewer.card.note(), focusTo=0)
restoreGeom(self, "editcurrent") restoreGeom(self, "editcurrent")
gui_hooks.state_did_reset_hook.append(self.onReset) gui_hooks.state_did_reset.append(self.onReset)
self.mw.requireReset() self.mw.requireReset()
self.show() self.show()
# reset focus after open, taking care not to retain webview # reset focus after open, taking care not to retain webview
@ -40,7 +40,7 @@ class EditCurrent(QDialog):
n.load() # reload in case the model changed n.load() # reload in case the model changed
except: except:
# card's been deleted # card's been deleted
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
self.editor.setNote(None) self.editor.setNote(None)
self.mw.reset() self.mw.reset()
aqt.dialogs.markClosed("EditCurrent") aqt.dialogs.markClosed("EditCurrent")
@ -59,7 +59,7 @@ class EditCurrent(QDialog):
self.editor.saveNow(self._saveAndClose) self.editor.saveNow(self._saveAndClose)
def _saveAndClose(self): def _saveAndClose(self):
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
r = self.mw.reviewer r = self.mw.reviewer
try: try:
r.card.load() r.card.load()

View file

@ -141,7 +141,7 @@ class Editor:
self._addButton("more", "more"), self._addButton("more", "more"),
] ]
) )
gui_hooks.editor_buttons_did_setup_hook(righttopbtns, self) gui_hooks.editor_buttons_did_setup(righttopbtns, self)
# legacy filter # legacy filter
righttopbtns = runFilter("setupEditorButtons", righttopbtns, self) righttopbtns = runFilter("setupEditorButtons", righttopbtns, self)
topbuts = """ topbuts = """
@ -285,7 +285,7 @@ class Editor:
("Ctrl+Shift+X", self.onHtmlEdit), ("Ctrl+Shift+X", self.onHtmlEdit),
("Ctrl+Shift+T", self.onFocusTags, True), ("Ctrl+Shift+T", self.onFocusTags, True),
] ]
gui_hooks.editor_shortcuts_did_setup_hook(cuts, self) gui_hooks.editor_shortcuts_did_setup(cuts, self)
for row in cuts: for row in cuts:
if len(row) == 2: if len(row) == 2:
keys, fn = row # pylint: disable=unbalanced-tuple-unpacking keys, fn = row # pylint: disable=unbalanced-tuple-unpacking
@ -358,20 +358,20 @@ class Editor:
if type == "blur": if type == "blur":
self.currentField = None self.currentField = None
# run any filters # run any filters
if gui_hooks.editor_field_did_lose_focus_filter(False, self.note, ord): if gui_hooks.editor_field_did_lose_focus(False, self.note, ord):
# something updated the note; update it after a subsequent focus # something updated the note; update it after a subsequent focus
# event has had time to fire # event has had time to fire
self.mw.progress.timer(100, self.loadNoteKeepingFocus, False) self.mw.progress.timer(100, self.loadNoteKeepingFocus, False)
else: else:
self.checkValid() self.checkValid()
else: else:
gui_hooks.editor_typing_timer_did_fire_hook(self.note) gui_hooks.editor_typing_timer_did_fire(self.note)
self.checkValid() self.checkValid()
# focused into field? # focused into field?
elif cmd.startswith("focus"): elif cmd.startswith("focus"):
(type, num) = cmd.split(":", 1) (type, num) = cmd.split(":", 1)
self.currentField = int(num) self.currentField = int(num)
gui_hooks.editor_field_did_gain_focus_hook(self.note, self.currentField) gui_hooks.editor_field_did_gain_focus(self.note, self.currentField)
elif cmd in self._links: elif cmd in self._links:
self._links[cmd](self) self._links[cmd](self)
else: else:
@ -416,7 +416,7 @@ class Editor:
self.checkValid() self.checkValid()
if focusTo is not None: if focusTo is not None:
self.web.setFocus() self.web.setFocus()
gui_hooks.editor_note_did_load_hook(self) gui_hooks.editor_note_did_load(self)
js = "setFields(%s); setFonts(%s); focusField(%s); setNoteId(%s)" % ( js = "setFields(%s); setFonts(%s); focusField(%s); setNoteId(%s)" % (
json.dumps(data), json.dumps(data),
@ -428,7 +428,7 @@ class Editor:
def fonts(self): def fonts(self):
return [ return [
(gui_hooks.editor_font_for_field_filter(f["font"]), f["size"], f["rtl"]) (gui_hooks.editor_font_for_field(f["font"]), f["size"], f["rtl"])
for f in self.note.model()["flds"] for f in self.note.model()["flds"]
] ]
@ -536,7 +536,7 @@ class Editor:
self.tags.setText(self.mw.col.tags.join(self.note.tags).strip()) self.tags.setText(self.mw.col.tags.join(self.note.tags).strip())
if not self.addMode: if not self.addMode:
self.note.flush() self.note.flush()
gui_hooks.editor_tags_did_update_hook(self.note) gui_hooks.editor_tags_did_update(self.note)
def saveAddModeVars(self): def saveAddModeVars(self):
if self.addMode: if self.addMode:
@ -1111,7 +1111,7 @@ class EditorWebView(AnkiWebView):
a.triggered.connect(self.onCopy) a.triggered.connect(self.onCopy)
a = m.addAction(_("Paste")) a = m.addAction(_("Paste"))
a.triggered.connect(self.onPaste) a.triggered.connect(self.onPaste)
gui_hooks.editor_context_menu_will_show_hook(self, m) gui_hooks.editor_context_menu_will_show(self, m)
m.popup(QCursor.pos()) m.popup(QCursor.pos())
@ -1122,4 +1122,4 @@ def fontMungeHack(font):
return re.sub(" L$", " Light", font) return re.sub(" L$", " Light", font)
gui_hooks.editor_font_for_field_filter.append(fontMungeHack) gui_hooks.editor_font_for_field.append(fontMungeHack)

View file

@ -132,9 +132,9 @@ class ExportDialog(QDialog):
) )
% cnt % cnt
) )
hooks.media_files_did_export_hook.append(exportedMedia) hooks.media_files_did_export.append(exportedMedia)
self.exporter.exportInto(file) self.exporter.exportInto(file)
hooks.media_files_did_export_hook.remove(exportedMedia) hooks.media_files_did_export.remove(exportedMedia)
period = 3000 period = 3000
if self.isVerbatim: if self.isVerbatim:
msg = _("Collection exported.") msg = _("Collection exported.")

View file

@ -46,7 +46,7 @@ class _AddCardsHistoryMenuWillShowHook:
runHook("AddCards.onHistory", addcards, menu) runHook("AddCards.onHistory", addcards, menu)
add_cards_history_menu_will_show_hook = _AddCardsHistoryMenuWillShowHook() add_cards_history_menu_will_show = _AddCardsHistoryMenuWillShowHook()
class _AddCardsNoteDidAddHook: class _AddCardsNoteDidAddHook:
@ -72,7 +72,7 @@ class _AddCardsNoteDidAddHook:
runHook("AddCards.noteAdded", note) runHook("AddCards.noteAdded", note)
add_cards_note_did_add_hook = _AddCardsNoteDidAddHook() add_cards_note_did_add = _AddCardsNoteDidAddHook()
class _BrowserContextMenuWillShowHook: class _BrowserContextMenuWillShowHook:
@ -98,7 +98,7 @@ class _BrowserContextMenuWillShowHook:
runHook("browser.onContextMenu", browser, menu) runHook("browser.onContextMenu", browser, menu)
browser_context_menu_will_show_hook = _BrowserContextMenuWillShowHook() browser_context_menu_will_show = _BrowserContextMenuWillShowHook()
class _BrowserMenusDidSetupHook: class _BrowserMenusDidSetupHook:
@ -124,7 +124,7 @@ class _BrowserMenusDidSetupHook:
runHook("browser.setupMenus", browser) runHook("browser.setupMenus", browser)
browser_menus_did_setup_hook = _BrowserMenusDidSetupHook() browser_menus_did_setup = _BrowserMenusDidSetupHook()
class _BrowserRowDidChangeHook: class _BrowserRowDidChangeHook:
@ -150,7 +150,7 @@ class _BrowserRowDidChangeHook:
runHook("browser.rowChanged", browser) runHook("browser.rowChanged", browser)
browser_row_did_change_hook = _BrowserRowDidChangeHook() browser_row_did_change = _BrowserRowDidChangeHook()
class _CardTextFilter: class _CardTextFilter:
@ -179,7 +179,7 @@ class _CardTextFilter:
return text return text
card_text_filter = _CardTextFilter() card_text = _CardTextFilter()
class _CollectionDidLoadHook: class _CollectionDidLoadHook:
@ -205,7 +205,7 @@ class _CollectionDidLoadHook:
runHook("colLoading", col) runHook("colLoading", col)
collection_did_load_hook = _CollectionDidLoadHook() collection_did_load = _CollectionDidLoadHook()
class _CurrentNoteTypeDidChangeHook: class _CurrentNoteTypeDidChangeHook:
@ -231,7 +231,7 @@ class _CurrentNoteTypeDidChangeHook:
runHook("currentModelChanged") runHook("currentModelChanged")
current_note_type_did_change_hook = _CurrentNoteTypeDidChangeHook() current_note_type_did_change = _CurrentNoteTypeDidChangeHook()
class _DeckBrowserOptionsMenuWillShowHook: class _DeckBrowserOptionsMenuWillShowHook:
@ -257,7 +257,7 @@ class _DeckBrowserOptionsMenuWillShowHook:
runHook("showDeckOptions", menu, deck_id) runHook("showDeckOptions", menu, deck_id)
deck_browser_options_menu_will_show_hook = _DeckBrowserOptionsMenuWillShowHook() deck_browser_options_menu_will_show = _DeckBrowserOptionsMenuWillShowHook()
class _EditorButtonsDidSetupHook: class _EditorButtonsDidSetupHook:
@ -281,7 +281,7 @@ class _EditorButtonsDidSetupHook:
raise raise
editor_buttons_did_setup_hook = _EditorButtonsDidSetupHook() editor_buttons_did_setup = _EditorButtonsDidSetupHook()
class _EditorContextMenuWillShowHook: class _EditorContextMenuWillShowHook:
@ -307,7 +307,7 @@ class _EditorContextMenuWillShowHook:
runHook("EditorWebView.contextMenuEvent", editor_webview, menu) runHook("EditorWebView.contextMenuEvent", editor_webview, menu)
editor_context_menu_will_show_hook = _EditorContextMenuWillShowHook() editor_context_menu_will_show = _EditorContextMenuWillShowHook()
class _EditorFieldDidGainFocusHook: class _EditorFieldDidGainFocusHook:
@ -333,7 +333,7 @@ class _EditorFieldDidGainFocusHook:
runHook("editFocusGained", note, current_field_idx) runHook("editFocusGained", note, current_field_idx)
editor_field_did_gain_focus_hook = _EditorFieldDidGainFocusHook() editor_field_did_gain_focus = _EditorFieldDidGainFocusHook()
class _EditorFieldDidLoseFocusFilter: class _EditorFieldDidLoseFocusFilter:
@ -362,7 +362,7 @@ class _EditorFieldDidLoseFocusFilter:
return changed return changed
editor_field_did_lose_focus_filter = _EditorFieldDidLoseFocusFilter() editor_field_did_lose_focus = _EditorFieldDidLoseFocusFilter()
class _EditorFontForFieldFilter: class _EditorFontForFieldFilter:
@ -389,7 +389,7 @@ class _EditorFontForFieldFilter:
return font return font
editor_font_for_field_filter = _EditorFontForFieldFilter() editor_font_for_field = _EditorFontForFieldFilter()
class _EditorNoteDidLoadHook: class _EditorNoteDidLoadHook:
@ -415,7 +415,7 @@ class _EditorNoteDidLoadHook:
runHook("loadNote", editor) runHook("loadNote", editor)
editor_note_did_load_hook = _EditorNoteDidLoadHook() editor_note_did_load = _EditorNoteDidLoadHook()
class _EditorShortcutsDidSetupHook: class _EditorShortcutsDidSetupHook:
@ -441,7 +441,7 @@ class _EditorShortcutsDidSetupHook:
runHook("setupEditorShortcuts", shortcuts, editor) runHook("setupEditorShortcuts", shortcuts, editor)
editor_shortcuts_did_setup_hook = _EditorShortcutsDidSetupHook() editor_shortcuts_did_setup = _EditorShortcutsDidSetupHook()
class _EditorTagsDidUpdateHook: class _EditorTagsDidUpdateHook:
@ -467,7 +467,7 @@ class _EditorTagsDidUpdateHook:
runHook("tagsUpdated", note) runHook("tagsUpdated", note)
editor_tags_did_update_hook = _EditorTagsDidUpdateHook() editor_tags_did_update = _EditorTagsDidUpdateHook()
class _EditorTypingTimerDidFireHook: class _EditorTypingTimerDidFireHook:
@ -493,7 +493,7 @@ class _EditorTypingTimerDidFireHook:
runHook("editTimer", note) runHook("editTimer", note)
editor_typing_timer_did_fire_hook = _EditorTypingTimerDidFireHook() editor_typing_timer_did_fire = _EditorTypingTimerDidFireHook()
class _MpvDidIdleHook: class _MpvDidIdleHook:
@ -517,7 +517,7 @@ class _MpvDidIdleHook:
raise raise
mpv_did_idle_hook = _MpvDidIdleHook() mpv_did_idle = _MpvDidIdleHook()
class _MpvWillPlayHook: class _MpvWillPlayHook:
@ -543,7 +543,7 @@ class _MpvWillPlayHook:
runHook("mpvWillPlay", file) runHook("mpvWillPlay", file)
mpv_will_play_hook = _MpvWillPlayHook() mpv_will_play = _MpvWillPlayHook()
class _ProfileDidOpenHook: class _ProfileDidOpenHook:
@ -569,7 +569,7 @@ class _ProfileDidOpenHook:
runHook("profileLoaded") runHook("profileLoaded")
profile_did_open_hook = _ProfileDidOpenHook() profile_did_open = _ProfileDidOpenHook()
class _ProfileWillCloseHook: class _ProfileWillCloseHook:
@ -595,7 +595,7 @@ class _ProfileWillCloseHook:
runHook("unloadProfile") runHook("unloadProfile")
profile_will_close_hook = _ProfileWillCloseHook() profile_will_close = _ProfileWillCloseHook()
class _ReviewDidUndoHook: class _ReviewDidUndoHook:
@ -621,7 +621,7 @@ class _ReviewDidUndoHook:
runHook("revertedCard", card_id) runHook("revertedCard", card_id)
review_did_undo_hook = _ReviewDidUndoHook() review_did_undo = _ReviewDidUndoHook()
class _ReviewerAnswerDidShowHook: class _ReviewerAnswerDidShowHook:
@ -647,7 +647,7 @@ class _ReviewerAnswerDidShowHook:
runHook("showAnswer") runHook("showAnswer")
reviewer_answer_did_show_hook = _ReviewerAnswerDidShowHook() reviewer_answer_did_show = _ReviewerAnswerDidShowHook()
class _ReviewerContextMenuWillShowHook: class _ReviewerContextMenuWillShowHook:
@ -673,7 +673,7 @@ class _ReviewerContextMenuWillShowHook:
runHook("Reviewer.contextMenuEvent", reviewer, menu) runHook("Reviewer.contextMenuEvent", reviewer, menu)
reviewer_context_menu_will_show_hook = _ReviewerContextMenuWillShowHook() reviewer_context_menu_will_show = _ReviewerContextMenuWillShowHook()
class _ReviewerQuestionDidShowHook: class _ReviewerQuestionDidShowHook:
@ -699,7 +699,7 @@ class _ReviewerQuestionDidShowHook:
runHook("showQuestion") runHook("showQuestion")
reviewer_question_did_show_hook = _ReviewerQuestionDidShowHook() reviewer_question_did_show = _ReviewerQuestionDidShowHook()
class _ReviewerWillEndHook: class _ReviewerWillEndHook:
@ -727,7 +727,7 @@ class _ReviewerWillEndHook:
runHook("reviewCleanup") runHook("reviewCleanup")
reviewer_will_end_hook = _ReviewerWillEndHook() reviewer_will_end = _ReviewerWillEndHook()
class _StateDidChangeHook: class _StateDidChangeHook:
@ -753,7 +753,7 @@ class _StateDidChangeHook:
runHook("afterStateChange", new_state, old_state) runHook("afterStateChange", new_state, old_state)
state_did_change_hook = _StateDidChangeHook() state_did_change = _StateDidChangeHook()
class _StateDidResetHook: class _StateDidResetHook:
@ -781,7 +781,7 @@ class _StateDidResetHook:
runHook("reset") runHook("reset")
state_did_reset_hook = _StateDidResetHook() state_did_reset = _StateDidResetHook()
class _StateDidRevertHook: class _StateDidRevertHook:
@ -809,7 +809,7 @@ class _StateDidRevertHook:
runHook("revertedState", action) runHook("revertedState", action)
state_did_revert_hook = _StateDidRevertHook() state_did_revert = _StateDidRevertHook()
class _StateShortcutsWillChangeHook: class _StateShortcutsWillChangeHook:
@ -833,7 +833,7 @@ class _StateShortcutsWillChangeHook:
raise raise
state_shortcuts_will_change_hook = _StateShortcutsWillChangeHook() state_shortcuts_will_change = _StateShortcutsWillChangeHook()
class _StateWillChangeHook: class _StateWillChangeHook:
@ -859,7 +859,7 @@ class _StateWillChangeHook:
runHook("beforeStateChange", new_state, old_state) runHook("beforeStateChange", new_state, old_state)
state_will_change_hook = _StateWillChangeHook() state_will_change = _StateWillChangeHook()
class _StyleDidSetupFilter: class _StyleDidSetupFilter:
@ -886,7 +886,7 @@ class _StyleDidSetupFilter:
return style return style
style_did_setup_filter = _StyleDidSetupFilter() style_did_setup = _StyleDidSetupFilter()
class _UndoStateDidChangeHook: class _UndoStateDidChangeHook:
@ -912,7 +912,7 @@ class _UndoStateDidChangeHook:
runHook("undoState", can_undo) runHook("undoState", can_undo)
undo_state_did_change_hook = _UndoStateDidChangeHook() undo_state_did_change = _UndoStateDidChangeHook()
class _WebviewContextMenuWillShowHook: class _WebviewContextMenuWillShowHook:
@ -938,5 +938,5 @@ class _WebviewContextMenuWillShowHook:
runHook("AnkiWebView.contextMenuEvent", webview, menu) runHook("AnkiWebView.contextMenuEvent", webview, menu)
webview_context_menu_will_show_hook = _WebviewContextMenuWillShowHook() webview_context_menu_will_show = _WebviewContextMenuWillShowHook()
# @@AUTOGEN@@ # @@AUTOGEN@@

View file

@ -86,7 +86,7 @@ class ImportDialog(QDialog):
self.setupOptions() self.setupOptions()
self.modelChanged() self.modelChanged()
self.frm.autoDetect.setVisible(self.importer.needDelimiter) self.frm.autoDetect.setVisible(self.importer.needDelimiter)
gui_hooks.current_note_type_did_change_hook.append(self.modelChanged) gui_hooks.current_note_type_did_change.append(self.modelChanged)
self.frm.autoDetect.clicked.connect(self.onDelimiter) self.frm.autoDetect.clicked.connect(self.onDelimiter)
self.updateDelimiterButtonText() self.updateDelimiterButtonText()
self.frm.allowHTML.setChecked(self.mw.pm.profile.get("allowHTML", True)) self.frm.allowHTML.setChecked(self.mw.pm.profile.get("allowHTML", True))
@ -280,7 +280,7 @@ you can enter it here. Use \\t to represent tab."""
def reject(self): def reject(self):
self.modelChooser.cleanup() self.modelChooser.cleanup()
self.deck.cleanup() self.deck.cleanup()
gui_hooks.current_note_type_did_change_hook.remove(self.modelChanged) gui_hooks.current_note_type_did_change.remove(self.modelChanged)
QDialog.reject(self) QDialog.reject(self)
def helpRequested(self): def helpRequested(self):

View file

@ -341,7 +341,7 @@ close the profile or restart Anki."""
else: else:
self.handleImport(self.pendingImport) self.handleImport(self.pendingImport)
self.pendingImport = None self.pendingImport = None
gui_hooks.profile_did_open_hook() gui_hooks.profile_did_open()
if onsuccess: if onsuccess:
onsuccess() onsuccess()
@ -350,7 +350,7 @@ close the profile or restart Anki."""
self._unloadProfile() self._unloadProfile()
onsuccess() onsuccess()
gui_hooks.profile_will_close_hook() gui_hooks.profile_will_close()
self.unloadCollection(callback) self.unloadCollection(callback)
def _unloadProfile(self) -> None: def _unloadProfile(self) -> None:
@ -560,11 +560,11 @@ from the profile screen."
cleanup(state) cleanup(state)
self.clearStateShortcuts() self.clearStateShortcuts()
self.state = state self.state = state
gui_hooks.state_will_change_hook(state, oldState) gui_hooks.state_will_change(state, oldState)
getattr(self, "_" + state + "State")(oldState, *args) getattr(self, "_" + state + "State")(oldState, *args)
if state != "resetRequired": if state != "resetRequired":
self.bottomWeb.show() self.bottomWeb.show()
gui_hooks.state_did_change_hook(state, oldState) gui_hooks.state_did_change(state, oldState)
def _deckBrowserState(self, oldState: str) -> None: def _deckBrowserState(self, oldState: str) -> None:
self.deckBrowser.show() self.deckBrowser.show()
@ -574,7 +574,7 @@ from the profile screen."
self.enableColMenuItems() self.enableColMenuItems()
# ensure cwd is set if media dir exists # ensure cwd is set if media dir exists
self.col.media.dir() self.col.media.dir()
gui_hooks.collection_did_load_hook(self.col) gui_hooks.collection_did_load(self.col)
self.moveToState("overview") self.moveToState("overview")
def _selectedDeck(self) -> Optional[Dict[str, Any]]: def _selectedDeck(self) -> Optional[Dict[str, Any]]:
@ -605,7 +605,7 @@ from the profile screen."
if self.col: if self.col:
if not guiOnly: if not guiOnly:
self.col.reset() self.col.reset()
gui_hooks.state_did_reset_hook() gui_hooks.state_did_reset()
self.maybeEnableUndo() self.maybeEnableUndo()
self.moveToState(self.state) self.moveToState(self.state)
@ -847,7 +847,7 @@ QTreeWidget {
""" """
# allow addons to modify the styling # allow addons to modify the styling
buf = gui_hooks.style_did_setup_filter(buf) buf = gui_hooks.style_did_setup(buf)
# allow users to extend styling # allow users to extend styling
p = os.path.join(aqt.mw.pm.base, "style.css") p = os.path.join(aqt.mw.pm.base, "style.css")
@ -884,7 +884,7 @@ QTreeWidget {
return qshortcuts return qshortcuts
def setStateShortcuts(self, shortcuts: List[Tuple[str, Callable]]) -> None: def setStateShortcuts(self, shortcuts: List[Tuple[str, Callable]]) -> None:
gui_hooks.state_shortcuts_will_change_hook(self.state, shortcuts) gui_hooks.state_shortcuts_will_change(self.state, shortcuts)
# legacy hook # legacy hook
runHook(self.state + "StateShortcuts", shortcuts) runHook(self.state + "StateShortcuts", shortcuts)
self.stateShortcuts = self.applyShortcuts(shortcuts) self.stateShortcuts = self.applyShortcuts(shortcuts)
@ -928,22 +928,22 @@ QTreeWidget {
self.col.sched.reset() self.col.sched.reset()
self.reviewer.cardQueue.append(card) self.reviewer.cardQueue.append(card)
self.reviewer.nextCard() self.reviewer.nextCard()
gui_hooks.review_did_undo_hook(cid) gui_hooks.review_did_undo(cid)
else: else:
self.reset() self.reset()
tooltip(_("Reverted to state prior to '%s'.") % n.lower()) tooltip(_("Reverted to state prior to '%s'.") % n.lower())
gui_hooks.state_did_revert_hook(n) gui_hooks.state_did_revert(n)
self.maybeEnableUndo() self.maybeEnableUndo()
def maybeEnableUndo(self) -> None: def maybeEnableUndo(self) -> None:
if self.col and self.col.undoName(): if self.col and self.col.undoName():
self.form.actionUndo.setText(_("Undo %s") % self.col.undoName()) self.form.actionUndo.setText(_("Undo %s") % self.col.undoName())
self.form.actionUndo.setEnabled(True) self.form.actionUndo.setEnabled(True)
gui_hooks.undo_state_did_change_hook(True) gui_hooks.undo_state_did_change(True)
else: else:
self.form.actionUndo.setText(_("Undo")) self.form.actionUndo.setText(_("Undo"))
self.form.actionUndo.setEnabled(False) self.form.actionUndo.setEnabled(False)
gui_hooks.undo_state_did_change_hook(False) gui_hooks.undo_state_did_change(False)
def checkpoint(self, name): def checkpoint(self, name):
self.col.save(name) self.col.save(name)
@ -1153,12 +1153,12 @@ Difference to correct time: %s."""
########################################################################## ##########################################################################
def setupHooks(self) -> None: def setupHooks(self) -> None:
hooks.schema_will_change_filter.append(self.onSchemaMod) hooks.schema_will_change.append(self.onSchemaMod)
hooks.notes_will_delete_hook.append(self.onRemNotes) hooks.notes_will_delete.append(self.onRemNotes)
hooks.card_odue_was_invalid_hook.append(self.onOdueInvalid) hooks.card_odue_was_invalid.append(self.onOdueInvalid)
gui_hooks.mpv_will_play_hook.append(self.on_mpv_will_play) gui_hooks.mpv_will_play.append(self.on_mpv_will_play)
gui_hooks.mpv_did_idle_hook.append(self.on_mpv_idle) gui_hooks.mpv_did_idle.append(self.on_mpv_idle)
self._activeWindowOnPlay: Optional[QWidget] = None self._activeWindowOnPlay: Optional[QWidget] = None

View file

@ -18,7 +18,7 @@ class ModelChooser(QHBoxLayout):
self.setContentsMargins(0, 0, 0, 0) self.setContentsMargins(0, 0, 0, 0)
self.setSpacing(8) self.setSpacing(8)
self.setupModels() self.setupModels()
gui_hooks.state_did_reset_hook.append(self.onReset) gui_hooks.state_did_reset.append(self.onReset)
self.widget.setLayout(self) self.widget.setLayout(self)
def setupModels(self): def setupModels(self):
@ -41,7 +41,7 @@ class ModelChooser(QHBoxLayout):
self.updateModels() self.updateModels()
def cleanup(self): def cleanup(self):
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
def onReset(self): def onReset(self):
self.updateModels() self.updateModels()
@ -86,7 +86,7 @@ class ModelChooser(QHBoxLayout):
cdeck = self.deck.decks.current() cdeck = self.deck.decks.current()
cdeck["mid"] = m["id"] cdeck["mid"] = m["id"]
self.deck.decks.save(cdeck) self.deck.decks.save(cdeck)
gui_hooks.current_note_type_did_change_hook(current) gui_hooks.current_note_type_did_change(current)
self.mw.reset() self.mw.reset()
def updateModels(self): def updateModels(self):

View file

@ -41,7 +41,7 @@ class Reviewer:
self.typeCorrect = None # web init happens before this is set self.typeCorrect = None # web init happens before this is set
self.state = None self.state = None
self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb) self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb)
hooks.card_did_leech_hook.append(self.onLeech) hooks.card_did_leech.append(self.onLeech)
def show(self): def show(self):
self.mw.col.reset() self.mw.col.reset()
@ -62,7 +62,7 @@ class Reviewer:
return return
def cleanup(self): def cleanup(self):
gui_hooks.reviewer_will_end_hook() gui_hooks.reviewer_will_end()
# Fetching a card # Fetching a card
########################################################################## ##########################################################################
@ -187,7 +187,7 @@ The front of this card is empty. Please run Tools>Empty Cards."""
playFromText(q) playFromText(q)
# render & update bottom # render & update bottom
q = self._mungeQA(q) q = self._mungeQA(q)
q = gui_hooks.card_text_filter(q, c, "reviewQuestion") q = gui_hooks.card_text(q, c, "reviewQuestion")
bodyclass = bodyClass(self.mw.col, c) bodyclass = bodyClass(self.mw.col, c)
@ -199,7 +199,7 @@ The front of this card is empty. Please run Tools>Empty Cards."""
if self.typeCorrect: if self.typeCorrect:
self.mw.web.setFocus() self.mw.web.setFocus()
# user hook # user hook
gui_hooks.reviewer_question_did_show_hook(c) gui_hooks.reviewer_question_did_show(c)
def autoplay(self, card): def autoplay(self, card):
return self.mw.col.decks.confForDid(card.odid or card.did)["autoplay"] return self.mw.col.decks.confForDid(card.odid or card.did)["autoplay"]
@ -229,12 +229,12 @@ The front of this card is empty. Please run Tools>Empty Cards."""
if self.autoplay(c): if self.autoplay(c):
playFromText(a) playFromText(a)
a = self._mungeQA(a) a = self._mungeQA(a)
a = gui_hooks.card_text_filter(a, c, "reviewAnswer") a = gui_hooks.card_text(a, c, "reviewAnswer")
# render and update bottom # render and update bottom
self.web.eval("_showAnswer(%s);" % json.dumps(a)) self.web.eval("_showAnswer(%s);" % json.dumps(a))
self._showEaseButtons() self._showEaseButtons()
# user hook # user hook
gui_hooks.reviewer_answer_did_show_hook(c) gui_hooks.reviewer_answer_did_show(c)
# Answering a card # Answering a card
############################################################ ############################################################
@ -694,7 +694,7 @@ time = %(time)d;
m = QMenu(self.mw) m = QMenu(self.mw)
self._addMenuItems(m, opts) self._addMenuItems(m, opts)
gui_hooks.reviewer_context_menu_will_show_hook(self, m) gui_hooks.reviewer_context_menu_will_show(self, m)
qtMenuShortcutWorkaround(m) qtMenuShortcutWorkaround(m)
m.exec_(QCursor.pos()) m.exec_(QCursor.pos())

View file

@ -157,7 +157,7 @@ class MpvManager(MPV):
super().__init__(window_id=None, debug=False) super().__init__(window_id=None, debug=False)
def queueFile(self, file: str) -> None: def queueFile(self, file: str) -> None:
gui_hooks.mpv_will_play_hook(file) gui_hooks.mpv_will_play(file)
path = os.path.join(os.getcwd(), file) path = os.path.join(os.getcwd(), file)
self.command("loadfile", path, "append-play") self.command("loadfile", path, "append-play")
@ -172,7 +172,7 @@ class MpvManager(MPV):
self.command("seek", secs, "relative") self.command("seek", secs, "relative")
def on_idle(self) -> None: def on_idle(self) -> None:
gui_hooks.mpv_did_idle_hook() gui_hooks.mpv_did_idle()
def setMpvConfigBase(base) -> None: def setMpvConfigBase(base) -> None:
@ -377,7 +377,7 @@ def stopMplayer(*args) -> None:
cleanupOldMplayerProcesses() cleanupOldMplayerProcesses()
gui_hooks.profile_will_close_hook.append(stopMplayer) gui_hooks.profile_will_close.append(stopMplayer)
# PyAudio recording # PyAudio recording
########################################################################## ##########################################################################

View file

@ -32,7 +32,7 @@ class StudyDeck(QDialog):
self.form.setupUi(self) self.form.setupUi(self)
self.form.filter.installEventFilter(self) self.form.filter.installEventFilter(self)
self.cancel = cancel self.cancel = cancel
gui_hooks.state_did_reset_hook.append(self.onReset) gui_hooks.state_did_reset.append(self.onReset)
self.geomKey = "studyDeck-" + geomKey self.geomKey = "studyDeck-" + geomKey
restoreGeom(self, self.geomKey) restoreGeom(self, self.geomKey)
if not cancel: if not cancel:
@ -120,7 +120,7 @@ class StudyDeck(QDialog):
def accept(self): def accept(self):
saveGeom(self, self.geomKey) saveGeom(self, self.geomKey)
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
row = self.form.list.currentRow() row = self.form.list.currentRow()
if row < 0: if row < 0:
showInfo(_("Please select something.")) showInfo(_("Please select something."))
@ -130,7 +130,7 @@ class StudyDeck(QDialog):
def reject(self): def reject(self):
saveGeom(self, self.geomKey) saveGeom(self, self.geomKey)
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
QDialog.reject(self) QDialog.reject(self)
def onAddDeck(self): def onAddDeck(self):
@ -144,5 +144,5 @@ class StudyDeck(QDialog):
self.mw.col.decks.id(n) self.mw.col.decks.id(n)
self.name = n self.name = n
# make sure we clean up reset hook when manually exiting # make sure we clean up reset hook when manually exiting
gui_hooks.state_did_reset_hook.remove(self.onReset) gui_hooks.state_did_reset.remove(self.onReset)
QDialog.accept(self) QDialog.accept(self)

View file

@ -406,10 +406,10 @@ class SyncThread(QThread):
self._abort = 2 self._abort = 2
raise Exception("sync cancelled") raise Exception("sync cancelled")
hooks.sync_stage_did_change_hook.append(syncEvent) hooks.sync_stage_did_change.append(syncEvent)
hooks.sync_progress_did_change_hook.append(syncMsg) hooks.sync_progress_did_change.append(syncMsg)
hooks.http_data_did_send_hook.append(sendEvent) hooks.http_data_did_send.append(sendEvent)
hooks.http_data_did_receive_hook.append(recvEvent) hooks.http_data_did_receive.append(recvEvent)
# run sync and catch any errors # run sync and catch any errors
try: try:
self._sync() self._sync()
@ -419,10 +419,10 @@ class SyncThread(QThread):
finally: finally:
# don't bump mod time unless we explicitly save # don't bump mod time unless we explicitly save
self.col.close(save=False) self.col.close(save=False)
hooks.sync_stage_did_change_hook.remove(syncEvent) hooks.sync_stage_did_change.remove(syncEvent)
hooks.sync_progress_did_change_hook.remove(syncMsg) hooks.sync_progress_did_change.remove(syncMsg)
hooks.http_data_did_send_hook.remove(sendEvent) hooks.http_data_did_send.remove(sendEvent)
hooks.http_data_did_receive_hook.remove(recvEvent) hooks.http_data_did_receive.remove(recvEvent)
def _abortingSync(self): def _abortingSync(self):
try: try:

View file

@ -182,7 +182,7 @@ class AnkiWebView(QWebEngineView): # type: ignore
m = QMenu(self) m = QMenu(self)
a = m.addAction(_("Copy")) a = m.addAction(_("Copy"))
a.triggered.connect(self.onCopy) a.triggered.connect(self.onCopy)
gui_hooks.webview_context_menu_will_show_hook(self, m) gui_hooks.webview_context_menu_will_show(self, m)
m.popup(QCursor.pos()) m.popup(QCursor.pos())
def dropEvent(self, evt): def dropEvent(self, evt):