diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json index abe4e754..567c3b97 100644 --- a/src/assets/locales/en.json +++ b/src/assets/locales/en.json @@ -618,7 +618,8 @@ "autoplayLabel": "Autoplay", "sourceOrder": "Reordering sources", "sourceOrderDescription": "Drag and drop to reorder sources. This will determine the order in which sources are checked for the media you are trying to watch. If a source is greyed out, it means it is not available on your device.", - "title": "Preferences" + "title": "Preferences", + "sourceOrderEnableLabel": "Custom source order" }, "reset": "Reset", "save": "Save", diff --git a/src/hooks/useProviderScrape.tsx b/src/hooks/useProviderScrape.tsx index e83973e2..b18d6d57 100644 --- a/src/hooks/useProviderScrape.tsx +++ b/src/hooks/useProviderScrape.tsx @@ -158,6 +158,7 @@ export function useScrape() { } = useBaseScrape(); const preferredSourceOrder = usePreferencesStore((s) => s.sourceOrder); + const enableSourceOrder = usePreferencesStore((s) => s.enableSourceOrder); const startScraping = useCallback( async (media: ScrapeMedia) => { @@ -184,7 +185,8 @@ export function useScrape() { const providers = getProviders(); const output = await providers.runAll({ media, - sourceOrder: preferredSourceOrder, + // Only pass sourceOrder if enableSourceOrder is true + sourceOrder: enableSourceOrder ? preferredSourceOrder : undefined, events: { init: initEvent, start: startEvent, @@ -204,6 +206,7 @@ export function useScrape() { getResult, startScrape, preferredSourceOrder, + enableSourceOrder, ], ); diff --git a/src/hooks/useSettingsState.ts b/src/hooks/useSettingsState.ts index 667093fb..26470a2c 100644 --- a/src/hooks/useSettingsState.ts +++ b/src/hooks/useSettingsState.ts @@ -53,6 +53,7 @@ export function useSettingsState( enableThumbnails: boolean, enableAutoplay: boolean, sourceOrder: string[], + enableSourceOrder: boolean, ) { const [proxyUrlsState, setProxyUrls, resetProxyUrls, proxyUrlsChanged] = useDerived(proxyUrls); @@ -98,6 +99,12 @@ export function useSettingsState( resetSourceOrder, sourceOrderChanged, ] = useDerived(sourceOrder); + const [ + enableSourceOrderState, + setEnableSourceOrderState, + resetEnableSourceOrder, + enableSourceOrderChanged, + ] = useDerived(enableSourceOrder); function reset() { resetTheme(); @@ -111,6 +118,7 @@ export function useSettingsState( resetEnableThumbnails(); resetEnableAutoplay(); resetSourceOrder(); + resetEnableSourceOrder(); } const changed = @@ -123,7 +131,8 @@ export function useSettingsState( profileChanged || enableThumbnailsChanged || enableAutoplayChanged || - sourceOrderChanged; + sourceOrderChanged || + enableSourceOrderChanged; return { reset, @@ -178,5 +187,10 @@ export function useSettingsState( set: setSourceOrderState, changed: sourceOrderChanged, }, + enableSourceOrder: { + state: enableSourceOrderState, + set: setEnableSourceOrderState, + changed: enableSourceOrderChanged, + }, }; } diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index c7aac318..193c5e9c 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -130,6 +130,11 @@ export function SettingsPage() { const sourceOrder = usePreferencesStore((s) => s.sourceOrder); const setSourceOrder = usePreferencesStore((s) => s.setSourceOrder); + const enableSourceOrder = usePreferencesStore((s) => s.enableSourceOrder); + const setEnableSourceOrder = usePreferencesStore( + (s) => s.setEnableSourceOrder, + ); + const account = useAuthStore((s) => s.account); const updateProfile = useAuthStore((s) => s.setAccountProfile); const updateDeviceName = useAuthStore((s) => s.updateDeviceName); @@ -154,6 +159,7 @@ export function SettingsPage() { enableThumbnails, enableAutoplay, sourceOrder, + enableSourceOrder, ); const availableSources = useMemo(() => { @@ -228,6 +234,7 @@ export function SettingsPage() { setTheme(state.theme.state); setSubStyling(state.subtitleStyling.state); setProxySet(state.proxyUrls.state?.filter((v) => v !== "") ?? null); + setEnableSourceOrder(state.enableSourceOrder.state); if (state.profile.state) { updateProfile(state.profile.state); @@ -259,6 +266,7 @@ export function SettingsPage() { updateProfile, logout, setBackendUrl, + setEnableSourceOrder, ]); return ( @@ -303,6 +311,8 @@ export function SettingsPage() { setEnableAutoplay={state.enableAutoplay.set} sourceOrder={availableSources} setSourceOrder={state.sourceOrder.set} + enableSourceOrder={state.enableSourceOrder.state} + setEnableSourceOrder={state.enableSourceOrder.set} />
diff --git a/src/pages/parts/settings/PreferencesPart.tsx b/src/pages/parts/settings/PreferencesPart.tsx index d127655f..f67daeec 100644 --- a/src/pages/parts/settings/PreferencesPart.tsx +++ b/src/pages/parts/settings/PreferencesPart.tsx @@ -22,6 +22,8 @@ export function PreferencesPart(props: { setEnableAutoplay: (v: boolean) => void; sourceOrder: string[]; setSourceOrder: (v: string[]) => void; + enableSourceOrder: boolean; + setEnableSourceOrder: (v: boolean) => void; }) { const { t } = useTranslation(); const sorted = sortLangCodes(appLanguageOptions.map((item) => item.code)); @@ -119,20 +121,33 @@ export function PreferencesPart(props: {

{t("settings.preferences.sourceOrderDescription")}

- - - props.setSourceOrder(items.map((item) => item.id)) - } - /> - + +

+ {t("settings.preferences.sourceOrderEnableLabel")} +

+
+ + {props.enableSourceOrder && ( +
+ + props.setSourceOrder(items.map((item) => item.id)) + } + /> + +
+ )} ); diff --git a/src/stores/preferences/index.tsx b/src/stores/preferences/index.tsx index 6e54129d..0a43f521 100644 --- a/src/stores/preferences/index.tsx +++ b/src/stores/preferences/index.tsx @@ -6,10 +6,12 @@ export interface PreferencesStore { enableThumbnails: boolean; enableAutoplay: boolean; sourceOrder: string[]; + enableSourceOrder: boolean; setEnableThumbnails(v: boolean): void; setEnableAutoplay(v: boolean): void; setSourceOrder(v: string[]): void; + setEnableSourceOrder(v: boolean): void; } export const usePreferencesStore = create( @@ -18,6 +20,7 @@ export const usePreferencesStore = create( enableThumbnails: false, enableAutoplay: true, sourceOrder: [], + enableSourceOrder: false, setEnableThumbnails(v) { set((s) => { s.enableThumbnails = v; @@ -33,6 +36,11 @@ export const usePreferencesStore = create( s.sourceOrder = v; }); }, + setEnableSourceOrder(v) { + set((s) => { + s.enableSourceOrder = v; + }); + }, })), { name: "__MW::preferences",