Add Force Proxy setting, fix redirect URL handling (PR #7)

This commit is contained in:
Trevor Mears
2025-12-28 11:43:01 -08:00
parent 58ee98adc2
commit 5da26c8045
4 changed files with 36 additions and 7 deletions
+14
View File
@@ -296,6 +296,20 @@
</div>
</div>
<div class="settings-section">
<h3>Streaming</h3>
<div class="setting-item">
<label class="setting-toggle">
<input type="checkbox" id="setting-force-proxy">
<span class="toggle-slider"></span>
</label>
<div class="setting-info">
<span class="setting-label">Force Backend Proxy</span>
<span class="setting-hint">Route all streams through the proxy server. Enable if streams don't play directly.</span>
</div>
</div>
</div>
<div class="settings-section">
<h3>Keyboard Shortcuts</h3>
<div class="shortcuts-grid">
+6 -3
View File
@@ -32,7 +32,8 @@ class VideoPlayer {
defaultVolume: 80, // 0-100
rememberVolume: true, // Persist volume between sessions
lastVolume: 80, // Last used volume (if rememberVolume is true)
autoPlayNextEpisode: false // Auto-play next episode in series
autoPlayNextEpisode: false, // Auto-play next episode in series
forceProxy: false // Force all streams through backend proxy
};
try {
const saved = localStorage.getItem('nodecast_tv_player_settings');
@@ -201,10 +202,12 @@ class VideoPlayer {
// Determine if HLS or direct stream
this.currentUrl = streamUrl;
// Proactively use proxy for known CORS-restricted domains (like Pluto TV)
// Proactively use proxy for:
// 1. User enabled "Force Proxy" in settings
// 2. Known CORS-restricted domains (like Pluto TV)
// Note: Xtream sources are NOT auto-proxied because many providers IP-lock streams
const proxyRequiredDomains = ['pluto.tv'];
const needsProxy = proxyRequiredDomains.some(domain => streamUrl.includes(domain));
const needsProxy = this.settings.forceProxy || proxyRequiredDomains.some(domain => streamUrl.includes(domain));
this.isUsingProxy = needsProxy;
const finalUrl = needsProxy ? this.getProxiedUrl(streamUrl) : streamUrl;
+10
View File
@@ -28,6 +28,7 @@ class SettingsPage {
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) {
@@ -37,6 +38,9 @@ class SettingsPage {
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
@@ -73,6 +77,12 @@ class SettingsPage {
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) {