feat: add settings option to hide Live TV categories (#11)

Add a liveChannelListMode setting (default 'grouped') with a Settings
toggle to display the Live TV channel list flat, without category
group sections. When enabled, logical channels are listed directly
with their stream variants still grouped as in #9/#10. Cover the
setting default and flat-list behavior with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
blomios
2026-10-02 09:57:20 +02:00
parent 451f11f21f
commit e06f4ec2c3
8 changed files with 153 additions and 7 deletions

View File

@ -34,6 +34,7 @@ class SettingsPage {
const volumeValueDisplay = document.getElementById('volume-value');
const rememberVolumeToggle = document.getElementById('setting-remember-volume');
const autoPlayNextToggle = document.getElementById('setting-autoplay-next');
const groupLiveChannelsToggle = document.getElementById('setting-group-live-channels');
// Load current settings
if (this.app.player?.settings) {
@ -43,6 +44,7 @@ class SettingsPage {
volumeValueDisplay.textContent = this.app.player.settings.defaultVolume + '%';
rememberVolumeToggle.checked = this.app.player.settings.rememberVolume;
autoPlayNextToggle.checked = this.app.player.settings.autoPlayNextEpisode;
groupLiveChannelsToggle.checked = this.app.player.settings.liveChannelListMode !== 'flat';
}
// Arrow keys toggle
@ -77,6 +79,13 @@ class SettingsPage {
this.app.player.saveSettings();
});
groupLiveChannelsToggle.addEventListener('change', () => {
const mode = groupLiveChannelsToggle.checked ? 'grouped' : 'flat';
this.app.player.settings.liveChannelListMode = mode;
this.app.channelList.setListMode(mode);
this.app.player.saveSettings();
});
// EPG refresh interval
const epgRefreshSelect = document.getElementById('epg-refresh-interval');
if (epgRefreshSelect && this.app.player?.settings) {
@ -571,6 +580,7 @@ class SettingsPage {
const volumeValueDisplay = document.getElementById('volume-value');
const rememberVolumeToggle = document.getElementById('setting-remember-volume');
const autoPlayNextToggle = document.getElementById('setting-autoplay-next');
const groupLiveChannelsToggle = document.getElementById('setting-group-live-channels');
const forceProxyToggle = document.getElementById('setting-force-proxy');
const forceTranscodeToggle = document.getElementById('setting-force-transcode');
const forceRemuxToggle = document.getElementById('setting-force-remux');
@ -584,6 +594,7 @@ class SettingsPage {
if (volumeValueDisplay) volumeValueDisplay.textContent = s.defaultVolume + '%';
if (rememberVolumeToggle) rememberVolumeToggle.checked = s.rememberVolume;
if (autoPlayNextToggle) autoPlayNextToggle.checked = s.autoPlayNextEpisode;
if (groupLiveChannelsToggle) groupLiveChannelsToggle.checked = s.liveChannelListMode !== 'flat';
if (forceProxyToggle) forceProxyToggle.checked = s.forceProxy || false;
if (forceTranscodeToggle) forceTranscodeToggle.checked = s.forceTranscode || false;
if (forceRemuxToggle) forceRemuxToggle.checked = s.forceRemux || false;