fix double click to seek build

This commit is contained in:
Pas 2025-10-10 13:56:21 -06:00
parent ca921612f0
commit da67d85760
8 changed files with 57 additions and 43 deletions

View file

@ -27,8 +27,8 @@ export interface SettingsInput {
enableLowPerformanceMode?: boolean; enableLowPerformanceMode?: boolean;
enableNativeSubtitles?: boolean; enableNativeSubtitles?: boolean;
enableHoldToBoost?: boolean; enableHoldToBoost?: boolean;
enableDoubleClickToSeek?: boolean;
manualSourceSelection?: boolean; manualSourceSelection?: boolean;
enableDoubleClickToSeek?: boolean;
} }
export interface SettingsResponse { export interface SettingsResponse {
@ -54,8 +54,8 @@ export interface SettingsResponse {
enableLowPerformanceMode?: boolean; enableLowPerformanceMode?: boolean;
enableNativeSubtitles?: boolean; enableNativeSubtitles?: boolean;
enableHoldToBoost?: boolean; enableHoldToBoost?: boolean;
enableDoubleClickToSeek?: boolean;
manualSourceSelection?: boolean; manualSourceSelection?: boolean;
enableDoubleClickToSeek?: boolean;
} }
export function updateSettings( export function updateSettings(

View file

@ -6,12 +6,16 @@ export function Seek(props: { direction: SeekDirection }) {
return ( return (
<div <div
className={`pointer-events-none flex h-20 w-20 items-center justify-center rounded-full bg-black bg-opacity-50 text-white ${ className={`pointer-events-none flex h-20 w-20 items-center justify-center rounded-full bg-black bg-opacity-50 text-white ${
props.direction === "backward" ? "animate-seek-left" : "animate-seek-right" props.direction === "backward"
? "animate-seek-left"
: "animate-seek-right"
}`} }`}
> >
<Icon <Icon
icon={ icon={
props.direction === "backward" ? Icons.SKIP_BACKWARD : Icons.SKIP_FORWARD props.direction === "backward"
? Icons.SKIP_BACKWARD
: Icons.SKIP_FORWARD
} }
className="text-3xl" className="text-3xl"
/> />

View file

@ -65,6 +65,9 @@ export function useAuthData() {
const setEnableHoldToBoost = usePreferencesStore( const setEnableHoldToBoost = usePreferencesStore(
(s) => s.setEnableHoldToBoost, (s) => s.setEnableHoldToBoost,
); );
const setEnableDoubleClickToSeek = usePreferencesStore(
(s) => s.setEnableDoubleClickToSeek,
);
const login = useCallback( const login = useCallback(
async ( async (
@ -192,6 +195,10 @@ export function useAuthData() {
if (settings.enableHoldToBoost !== undefined) { if (settings.enableHoldToBoost !== undefined) {
setEnableHoldToBoost(settings.enableHoldToBoost); setEnableHoldToBoost(settings.enableHoldToBoost);
} }
if (settings.enableDoubleClickToSeek !== undefined) {
setEnableDoubleClickToSeek(settings.enableDoubleClickToSeek);
}
}, },
[ [
replaceBookmarks, replaceBookmarks,
@ -215,6 +222,7 @@ export function useAuthData() {
setEnableLowPerformanceMode, setEnableLowPerformanceMode,
setEnableNativeSubtitles, setEnableNativeSubtitles,
setEnableHoldToBoost, setEnableHoldToBoost,
setEnableDoubleClickToSeek,
], ],
); );

View file

@ -66,9 +66,9 @@ export function useSettingsState(
forceCompactEpisodeView: boolean, forceCompactEpisodeView: boolean,
enableLowPerformanceMode: boolean, enableLowPerformanceMode: boolean,
enableHoldToBoost: boolean, enableHoldToBoost: boolean,
enableDoubleClickToSeek: boolean,
homeSectionOrder: string[], homeSectionOrder: string[],
manualSourceSelection: boolean, manualSourceSelection: boolean,
enableDoubleClickToSeek: boolean,
) { ) {
const [proxyUrlsState, setProxyUrls, resetProxyUrls, proxyUrlsChanged] = const [proxyUrlsState, setProxyUrls, resetProxyUrls, proxyUrlsChanged] =
useDerived(proxyUrls); useDerived(proxyUrls);
@ -184,12 +184,6 @@ export function useSettingsState(
resetEnableHoldToBoost, resetEnableHoldToBoost,
enableHoldToBoostChanged, enableHoldToBoostChanged,
] = useDerived(enableHoldToBoost); ] = useDerived(enableHoldToBoost);
const [
enableDoubleClickToSeekState,
setEnableDoubleClickToSeekState,
resetEnableDoubleClickToSeek,
enableDoubleClickToSeekChanged,
] = useDerived(enableDoubleClickToSeek);
const [ const [
homeSectionOrderState, homeSectionOrderState,
setHomeSectionOrderState, setHomeSectionOrderState,
@ -202,6 +196,12 @@ export function useSettingsState(
resetManualSourceSelection, resetManualSourceSelection,
manualSourceSelectionChanged, manualSourceSelectionChanged,
] = useDerived(manualSourceSelection); ] = useDerived(manualSourceSelection);
const [
enableDoubleClickToSeekState,
setEnableDoubleClickToSeekState,
resetEnableDoubleClickToSeek,
enableDoubleClickToSeekChanged,
] = useDerived(enableDoubleClickToSeek);
function reset() { function reset() {
resetTheme(); resetTheme();
@ -228,9 +228,9 @@ export function useSettingsState(
resetForceCompactEpisodeView(); resetForceCompactEpisodeView();
resetEnableLowPerformanceMode(); resetEnableLowPerformanceMode();
resetEnableHoldToBoost(); resetEnableHoldToBoost();
resetEnableDoubleClickToSeek();
resetHomeSectionOrder(); resetHomeSectionOrder();
resetManualSourceSelection(); resetManualSourceSelection();
resetEnableDoubleClickToSeek();
} }
const changed = const changed =
@ -257,9 +257,9 @@ export function useSettingsState(
forceCompactEpisodeViewChanged || forceCompactEpisodeViewChanged ||
enableLowPerformanceModeChanged || enableLowPerformanceModeChanged ||
enableHoldToBoostChanged || enableHoldToBoostChanged ||
enableDoubleClickToSeekChanged ||
homeSectionOrderChanged || homeSectionOrderChanged ||
manualSourceSelectionChanged; manualSourceSelectionChanged ||
enableDoubleClickToSeekChanged;
return { return {
reset, reset,
@ -379,11 +379,6 @@ export function useSettingsState(
set: setEnableHoldToBoostState, set: setEnableHoldToBoostState,
changed: enableHoldToBoostChanged, changed: enableHoldToBoostChanged,
}, },
enableDoubleClickToSeek: {
state: enableDoubleClickToSeekState,
set: setEnableDoubleClickToSeekState,
changed: enableDoubleClickToSeekChanged,
},
homeSectionOrder: { homeSectionOrder: {
state: homeSectionOrderState, state: homeSectionOrderState,
set: setHomeSectionOrderState, set: setHomeSectionOrderState,
@ -394,5 +389,10 @@ export function useSettingsState(
set: setManualSourceSelectionState, set: setManualSourceSelectionState,
changed: manualSourceSelectionChanged, changed: manualSourceSelectionChanged,
}, },
enableDoubleClickToSeek: {
state: enableDoubleClickToSeekState,
set: setEnableDoubleClickToSeekState,
changed: enableDoubleClickToSeekChanged,
},
}; };
} }

View file

@ -197,13 +197,6 @@ export function SettingsPage() {
(s) => s.setEnableHoldToBoost, (s) => s.setEnableHoldToBoost,
); );
const enableDoubleClickToSeek = usePreferencesStore(
(s) => s.enableDoubleClickToSeek,
);
const setEnableDoubleClickToSeek = usePreferencesStore(
(s) => s.setEnableDoubleClickToSeek,
);
const homeSectionOrder = usePreferencesStore((s) => s.homeSectionOrder); const homeSectionOrder = usePreferencesStore((s) => s.homeSectionOrder);
const setHomeSectionOrder = usePreferencesStore((s) => s.setHomeSectionOrder); const setHomeSectionOrder = usePreferencesStore((s) => s.setHomeSectionOrder);
@ -214,6 +207,13 @@ export function SettingsPage() {
(s) => s.setManualSourceSelection, (s) => s.setManualSourceSelection,
); );
const enableDoubleClickToSeek = usePreferencesStore(
(s) => s.enableDoubleClickToSeek,
);
const setEnableDoubleClickToSeek = usePreferencesStore(
(s) => s.setEnableDoubleClickToSeek,
);
const account = useAuthStore((s) => s.account); const account = useAuthStore((s) => s.account);
const updateProfile = useAuthStore((s) => s.setAccountProfile); const updateProfile = useAuthStore((s) => s.setAccountProfile);
const updateDeviceName = useAuthStore((s) => s.updateDeviceName); const updateDeviceName = useAuthStore((s) => s.updateDeviceName);
@ -266,9 +266,9 @@ export function SettingsPage() {
forceCompactEpisodeView, forceCompactEpisodeView,
enableLowPerformanceMode, enableLowPerformanceMode,
enableHoldToBoost, enableHoldToBoost,
enableDoubleClickToSeek,
homeSectionOrder, homeSectionOrder,
manualSourceSelection, manualSourceSelection,
enableDoubleClickToSeek,
); );
const availableSources = useMemo(() => { const availableSources = useMemo(() => {
@ -328,8 +328,8 @@ export function SettingsPage() {
state.forceCompactEpisodeView.changed || state.forceCompactEpisodeView.changed ||
state.enableLowPerformanceMode.changed || state.enableLowPerformanceMode.changed ||
state.enableHoldToBoost.changed || state.enableHoldToBoost.changed ||
state.enableDoubleClickToSeek.changed || state.manualSourceSelection.changed ||
state.manualSourceSelection.changed state.enableDoubleClickToSeek
) { ) {
await updateSettings(backendUrl, account, { await updateSettings(backendUrl, account, {
applicationLanguage: state.appLanguage.state, applicationLanguage: state.appLanguage.state,
@ -351,8 +351,8 @@ export function SettingsPage() {
forceCompactEpisodeView: state.forceCompactEpisodeView.state, forceCompactEpisodeView: state.forceCompactEpisodeView.state,
enableLowPerformanceMode: state.enableLowPerformanceMode.state, enableLowPerformanceMode: state.enableLowPerformanceMode.state,
enableHoldToBoost: state.enableHoldToBoost.state, enableHoldToBoost: state.enableHoldToBoost.state,
enableDoubleClickToSeek: state.enableDoubleClickToSeek.state,
manualSourceSelection: state.manualSourceSelection.state, manualSourceSelection: state.manualSourceSelection.state,
enableDoubleClickToSeek: state.enableDoubleClickToSeek.state,
}); });
} }
if (state.deviceName.changed) { if (state.deviceName.changed) {
@ -393,9 +393,9 @@ export function SettingsPage() {
setForceCompactEpisodeView(state.forceCompactEpisodeView.state); setForceCompactEpisodeView(state.forceCompactEpisodeView.state);
setEnableLowPerformanceMode(state.enableLowPerformanceMode.state); setEnableLowPerformanceMode(state.enableLowPerformanceMode.state);
setEnableHoldToBoost(state.enableHoldToBoost.state); setEnableHoldToBoost(state.enableHoldToBoost.state);
setEnableDoubleClickToSeek(state.enableDoubleClickToSeek.state);
setHomeSectionOrder(state.homeSectionOrder.state); setHomeSectionOrder(state.homeSectionOrder.state);
setManualSourceSelection(state.manualSourceSelection.state); setManualSourceSelection(state.manualSourceSelection.state);
setEnableDoubleClickToSeek(state.enableDoubleClickToSeek.state);
if (state.profile.state) { if (state.profile.state) {
updateProfile(state.profile.state); updateProfile(state.profile.state);
@ -442,6 +442,7 @@ export function SettingsPage() {
setEnableHoldToBoost, setEnableHoldToBoost,
setHomeSectionOrder, setHomeSectionOrder,
setManualSourceSelection, setManualSourceSelection,
setEnableDoubleClickToSeek,
]); ]);
return ( return (
<SubPageLayout> <SubPageLayout>
@ -494,10 +495,10 @@ export function SettingsPage() {
setEnableLowPerformanceMode={state.enableLowPerformanceMode.set} setEnableLowPerformanceMode={state.enableLowPerformanceMode.set}
enableHoldToBoost={state.enableHoldToBoost.state} enableHoldToBoost={state.enableHoldToBoost.state}
setEnableHoldToBoost={state.enableHoldToBoost.set} setEnableHoldToBoost={state.enableHoldToBoost.set}
enableDoubleClickToSeek={state.enableDoubleClickToSeek.state}
setEnableDoubleClickToSeek={state.enableDoubleClickToSeek.set}
manualSourceSelection={state.manualSourceSelection.state} manualSourceSelection={state.manualSourceSelection.state}
setManualSourceSelection={state.manualSourceSelection.set} setManualSourceSelection={state.manualSourceSelection.set}
enableDoubleClickToSeek={state.enableDoubleClickToSeek.state}
setEnableDoubleClickToSeek={state.enableDoubleClickToSeek.set}
/> />
</div> </div>
<div id="settings-appearance" className="mt-28"> <div id="settings-appearance" className="mt-28">

View file

@ -56,6 +56,7 @@ export function VerifyPassphrase(props: VerifyPassphraseProps) {
febboxKey: store.febboxKey, febboxKey: store.febboxKey,
enableLowPerformanceMode: store.enableLowPerformanceMode, enableLowPerformanceMode: store.enableLowPerformanceMode,
enableNativeSubtitles: store.enableNativeSubtitles, enableNativeSubtitles: store.enableNativeSubtitles,
enableDoubleClickToSeek: store.enableDoubleClickToSeek,
})); }));
const backendUrl = useBackendUrl(); const backendUrl = useBackendUrl();

View file

@ -31,10 +31,10 @@ export function PreferencesPart(props: {
setEnableLowPerformanceMode: (v: boolean) => void; setEnableLowPerformanceMode: (v: boolean) => void;
enableHoldToBoost: boolean; enableHoldToBoost: boolean;
setEnableHoldToBoost: (v: boolean) => void; setEnableHoldToBoost: (v: boolean) => void;
enableDoubleClickToSeek: boolean;
setEnableDoubleClickToSeek: (v: boolean) => void;
manualSourceSelection: boolean; manualSourceSelection: boolean;
setManualSourceSelection: (v: boolean) => void; setManualSourceSelection: (v: boolean) => void;
enableDoubleClickToSeek: boolean;
setEnableDoubleClickToSeek: (v: boolean) => void;
}) { }) {
const { t } = useTranslation(); const { t } = useTranslation();
const sorted = sortLangCodes(appLanguageOptions.map((item) => item.code)); const sorted = sortLangCodes(appLanguageOptions.map((item) => item.code));

View file

@ -22,9 +22,9 @@ export interface PreferencesStore {
enableLowPerformanceMode: boolean; enableLowPerformanceMode: boolean;
enableNativeSubtitles: boolean; enableNativeSubtitles: boolean;
enableHoldToBoost: boolean; enableHoldToBoost: boolean;
enableDoubleClickToSeek: boolean;
homeSectionOrder: string[]; homeSectionOrder: string[];
manualSourceSelection: boolean; manualSourceSelection: boolean;
enableDoubleClickToSeek: boolean;
setEnableThumbnails(v: boolean): void; setEnableThumbnails(v: boolean): void;
setEnableAutoplay(v: boolean): void; setEnableAutoplay(v: boolean): void;
@ -45,9 +45,9 @@ export interface PreferencesStore {
setEnableLowPerformanceMode(v: boolean): void; setEnableLowPerformanceMode(v: boolean): void;
setEnableNativeSubtitles(v: boolean): void; setEnableNativeSubtitles(v: boolean): void;
setEnableHoldToBoost(v: boolean): void; setEnableHoldToBoost(v: boolean): void;
setEnableDoubleClickToSeek(v: boolean): void;
setHomeSectionOrder(v: string[]): void; setHomeSectionOrder(v: string[]): void;
setManualSourceSelection(v: boolean): void; setManualSourceSelection(v: boolean): void;
setEnableDoubleClickToSeek(v: boolean): void;
} }
export const usePreferencesStore = create( export const usePreferencesStore = create(
@ -72,9 +72,9 @@ export const usePreferencesStore = create(
enableLowPerformanceMode: false, enableLowPerformanceMode: false,
enableNativeSubtitles: false, enableNativeSubtitles: false,
enableHoldToBoost: true, enableHoldToBoost: true,
enableDoubleClickToSeek: false,
homeSectionOrder: ["watching", "bookmarks"], homeSectionOrder: ["watching", "bookmarks"],
manualSourceSelection: false, manualSourceSelection: false,
enableDoubleClickToSeek: false,
setEnableThumbnails(v) { setEnableThumbnails(v) {
set((s) => { set((s) => {
s.enableThumbnails = v; s.enableThumbnails = v;
@ -170,11 +170,6 @@ export const usePreferencesStore = create(
s.enableHoldToBoost = v; s.enableHoldToBoost = v;
}); });
}, },
setEnableDoubleClickToSeek(v) {
set((s) => {
s.enableDoubleClickToSeek = v;
});
},
setHomeSectionOrder(v) { setHomeSectionOrder(v) {
set((s) => { set((s) => {
s.homeSectionOrder = v; s.homeSectionOrder = v;
@ -185,6 +180,11 @@ export const usePreferencesStore = create(
s.manualSourceSelection = v; s.manualSourceSelection = v;
}); });
}, },
setEnableDoubleClickToSeek(v) {
set((s) => {
s.enableDoubleClickToSeek = v;
});
},
})), })),
{ {
name: "__MW::preferences", name: "__MW::preferences",