Files
KiraTV-APP-NodeCast-Modific…/public/js/pages/Settings.js
T
2025-12-28 17:52:40 -08:00

144 lines
5.5 KiB
JavaScript

/**
* Settings Page Controller
*/
class SettingsPage {
constructor(app) {
this.app = app;
this.tabs = document.querySelectorAll('.tabs .tab');
this.tabContents = document.querySelectorAll('.tab-content');
this.init();
}
init() {
// Tab switching
this.tabs.forEach(tab => {
tab.addEventListener('click', () => this.switchTab(tab.dataset.tab));
});
// Player settings
this.initPlayerSettings();
}
initPlayerSettings() {
const arrowKeysToggle = document.getElementById('setting-arrow-keys');
const overlayDurationInput = document.getElementById('setting-overlay-duration');
const defaultVolumeSlider = document.getElementById('setting-default-volume');
const volumeValueDisplay = document.getElementById('volume-value');
const rememberVolumeToggle = document.getElementById('setting-remember-volume');
const autoPlayNextToggle = document.getElementById('setting-autoplay-next');
const forceProxyToggle = document.getElementById('setting-force-proxy');
// Load current settings
if (this.app.player?.settings) {
arrowKeysToggle.checked = this.app.player.settings.arrowKeysChangeChannel;
overlayDurationInput.value = this.app.player.settings.overlayDuration;
defaultVolumeSlider.value = this.app.player.settings.defaultVolume;
volumeValueDisplay.textContent = this.app.player.settings.defaultVolume + '%';
rememberVolumeToggle.checked = this.app.player.settings.rememberVolume;
autoPlayNextToggle.checked = this.app.player.settings.autoPlayNextEpisode;
if (forceProxyToggle) {
forceProxyToggle.checked = this.app.player.settings.forceProxy || false;
}
}
// Arrow keys toggle
arrowKeysToggle.addEventListener('change', () => {
this.app.player.settings.arrowKeysChangeChannel = arrowKeysToggle.checked;
this.app.player.saveSettings();
});
// Overlay duration
overlayDurationInput.addEventListener('change', () => {
const value = Math.min(30, Math.max(1, parseInt(overlayDurationInput.value) || 5));
overlayDurationInput.value = value;
this.app.player.settings.overlayDuration = value;
this.app.player.saveSettings();
});
// Default volume slider
defaultVolumeSlider?.addEventListener('input', () => {
const value = parseInt(defaultVolumeSlider.value);
volumeValueDisplay.textContent = value + '%';
this.app.player.settings.defaultVolume = value;
this.app.player.saveSettings();
});
// Remember volume toggle
rememberVolumeToggle?.addEventListener('change', () => {
this.app.player.settings.rememberVolume = rememberVolumeToggle.checked;
this.app.player.saveSettings();
});
// Auto-play next episode toggle
autoPlayNextToggle?.addEventListener('change', () => {
this.app.player.settings.autoPlayNextEpisode = autoPlayNextToggle.checked;
this.app.player.saveSettings();
});
// Force proxy toggle
forceProxyToggle?.addEventListener('change', () => {
this.app.player.settings.forceProxy = forceProxyToggle.checked;
this.app.player.saveSettings();
});
// EPG refresh interval
const epgRefreshSelect = document.getElementById('epg-refresh-interval');
if (epgRefreshSelect) {
// Load saved value
const savedInterval = localStorage.getItem('nodecast_tv_epg_refresh_interval');
if (savedInterval) {
epgRefreshSelect.value = savedInterval;
}
// Save on change
epgRefreshSelect.addEventListener('change', () => {
localStorage.setItem('nodecast_tv_epg_refresh_interval', epgRefreshSelect.value);
});
}
// Stream output format
const streamFormatSelect = document.getElementById('setting-stream-format');
if (streamFormatSelect) {
// Load saved value
const savedFormat = localStorage.getItem('nodecast_tv_stream_format') || 'm3u8';
streamFormatSelect.value = savedFormat;
// Save on change
streamFormatSelect.addEventListener('change', () => {
localStorage.setItem('nodecast_tv_stream_format', streamFormatSelect.value);
});
}
}
switchTab(tabName) {
this.tabs.forEach(t => t.classList.toggle('active', t.dataset.tab === tabName));
this.tabContents.forEach(c => c.classList.toggle('active', c.id === `tab-${tabName}`));
// Load content browser when switching to that tab
if (tabName === 'content') {
this.app.sourceManager.loadContentSources();
}
}
async show() {
// Load sources when page is shown
await this.app.sourceManager.loadSources();
// Refresh player settings display
const arrowKeysToggle = document.getElementById('setting-arrow-keys');
const overlayDurationInput = document.getElementById('setting-overlay-duration');
if (this.app.player?.settings) {
arrowKeysToggle.checked = this.app.player.settings.arrowKeysChangeChannel;
overlayDurationInput.value = this.app.player.settings.overlayDuration;
}
}
hide() {
// Page is hidden
}
}
window.SettingsPage = SettingsPage;