add save sound

This commit is contained in:
larssand
2026-08-28 13:39:12 +02:00
parent 5f79228941
commit fa3e5ee379
6 changed files with 62 additions and 9 deletions

View File

@@ -186,7 +186,7 @@ export function renderSettings(deps) {
<label><span>${t("audio.min_delay")}</span><input type="number" min="0" max="10" step="0.1" name="raceAudioMinDelay" form="settingsForm" value="${raceAudio.minStartDelay}" /></label>
<label><span>${t("audio.max_delay")}</span><input type="number" min="0" max="10" step="0.1" name="raceAudioMaxDelay" form="settingsForm" value="${raceAudio.maxStartDelay}" /></label>
<label class="toggle"><input type="checkbox" name="raceAudioPerCompetitor" form="settingsForm" ${raceAudio.perCompetitorPassingTone ? "checked" : ""} /><span>${t("audio.per_competitor")}</span></label>
<button id="settingsRaceAudioTest" class="btn" type="button">${t("audio.test")}</button>
<div class="actions-inline"><button id="settingsSaveRaceAudio" class="btn btn-primary" type="button">${t("common.save")}</button><button id="settingsRaceAudioTest" class="btn" type="button">${t("audio.test")}</button></div>
</div>
<div class="panel-body"><p class="hint">${t("audio.note")}</p><div class="table-wrap"><table class="audio-event-table"><thead><tr><th>Event</th><th>${t("audio.effect")}</th><th>${t("audio.voice")}</th><th></th></tr></thead><tbody>${raceAudioEventRows}</tbody></table></div></div>
</section>
@@ -484,6 +484,15 @@ export function renderSettings(deps) {
});
};
const persistRaceAudioFormValues = () => {
const formNode = document.getElementById("settingsForm");
if (!(formNode instanceof HTMLFormElement)) return false;
applyRaceAudioFormValues(new FormData(formNode));
state.settings.audioEnabled = state.settings.audioEnabled || state.settings.raceAudio.enabled;
saveState();
return true;
};
const applyAudioFormValues = () => {
const formNode = document.getElementById("settingsForm");
if (!(formNode instanceof HTMLFormElement)) return;
@@ -561,8 +570,16 @@ export function renderSettings(deps) {
});
document.getElementById("settingsConnect")?.addEventListener("click", connectDecoder);
document.getElementById("settingsRaceAudioTest")?.addEventListener("click", () => triggerRaceAudio("audio_test", { force: true, interrupt: true }));
document.querySelectorAll("[data-test-race-audio]").forEach((button) => button.addEventListener("click", () => triggerRaceAudio(button.dataset.testRaceAudio, { force: true, interrupt: true, variables: { driverName: state.drivers[0]?.name || "Driver", lapTime: "16.000", marshalPost: "1", transponder: "123", podium: "P1, P2, P3" } })));
document.querySelectorAll('[name^="raceAudio"]').forEach((control) => {
control.addEventListener("change", persistRaceAudioFormValues);
});
document.getElementById("settingsSaveRaceAudio")?.addEventListener("click", persistRaceAudioFormValues);
const testRaceAudio = (eventKey) => {
persistRaceAudioFormValues();
triggerRaceAudio(eventKey, { force: true, interrupt: true, variables: { driverName: state.drivers[0]?.name || "Driver", lapTime: "16.000", marshalPost: "1", transponder: "123", podium: "P1, P2, P3" } });
};
document.getElementById("settingsRaceAudioTest")?.addEventListener("click", () => testRaceAudio("audio_test"));
document.querySelectorAll("[data-test-race-audio]").forEach((button) => button.addEventListener("click", () => testRaceAudio(button.dataset.testRaceAudio)));
document.getElementById("settingsTestStart")?.addEventListener("click", () => {
applyAudioFormValues();
if (state.settings.startSoundEnabled) playStartCue();