diff --git a/apps/expo/src/app/(tabs)/settings.tsx b/apps/expo/src/app/(tabs)/settings.tsx index a15bd59..1aa1e03 100644 --- a/apps/expo/src/app/(tabs)/settings.tsx +++ b/apps/expo/src/app/(tabs)/settings.tsx @@ -33,7 +33,10 @@ import { MWSelect } from "~/components/ui/Select"; import { MWSeparator } from "~/components/ui/Separator"; import { MWSwitch } from "~/components/ui/Switch"; import { checkForUpdate } from "~/lib/update"; -import { usePlayerSettingsStore } from "~/stores/settings"; +import { + useNetworkSettingsStore, + usePlayerSettingsStore, +} from "~/stores/settings"; import { useThemeStore } from "~/stores/theme"; const themeOptions: ThemeStoreOption[] = [ @@ -44,10 +47,13 @@ const themeOptions: ThemeStoreOption[] = [ "teal", ]; +const defaultQualityOptions = ["Highest", "Lowest"]; + export default function SettingsScreen() { const theme = useTheme(); const { gestureControls, setGestureControls, autoPlay, setAutoPlay } = usePlayerSettingsStore(); + const { allowMobileData, setAllowMobileData } = useNetworkSettingsStore(); const toastController = useToastController(); const [showUpdateSheet, setShowUpdateSheet] = useState(false); const [updateMarkdownContent, setUpdateMarkdownContent] = useState(""); @@ -113,7 +119,7 @@ export default function SettingsScreen() { return ( - + Appearance @@ -157,6 +163,38 @@ export default function SettingsScreen() { + + + Network + + + + + + Default quality (Wi-Fi) + + + + + + Default quality (Data) + + + + + + Allow downloads on mobile data + + + + + + + + App @@ -383,3 +421,114 @@ export function ThemeSelector(props: SelectProps) { ); } + +interface DefaultQualitySelectorProps extends SelectProps { + qualityType: "wifi" | "data"; +} + +export function DefaultQualitySelector(props: DefaultQualitySelectorProps) { + const theme = useTheme(); + const { + wifiDefaultQuality, + mobileDataDefaultQuality, + setWifiDefaultQuality, + setMobileDataDefaultQuality, + } = useNetworkSettingsStore(); + + return ( + + + } + > + + + + + + + + + + + + + + + + {defaultQualityOptions.map((item, i) => ( + + + {item} + + + + + + ))} + + + + ); +} diff --git a/apps/expo/src/stores/settings/index.ts b/apps/expo/src/stores/settings/index.ts index bf981cd..2ca6db7 100644 --- a/apps/expo/src/stores/settings/index.ts +++ b/apps/expo/src/stores/settings/index.ts @@ -212,3 +212,35 @@ export const useWatchHistoryStore = create< }, ), ); + +interface NetworkSettingsStoreState { + allowMobileData: boolean; + setAllowMobileData: (enabled: boolean) => void; + wifiDefaultQuality: string; + setWifiDefaultQuality: (quality: string) => void; + mobileDataDefaultQuality: string; + setMobileDataDefaultQuality: (quality: string) => void; +} + +export const useNetworkSettingsStore = create< + NetworkSettingsStoreState, + [["zustand/persist", NetworkSettingsStoreState]] +>( + persist( + (set) => ({ + allowMobileData: false, + setAllowMobileData: (enabled: boolean) => + set({ allowMobileData: enabled }), + wifiDefaultQuality: "Highest", + setWifiDefaultQuality: (quality: string) => + set({ wifiDefaultQuality: quality }), + mobileDataDefaultQuality: "Lowest", + setMobileDataDefaultQuality: (quality: string) => + set({ mobileDataDefaultQuality: quality }), + }), + { + name: "network-settings", + storage: createJSONStorage(() => zustandStorage), + }, + ), +);