add reviewer_will_play_question_sounds and reviewer_will_play_answer_sounds hooks

This commit is contained in:
ANH 2020-07-30 21:06:16 +03:00
parent 215413ce25
commit b4b12f1642
3 changed files with 74 additions and 4 deletions

View file

@ -2112,6 +2112,60 @@ class _ReviewerWillEndHook:
reviewer_will_end = _ReviewerWillEndHook()
class _ReviewerWillPlayAnswerSoundsHook:
_hooks: List[Callable[[Card, "List[anki.sound.AVTag]"], None]] = []
def append(self, cb: Callable[[Card, "List[anki.sound.AVTag]"], None]) -> None:
"""(card: Card, tags: List[anki.sound.AVTag])"""
self._hooks.append(cb)
def remove(self, cb: Callable[[Card, "List[anki.sound.AVTag]"], None]) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card: Card, tags: List[anki.sound.AVTag]) -> None:
for hook in self._hooks:
try:
hook(card, tags)
except:
# if the hook fails, remove it
self._hooks.remove(hook)
raise
reviewer_will_play_answer_sounds = _ReviewerWillPlayAnswerSoundsHook()
class _ReviewerWillPlayQuestionSoundsHook:
_hooks: List[Callable[[Card, "List[anki.sound.AVTag]"], None]] = []
def append(self, cb: Callable[[Card, "List[anki.sound.AVTag]"], None]) -> None:
"""(card: Card, tags: List[anki.sound.AVTag])"""
self._hooks.append(cb)
def remove(self, cb: Callable[[Card, "List[anki.sound.AVTag]"], None]) -> None:
if cb in self._hooks:
self._hooks.remove(cb)
def count(self) -> int:
return len(self._hooks)
def __call__(self, card: Card, tags: List[anki.sound.AVTag]) -> None:
for hook in self._hooks:
try:
hook(card, tags)
except:
# if the hook fails, remove it
self._hooks.remove(hook)
raise
reviewer_will_play_question_sounds = _ReviewerWillPlayQuestionSoundsHook()
class _ReviewerWillShowContextMenuHook:
_hooks: List[Callable[["aqt.reviewer.Reviewer", QMenu], None]] = []

View file

@ -183,10 +183,14 @@ class Reviewer:
q = c.q()
# play audio?
if c.autoplay():
av_player.play_tags(c.question_av_tags())
sounds = c.question_av_tags()
gui_hooks.reviewer_will_play_question_sounds(c, sounds)
av_player.play_tags(sounds)
else:
av_player.clear_queue_and_maybe_interrupt()
sounds = []
gui_hooks.reviewer_will_play_question_sounds(c, sounds)
av_player.play_tags(sounds)
# render & update bottom
q = self._mungeQA(q)
q = gui_hooks.card_will_show(q, c, "reviewQuestion")
@ -225,10 +229,14 @@ class Reviewer:
a = c.a()
# play audio?
if c.autoplay():
av_player.play_tags(c.answer_av_tags())
sounds = c.answer_av_tags()
gui_hooks.reviewer_will_play_answer_sounds(c, sounds)
av_player.play_tags(sounds)
else:
av_player.clear_queue_and_maybe_interrupt()
sounds = []
gui_hooks.reviewer_will_play_answer_sounds(c, sounds)
av_player.play_tags(sounds)
a = self._mungeQA(a)
a = gui_hooks.card_will_show(a, c, "reviewAnswer")
# render and update bottom

View file

@ -90,6 +90,14 @@ hooks = [
legacy_hook="reviewCleanup",
doc="Called before Anki transitions from the review screen to another screen.",
),
Hook(
name="reviewer_will_play_question_sounds",
args=["card: Card", "tags: List[anki.sound.AVTag]"],
),
Hook(
name="reviewer_will_play_answer_sounds",
args=["card: Card", "tags: List[anki.sound.AVTag]"],
),
# Debug
###################
Hook(