Added: Placeholder audio autoplay

This commit is contained in:
Luc Mcgrady 2025-10-30 17:56:02 +00:00
parent 4897ea8173
commit 7561bf8d6a
No known key found for this signature in database
GPG key ID: 4F3D7A0B17CC3D9C
4 changed files with 20 additions and 12 deletions

View file

@ -31,6 +31,8 @@ service FrontendService {
// Save colour picker's custom colour palette // Save colour picker's custom colour palette
rpc SaveCustomColours(generic.Empty) returns (generic.Empty); rpc SaveCustomColours(generic.Empty) returns (generic.Empty);
// Plays an audio tag at an index in a specific card
// If the index is blank, plays all audio on that side
rpc PlayAudio(PlayAudioRequest) returns (generic.Empty); rpc PlayAudio(PlayAudioRequest) returns (generic.Empty);
} }
@ -48,6 +50,6 @@ message SetSchedulingStatesRequest {
message PlayAudioRequest { message PlayAudioRequest {
bool answer_side = 1; bool answer_side = 1;
uint32 index = 2; optional uint32 index = 2;
uint64 cid = 3; uint64 cid = 3;
} }

View file

@ -46,7 +46,7 @@ from aqt.operations import on_op_finished
from aqt.operations.deck import update_deck_configs as update_deck_configs_op from aqt.operations.deck import update_deck_configs as update_deck_configs_op
from aqt.progress import ProgressUpdate from aqt.progress import ProgressUpdate
from aqt.qt import * from aqt.qt import *
from aqt.sound import play_clicked_audio_with_index from aqt.sound import play_tags
from aqt.theme import ThemeManager from aqt.theme import ThemeManager
from aqt.utils import aqt_data_path, show_warning, tr from aqt.utils import aqt_data_path, show_warning, tr
@ -688,7 +688,12 @@ def next_card_data() -> bytes:
def play_audio(): def play_audio():
req = PlayAudioRequest.FromString(request.data) req = PlayAudioRequest.FromString(request.data)
card = aqt.mw.col.get_card(CardId(req.cid)) card = aqt.mw.col.get_card(CardId(req.cid))
play_clicked_audio_with_index(req.index, req.answer_side, card) # TODO: Pass tags with next_card_data rather than rendering the card here.
tags = card.answer_av_tags() if req.answer_side else card.question_av_tags()
if req.index is None:
play_tags(tags)
else:
play_tags([tags[req.index]])
post_handler_list = [ post_handler_list = [

View file

@ -925,16 +925,11 @@ def play_clicked_audio(pycmd: str, card: Card) -> None:
"""eg. if pycmd is 'play:q:0', play the first audio on the question side.""" """eg. if pycmd is 'play:q:0', play the first audio on the question side."""
play, context, str_idx = pycmd.split(":") play, context, str_idx = pycmd.split(":")
idx = int(str_idx) idx = int(str_idx)
play_clicked_audio_with_index(idx, context == "q", card) tags = card.question_av_tags() if context == "q" else card.answer_av_tags()
play_tags([tags[idx]])
def play_clicked_audio_with_index(index: int, answer_side: bool, card: Card): play_tags = av_player.play_tags
if answer_side:
tags = card.answer_av_tags()
else:
tags = card.question_av_tags()
av_player.play_tags([tags[index]])
# Init defaults # Init defaults
########################################################################## ##########################################################################

View file

@ -41,10 +41,14 @@ export class ReviewerState {
addEventListener("message", this.onMessage.bind(this)); addEventListener("message", this.onMessage.bind(this));
} }
playAudio(answerSide: boolean, index?: number) {
playAudio({ answerSide, index, cid: this.currentCard!.card!.id });
}
onMessage(e: MessageEvent<ReviewerRequest>) { onMessage(e: MessageEvent<ReviewerRequest>) {
switch (e.data.type) { switch (e.data.type) {
case "audio": { case "audio": {
playAudio({ answerSide: e.data.answerSide, index: e.data.index, cid: this.currentCard!.card!.id }); this.playAudio(e.data.answerSide, e.data.index);
break; break;
} }
} }
@ -108,6 +112,7 @@ export class ReviewerState {
const question = resp.nextCard?.front || ""; const question = resp.nextCard?.front || "";
this.updateHtml(question, resp?.nextCard?.css, resp?.nextCard?.bodyClass); this.updateHtml(question, resp?.nextCard?.css, resp?.nextCard?.bodyClass);
this.playAudio(false)
this.beginAnsweringMs = Date.now(); this.beginAnsweringMs = Date.now();
} }
@ -118,6 +123,7 @@ export class ReviewerState {
public showAnswer() { public showAnswer() {
this.answerShown.set(true); this.answerShown.set(true);
this.playAudio(true)
this.updateHtml(this._cardData?.back || ""); this.updateHtml(this._cardData?.back || "");
} }