mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
add .count() to hooks, and list->sequence in note deletion
This commit is contained in:
parent
abe90d0772
commit
e1b0fe1832
4 changed files with 296 additions and 7 deletions
|
@ -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:
|
||||
|
|
|
@ -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"]),
|
||||
|
|
|
@ -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()}()
|
||||
"""
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue