feat: implement proxy mode setting for video playback with retry, none, and always options

This commit is contained in:
kuekhaoyang
2026-01-25 14:40:38 +08:00
parent f4b16bac2d
commit 2aa90a4d4f
8 changed files with 141 additions and 39 deletions
+4
View File
@@ -19,6 +19,7 @@ export type SortOption =
export type SearchDisplayMode = 'normal' | 'grouped';
export type AdFilterMode = 'off' | 'keyword' | 'heuristic' | 'aggressive';
export type ProxyMode = 'retry' | 'none' | 'always';
export interface AppSettings {
sources: VideoSource[];
@@ -44,6 +45,7 @@ export interface AppSettings {
searchDisplayMode: SearchDisplayMode; // 'normal' = individual cards, 'grouped' = group same-name videos
episodeReverseOrder: boolean; // Persist episode list reverse state
fullscreenType: 'native' | 'window'; // Fullscreen mode preference
proxyMode: ProxyMode; // Proxy behavior: 'retry' | 'none' | 'always'
}
import { exportSettings, importSettings, SEARCH_HISTORY_KEY, WATCH_HISTORY_KEY } from './settings-helpers';
@@ -116,6 +118,7 @@ function getDefaultAppSettings(): AppSettings {
searchDisplayMode: 'normal',
episodeReverseOrder: false,
fullscreenType: 'native',
proxyMode: 'retry',
};
}
@@ -192,6 +195,7 @@ export const settingsStore = {
searchDisplayMode: parsed.searchDisplayMode === 'grouped' ? 'grouped' : 'normal',
episodeReverseOrder: parsed.episodeReverseOrder !== undefined ? parsed.episodeReverseOrder : false,
fullscreenType: parsed.fullscreenType === 'window' ? 'window' : 'native',
proxyMode: (parsed.proxyMode === 'retry' || parsed.proxyMode === 'none' || parsed.proxyMode === 'always') ? parsed.proxyMode : 'retry',
};
} catch {
// Even if localStorage fails, we should return defaults + ENV subscriptions