fixes for soundboard, added volume switch

This commit is contained in:
oberon 2026-02-18 22:13:19 +01:00
parent 1658321b67
commit 232f250aa5

View File

@ -25,6 +25,11 @@
</div>
<div id="sb-content" style="display:none">
<div class="mb-4">
<label class="form-label fw-bold">Lautstärke</label>
<input type="range" class="form-range" id="sb-volume" min="0" max="100" value="80" step="5">
<small class="text-muted">Wirkt global auf alle Soundboard-Kanäle.</small>
</div>
<div id="sb-backgrounds" class="mb-4"></div>
<div id="sb-sounds" class="mb-4"></div>
<div id="sb-random" class="mb-4"></div>
@ -44,6 +49,9 @@
const content = document.getElementById('sb-content');
let currentSB = null;
const statusBox = (msg, type='info') => {
console.log(msg);
};
async function loadSoundboard(filename) {
loadBtn.disabled = true;
@ -107,7 +115,8 @@
function renderRandom(list) {
const container = document.getElementById('sb-random');
if (!list.length) { container.innerHTML=''; randBtn.disabled=true; return; }
container.innerHTML = '<p class="text-muted">Zufallspool: ' + list.length + ' Dateien, max 2x pro Stunde je Datei.</p>';
const items = list.map(s => `<li>${s.name || s.id || s.file}</li>`).join('');
container.innerHTML = '<h4>Zufallspool</h4><p class="text-muted">max 2x pro Stunde je Datei.</p><ul>' + items + '</ul>';
}
async function playSound(sound) {
@ -122,7 +131,7 @@
body: JSON.stringify(payload)
});
const data = await res.json();
if (!data.success) alert(data.message || 'Fehler beim Abspielen');
if (!data.success) statusBox(data.message || 'Fehler beim Abspielen', 'warn');
}
async function stopSound(channel) {
@ -132,16 +141,29 @@
body: JSON.stringify({ channel })
});
const data = await res.json();
if (!data.success) alert(data.message || 'Fehler beim Stoppen');
if (!data.success) statusBox(data.message || 'Fehler beim Stoppen', 'warn');
}
loadBtn.onclick = () => loadSoundboard(selectEl.value);
randBtn.onclick = async () => {
const res = await fetch('/api/soundboard/play_random', { method: 'POST' });
const data = await res.json();
if (!data.success) alert(data.message || 'Random fehlgeschlagen');
if (!data.success) statusBox(data.message || 'Random fehlgeschlagen', 'warn');
};
// Lautstärke
const vol = document.getElementById('sb-volume');
if (vol) {
vol.addEventListener('input', async () => {
const v = parseInt(vol.value, 10) / 100;
await fetch('/api/set_volume', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ volume: v })
});
});
}
// Autoload erstes Thema (falls vorhanden)
if (selectEl && selectEl.value) {
loadSoundboard(selectEl.value);