fix(visualizer): auto-enable actually starts capture; persist audio device
Auto-enable was a no-op - Writing 'visualizerEnabled'='true' to localStorage from app.js did not update the exported `let visualizerEnabled` in player.js. So applyVisualizerMode() saw the stale `false` and went into the DISABLE branch — leaving the device 'available, not capturing'. - Add a setVisualizerEnabled() setter exported from player.js and call it before applyVisualizerMode() during boot. Audio device persistence - Save the selected device name to localStorage on change. - On loadAudioDevices(), prefer status.current_device (server's current state) but fall back to the localStorage value if the server doesn't know one (e.g. after a server restart). - If the saved device wasn't recognized by the server, push it back via POST /api/media/visualizer/device so capture lands on it immediately. Best-effort; no toast on failure.
This commit is contained in:
@@ -22,7 +22,7 @@ import {
|
||||
initTheme, toggleTheme, initAccentColor, applyAccentColor,
|
||||
renderAccentSwatches, selectAccentColor, toggleAccentPicker, lightenColor,
|
||||
toggleVinylMode, applyVinylMode,
|
||||
visualizerEnabled, visualizerAvailable,
|
||||
visualizerEnabled, visualizerAvailable, setVisualizerEnabled,
|
||||
checkVisualizerAvailability, toggleVisualizer, applyVisualizerMode,
|
||||
loadAudioDevices, onAudioDeviceChanged,
|
||||
setupProgressDrag, updateUI, updatePlaybackState, stopPositionInterpolation,
|
||||
@@ -186,14 +186,13 @@ window.addEventListener('DOMContentLoaded', async () => {
|
||||
// Initialize audio visualizer — auto-enable when supported so the
|
||||
// spectrum shows real audio out of the box.
|
||||
checkVisualizerAvailability().then(() => {
|
||||
if (visualizerAvailable && !visualizerEnabled) {
|
||||
// Auto-enable on first install if loopback capture works.
|
||||
if (localStorage.getItem('visualizerEnabled') === null) {
|
||||
localStorage.setItem('visualizerEnabled', 'true');
|
||||
}
|
||||
}
|
||||
if ((visualizerEnabled || localStorage.getItem('visualizerEnabled') === 'true')
|
||||
&& visualizerAvailable) {
|
||||
if (!visualizerAvailable) return;
|
||||
// First install: opt the user in by default since the spectrum
|
||||
// is the centerpiece of the player view.
|
||||
const stored = localStorage.getItem('visualizerEnabled');
|
||||
const shouldEnable = stored === null ? true : stored === 'true';
|
||||
if (shouldEnable) {
|
||||
setVisualizerEnabled(true); // updates the let in player.js
|
||||
applyVisualizerMode();
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user