add .count() to hooks, and list->sequence in note deletion

This commit is contained in:
Damien Elmes 2020-06-04 18:20:03 +10:00
parent abe90d0772
commit e1b0fe1832
4 changed files with 296 additions and 7 deletions

View file

@ -12,7 +12,7 @@ modifying it.
from __future__ import annotations
from typing import Any, Callable, Dict, List, Tuple
from typing import Any, Callable, Dict, List, Sequence, Tuple
import decorator
@ -39,6 +39,9 @@ class _CardDidLeechHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card: Card) -> None:
for hook in self._hooks:
try:
@ -93,6 +96,9 @@ class _CardDidRenderHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self,
output: anki.template.TemplateRenderOutput,
@ -121,6 +127,9 @@ class _CardOdueWasInvalidHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -147,6 +156,9 @@ class _CardWillFlushHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card: Card) -> None:
for hook in self._hooks:
try:
@ -173,6 +185,9 @@ class _DeckAddedHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, deck: Dict[str, Any]) -> None:
for hook in self._hooks:
try:
@ -197,6 +212,9 @@ class _ExportersListCreatedHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, exporters: List[Tuple[str, Any]]) -> None:
for hook in self._hooks:
try:
@ -234,6 +252,9 @@ class _FieldFilterFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self,
field_text: str,
@ -265,6 +286,9 @@ class _MediaFilesDidExportHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, count: int) -> None:
for hook in self._hooks:
try:
@ -291,6 +315,9 @@ class _NoteTypeAddedHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, notetype: Dict[str, Any]) -> None:
for hook in self._hooks:
try:
@ -317,6 +344,9 @@ class _NoteWillFlushHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, note: Note) -> None:
for hook in self._hooks:
try:
@ -331,21 +361,24 @@ note_will_flush = _NoteWillFlushHook()
class _NotesWillBeDeletedHook:
_hooks: List[Callable[["anki.collection.Collection", List[int]], None]] = []
_hooks: List[Callable[["anki.collection.Collection", Sequence[int]], None]] = []
def append(
self, cb: Callable[["anki.collection.Collection", List[int]], None]
self, cb: Callable[["anki.collection.Collection", Sequence[int]], None]
) -> None:
"""(col: anki.collection.Collection, ids: List[int])"""
"""(col: anki.collection.Collection, ids: Sequence[int])"""
self._hooks.append(cb)
def remove(
self, cb: Callable[["anki.collection.Collection", List[int]], None]
self, cb: Callable[["anki.collection.Collection", Sequence[int]], None]
) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def __call__(self, col: anki.collection.Collection, ids: List[int]) -> None:
def count(self) -> int:
return len(self._hooks)
def __call__(self, col: anki.collection.Collection, ids: Sequence[int]) -> None:
for hook in self._hooks:
try:
hook(col, ids)
@ -374,6 +407,9 @@ class _SchedulerNewLimitForSingleDeckFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, count: int, deck: Dict[str, Any]) -> int:
for filter in self._hooks:
try:
@ -402,6 +438,9 @@ class _SchedulerReviewLimitForSingleDeckFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, count: int, deck: Dict[str, Any]) -> int:
for filter in self._hooks:
try:
@ -427,6 +466,9 @@ class _Schedv2DidAnswerReviewCardHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card: anki.cards.Card, ease: int, early: bool) -> None:
for hook in self._hooks:
try:
@ -451,6 +493,9 @@ class _SchemaWillChangeFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, proceed: bool) -> bool:
for filter in self._hooks:
try:
@ -478,6 +523,9 @@ class _SyncProgressDidChangeHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, msg: str) -> None:
for hook in self._hooks:
try:
@ -504,6 +552,9 @@ class _SyncStageDidChangeHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, stage: str) -> None:
for hook in self._hooks:
try:

View file

@ -24,7 +24,7 @@ hooks = [
Hook(name="schema_will_change", args=["proceed: bool"], return_type="bool"),
Hook(
name="notes_will_be_deleted",
args=["col: anki.collection.Collection", "ids: List[int]"],
args=["col: anki.collection.Collection", "ids: Sequence[int]"],
legacy_hook="remNotes",
),
Hook(name="media_files_did_export", args=["count: int"]),

View file

@ -83,6 +83,10 @@ class {self.classname()}:
def remove(self, cb: {self.callable()}) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
{self.fire_code()}
{self.name} = {self.classname()}()
"""

View file

@ -35,6 +35,9 @@ class _AddCardsDidAddNoteHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, note: anki.notes.Note) -> None:
for hook in self._hooks:
try:
@ -61,6 +64,9 @@ class _AddCardsDidInitHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, addcards: aqt.addcards.AddCards) -> None:
for hook in self._hooks:
try:
@ -97,6 +103,9 @@ class _AddCardsWillAddNoteFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, problem: Optional[str], note: anki.notes.Note) -> Optional[str]:
for filter in self._hooks:
try:
@ -122,6 +131,9 @@ class _AddCardsWillShowHistoryMenuHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, addcards: aqt.addcards.AddCards, menu: QMenu) -> None:
for hook in self._hooks:
try:
@ -154,6 +166,9 @@ class _AddonConfigEditorWillDisplayJsonFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, text: str) -> str:
for filter in self._hooks:
try:
@ -183,6 +198,9 @@ class _AddonConfigEditorWillSaveJsonFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, text: str) -> str:
for filter in self._hooks:
try:
@ -216,6 +234,9 @@ class _AddonsDialogDidChangeSelectedAddonHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, dialog: aqt.addons.AddonsDialog, add_on: aqt.addons.AddonMeta
) -> None:
@ -245,6 +266,9 @@ class _AddonsDialogWillShowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, dialog: aqt.addons.AddonsDialog) -> None:
for hook in self._hooks:
try:
@ -273,6 +297,9 @@ class _AvPlayerDidBeginPlayingHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, player: aqt.sound.Player, tag: anki.sound.AVTag) -> None:
for hook in self._hooks:
try:
@ -297,6 +324,9 @@ class _AvPlayerDidEndPlayingHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, player: aqt.sound.Player) -> None:
for hook in self._hooks:
try:
@ -321,6 +351,9 @@ class _AvPlayerWillPlayHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, tag: anki.sound.AVTag) -> None:
for hook in self._hooks:
try:
@ -345,6 +378,9 @@ class _BackupDidCompleteHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -369,6 +405,9 @@ class _BrowserDidChangeRowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, browser: aqt.browser.Browser) -> None:
for hook in self._hooks:
try:
@ -397,6 +436,9 @@ class _BrowserDidSearchHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, context: aqt.browser.SearchContext) -> None:
for hook in self._hooks:
try:
@ -421,6 +463,9 @@ class _BrowserHeaderWillShowContextMenuHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, browser: aqt.browser.Browser, menu: QMenu) -> None:
for hook in self._hooks:
try:
@ -445,6 +490,9 @@ class _BrowserMenusDidInitHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, browser: aqt.browser.Browser) -> None:
for hook in self._hooks:
try:
@ -539,6 +587,9 @@ class _BrowserWillBuildTreeFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self,
handled: bool,
@ -582,6 +633,9 @@ class _BrowserWillSearchHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, context: aqt.browser.SearchContext) -> None:
for hook in self._hooks:
try:
@ -606,6 +660,9 @@ class _BrowserWillShowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, browser: aqt.browser.Browser) -> None:
for hook in self._hooks:
try:
@ -630,6 +687,9 @@ class _BrowserWillShowContextMenuHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, browser: aqt.browser.Browser, menu: QMenu) -> None:
for hook in self._hooks:
try:
@ -659,6 +719,9 @@ class _CardLayoutWillShowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, clayout: aqt.clayout.CardLayout) -> None:
for hook in self._hooks:
try:
@ -685,6 +748,9 @@ class _CardWillShowFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, text: str, card: Card, kind: str) -> str:
for filter in self._hooks:
try:
@ -712,6 +778,9 @@ class _CollectionDidLoadHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, col: anki.collection.Collection) -> None:
for hook in self._hooks:
try:
@ -738,6 +807,9 @@ class _CurrentNoteTypeDidChangeHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, notetype: Dict[str, Any]) -> None:
for hook in self._hooks:
try:
@ -767,6 +839,9 @@ class _DebugConsoleDidEvaluatePythonFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, output: str, query: str, debug_window: QDialog) -> str:
for filter in self._hooks:
try:
@ -795,6 +870,9 @@ class _DebugConsoleWillShowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, debug_window: QDialog) -> None:
for hook in self._hooks:
try:
@ -821,6 +899,9 @@ class _DeckBrowserDidRenderHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, deck_browser: aqt.deckbrowser.DeckBrowser) -> None:
for hook in self._hooks:
try:
@ -874,6 +955,9 @@ class _DeckBrowserWillRenderContentHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self,
deck_browser: aqt.deckbrowser.DeckBrowser,
@ -902,6 +986,9 @@ class _DeckBrowserWillShowOptionsMenuHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, menu: QMenu, deck_id: int) -> None:
for hook in self._hooks:
try:
@ -943,6 +1030,9 @@ class _DeckConfDidAddConfigHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self,
deck_conf: aqt.deckconf.DeckConf,
@ -976,6 +1066,9 @@ class _DeckConfDidLoadConfigHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, deck_conf: aqt.deckconf.DeckConf, deck: Any, config: Any
) -> None:
@ -1004,6 +1097,9 @@ class _DeckConfDidSetupUiFormHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, deck_conf: aqt.deckconf.DeckConf) -> None:
for hook in self._hooks:
try:
@ -1030,6 +1126,9 @@ class _DeckConfWillRemoveConfigHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, deck_conf: aqt.deckconf.DeckConf, deck: Any, config: Any
) -> None:
@ -1062,6 +1161,9 @@ class _DeckConfWillRenameConfigHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, deck_conf: aqt.deckconf.DeckConf, deck: Any, config: Any, new_name: str
) -> None:
@ -1090,6 +1192,9 @@ class _DeckConfWillSaveConfigHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, deck_conf: aqt.deckconf.DeckConf, deck: Any, config: Any
) -> None:
@ -1118,6 +1223,9 @@ class _DeckConfWillShowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, deck_conf: aqt.deckconf.DeckConf) -> None:
for hook in self._hooks:
try:
@ -1142,6 +1250,9 @@ class _EditorDidFireTypingTimerHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, note: anki.notes.Note) -> None:
for hook in self._hooks:
try:
@ -1168,6 +1279,9 @@ class _EditorDidFocusFieldHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, note: anki.notes.Note, current_field_idx: int) -> None:
for hook in self._hooks:
try:
@ -1194,6 +1308,9 @@ class _EditorDidInitHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, editor: aqt.editor.Editor) -> None:
for hook in self._hooks:
try:
@ -1218,6 +1335,9 @@ class _EditorDidInitButtonsHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, buttons: List, editor: aqt.editor.Editor) -> None:
for hook in self._hooks:
try:
@ -1242,6 +1362,9 @@ class _EditorDidInitShortcutsHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, shortcuts: List[Tuple], editor: aqt.editor.Editor) -> None:
for hook in self._hooks:
try:
@ -1268,6 +1391,9 @@ class _EditorDidLoadNoteHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, editor: aqt.editor.Editor) -> None:
for hook in self._hooks:
try:
@ -1294,6 +1420,9 @@ class _EditorDidUnfocusFieldFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, changed: bool, note: anki.notes.Note, current_field_idx: int
) -> bool:
@ -1323,6 +1452,9 @@ class _EditorDidUpdateTagsHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, note: anki.notes.Note) -> None:
for hook in self._hooks:
try:
@ -1349,6 +1481,9 @@ class _EditorWebViewDidInitHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, editor_web_view: aqt.editor.EditorWebView) -> None:
for hook in self._hooks:
try:
@ -1380,6 +1515,9 @@ class _EditorWillLoadNoteFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, js: str, note: anki.notes.Note, editor: aqt.editor.Editor
) -> str:
@ -1407,6 +1545,9 @@ class _EditorWillShowContextMenuHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, editor_webview: aqt.editor.EditorWebView, menu: QMenu) -> None:
for hook in self._hooks:
try:
@ -1433,6 +1574,9 @@ class _EditorWillUseFontForFieldFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, font: str) -> str:
for filter in self._hooks:
try:
@ -1462,6 +1606,9 @@ class _EmptyCardsWillShowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, diag: aqt.emptycards.EmptyCardsDialog) -> None:
for hook in self._hooks:
try:
@ -1494,6 +1641,9 @@ class _MainWindowDidInitHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -1518,6 +1668,9 @@ class _MediaSyncDidProgressHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, entry: aqt.mediasync.LogEntryWithTime) -> None:
for hook in self._hooks:
try:
@ -1542,6 +1695,9 @@ class _MediaSyncDidStartOrStopHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, running: bool) -> None:
for hook in self._hooks:
try:
@ -1566,6 +1722,9 @@ class _ModelsAdvancedWillShowHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, advanced: QDialog) -> None:
for hook in self._hooks:
try:
@ -1593,6 +1752,9 @@ class _OverviewDidRefreshHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, overview: aqt.overview.Overview) -> None:
for hook in self._hooks:
try:
@ -1640,6 +1802,9 @@ class _OverviewWillRenderContentHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, overview: aqt.overview.Overview, content: aqt.overview.OverviewContent
) -> None:
@ -1673,6 +1838,9 @@ class _ProfileDidOpenHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -1699,6 +1867,9 @@ class _ProfileWillCloseHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -1725,6 +1896,9 @@ class _ReviewDidUndoHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card_id: int) -> None:
for hook in self._hooks:
try:
@ -1751,6 +1925,9 @@ class _ReviewerDidAnswerCardHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, reviewer: aqt.reviewer.Reviewer, card: Card, ease: int) -> None:
for hook in self._hooks:
try:
@ -1775,6 +1952,9 @@ class _ReviewerDidShowAnswerHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card: Card) -> None:
for hook in self._hooks:
try:
@ -1801,6 +1981,9 @@ class _ReviewerDidShowQuestionHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card: Card) -> None:
for hook in self._hooks:
try:
@ -1849,6 +2032,9 @@ class _ReviewerWillAnswerCardFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, ease_tuple: Tuple[bool, int], reviewer: aqt.reviewer.Reviewer, card: Card
) -> Tuple[bool, int]:
@ -1878,6 +2064,9 @@ class _ReviewerWillEndHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -1904,6 +2093,9 @@ class _ReviewerWillShowContextMenuHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, reviewer: aqt.reviewer.Reviewer, menu: QMenu) -> None:
for hook in self._hooks:
try:
@ -1930,6 +2122,9 @@ class _SidebarShouldRefreshDecksHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -1954,6 +2149,9 @@ class _SidebarShouldRefreshNotetypesHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -1978,6 +2176,9 @@ class _StateDidChangeHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, new_state: str, old_state: str) -> None:
for hook in self._hooks:
try:
@ -2006,6 +2207,9 @@ class _StateDidResetHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self) -> None:
for hook in self._hooks:
try:
@ -2034,6 +2238,9 @@ class _StateDidRevertHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, action: str) -> None:
for hook in self._hooks:
try:
@ -2060,6 +2267,9 @@ class _StateShortcutsWillChangeHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, state: str, shortcuts: List[Tuple[str, Callable]]) -> None:
for hook in self._hooks:
try:
@ -2084,6 +2294,9 @@ class _StateWillChangeHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, new_state: str, old_state: str) -> None:
for hook in self._hooks:
try:
@ -2110,6 +2323,9 @@ class _StyleDidInitFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, style: str) -> str:
for filter in self._hooks:
try:
@ -2137,6 +2353,9 @@ class _TagEditorDidProcessKeyHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, tag_edit: TagEdit, evt: QEvent) -> None:
for hook in self._hooks:
try:
@ -2172,6 +2391,9 @@ class _TopToolbarDidInitLinksHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, links: List[str], top_toolbar: aqt.toolbar.Toolbar) -> None:
for hook in self._hooks:
try:
@ -2196,6 +2418,9 @@ class _UndoStateDidChangeHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, can_undo: bool) -> None:
for hook in self._hooks:
try:
@ -2257,6 +2482,9 @@ class _WebviewDidReceiveJsMessageFilter:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, handled: Tuple[bool, Any], message: str, context: Any
) -> Tuple[bool, Any]:
@ -2319,6 +2547,9 @@ class _WebviewWillSetContentHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(
self, web_content: aqt.webview.WebContent, context: Optional[Any]
) -> None:
@ -2345,6 +2576,9 @@ class _WebviewWillShowContextMenuHook:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, webview: aqt.webview.AnkiWebView, menu: QMenu) -> None:
for hook in self._hooks:
try: