From aa9a2cf225109ca9c1c97c96e34821377e4f86a7 Mon Sep 17 00:00:00 2001 From: Luis Pereira Date: Sun, 2 Nov 2025 22:44:33 +0000 Subject: [PATCH] feat: persist stream quality in local storage --- static/js/front-page.js | 8 ++++++++ static/js/player.js | 7 +++++++ template/audio-player-frame.ctml | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/static/js/front-page.js b/static/js/front-page.js index ff41d5f..5144f89 100644 --- a/static/js/front-page.js +++ b/static/js/front-page.js @@ -30,6 +30,9 @@ function changeStreamQuality() { const streamBaseUrl = document.getElementById('stream-base-url'); const config = getStreamConfig(streamBaseUrl.value, selector.value); + // Save preference + localStorage.setItem('stream-quality', selector.value); + // Update UI elements document.getElementById('stream-url').textContent = config.url; document.getElementById('stream-format').textContent = config.format; @@ -79,6 +82,11 @@ window.addEventListener('DOMContentLoaded', function() { // Set initial quality display to match the selected stream const selector = document.getElementById('stream-quality'); const streamBaseUrl = document.getElementById('stream-base-url'); + const streamQuality = localStorage.getItem('stream-quality') || 'aac'; + if (selector && selector.value !== streamQuality) { + selector.value = streamQuality; + selector.dispatchEvent(new Event('change')); + } if (streamBaseUrl && selector) { const config = getStreamConfig(streamBaseUrl.value, selector.value); document.getElementById('stream-url').textContent = config.url; diff --git a/static/js/player.js b/static/js/player.js index e172720..f0ae480 100644 --- a/static/js/player.js +++ b/static/js/player.js @@ -27,6 +27,13 @@ document.addEventListener('DOMContentLoaded', function() { // Reduce buffer to minimize delay liveAudio.preload = 'none'; } + // Restore user quality preference + const selector = document.getElementById('live-stream-quality'); + const streamQuality = localStorage.getItem('stream-quality') || 'aac'; + if (selector && selector.value !== streamQuality) { + selector.value = streamQuality; + selector.dispatchEvent(new Event('change')); + } }); function redirectWhenFrame () { diff --git a/template/audio-player-frame.ctml b/template/audio-player-frame.ctml index 67b54dc..e5b07a1 100644 --- a/template/audio-player-frame.ctml +++ b/template/audio-player-frame.ctml @@ -104,6 +104,13 @@ audioElement.addEventListener('error', function(e) { console.error('Audio error:', e); }); + + const selector = document.getElementById('stream-quality'); + const streamQuality = localStorage.getItem('stream-quality') || 'aac'; + if (selector && selector.value !== streamQuality) { + selector.value = streamQuality; + selector.dispatchEvent(new Event('change')); + } }); // Stream quality configuration @@ -130,6 +137,9 @@ const selector = document.getElementById('stream-quality'); const streamBaseUrl = document.getElementById('stream-base-url').value; const config = getStreamConfig(streamBaseUrl, selector.value); + + // Save preference + localStorage.setItem('stream-quality', selector.value); const audioElement = document.getElementById('persistent-audio'); const sourceElement = document.getElementById('audio-source');