fix replay audio again, and decouple the code from the reviewer

This commit is contained in:
Damien Elmes 2020-04-13 08:59:36 +10:00
parent e838769d02
commit 10eb947402
3 changed files with 22 additions and 21 deletions

View file

@ -166,6 +166,10 @@ class Card:
conf = self.col.decks.confForDid(self.odid or self.did) conf = self.col.decks.confForDid(self.odid or self.did)
return conf["timer"] return conf["timer"]
def replay_question_audio_on_answer_side(self) -> bool:
conf = self.col.decks.confForDid(self.odid or self.did)
return conf.get("replayq", True)
def timeTaken(self) -> int: def timeTaken(self) -> int:
"Time taken to answer card, in integer MS." "Time taken to answer card, in integer MS."
total = int((time.time() - self.timerStarted) * 1000) total = int((time.time() - self.timerStarted) * 1000)

View file

@ -21,6 +21,7 @@ from aqt.qt import (
QWidget, QWidget,
qconnect, qconnect,
) )
from aqt.reviewer import replay_audio
from aqt.sound import av_player, play_clicked_audio from aqt.sound import av_player, play_clicked_audio
from aqt.theme import theme_manager from aqt.theme import theme_manager
from aqt.utils import restoreGeom, saveGeom from aqt.utils import restoreGeom, saveGeom
@ -88,7 +89,10 @@ class Previewer(QDialog):
self.mw.progress.timer(100, self._on_close, False) self.mw.progress.timer(100, self._on_close, False)
def _on_replay_audio(self): def _on_replay_audio(self):
self.mw.reviewer.replayAudio(self) if self._state == "question":
replay_audio(self.card(), True)
elif self._state == "answer":
replay_audio(self.card(), False)
def close(self): def close(self):
self._on_close() self._on_close()

View file

@ -29,6 +29,14 @@ class ReviewerBottomBar:
def __init__(self, reviewer: Reviewer) -> None: def __init__(self, reviewer: Reviewer) -> None:
self.reviewer = reviewer self.reviewer = reviewer
def replay_audio(card: Card, question_side: bool) -> None:
if question_side:
av_player.play_tags(card.question_av_tags())
else:
tags = card.answer_av_tags()
if card.replay_question_audio_on_answer_side():
tags = card.question_av_tags() + tags
av_player.play_tags(tags)
class Reviewer: class Reviewer:
"Manage reviews. Maintains a separate state." "Manage reviews. Maintains a separate state."
@ -110,20 +118,11 @@ class Reviewer:
# Audio # Audio
########################################################################## ##########################################################################
def replayAudio(self, previewer=None): def replayAudio(self) -> None:
if previewer: if self.state == "question":
state = previewer.state() replay_audio(self.card, True)
c = previewer.card() elif self.state == "answer":
else: replay_audio(self.card, False)
state = self.state
c = self.card
if state == "question":
av_player.play_tags(c.question_av_tags())
elif state == "answer":
tags = c.answer_av_tags()
if self._replayq(c, previewer):
tags = c.question_av_tags() + tags
av_player.play_tags(tags)
# Initializing the webview # Initializing the webview
########################################################################## ##########################################################################
@ -212,12 +211,6 @@ The front of this card is empty. Please run Tools>Empty Cards."""
def autoplay(self, card: Card) -> bool: def autoplay(self, card: Card) -> bool:
return self.mw.col.decks.confForDid(card.odid or card.did)["autoplay"] return self.mw.col.decks.confForDid(card.odid or card.did)["autoplay"]
def _replayq(self, card, previewer=None):
s = previewer if previewer else self
return s.mw.col.decks.confForDid(s.card().odid or s.card().did).get(
"replayq", True
)
def _drawFlag(self) -> None: def _drawFlag(self) -> None:
self.web.eval("_drawFlag(%s);" % self.card.userFlag()) self.web.eval("_drawFlag(%s);" % self.card.userFlag())