pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add all preferences and fix

fixed febbox token account sync and add every other preference (except subtitle) to the backend sync

Pas 52aa105a b1fdc56a

+238 -81
+22
src/backend/accounts/settings.ts
··· 9 9 defaultSubtitleLanguage?: string; 10 10 proxyUrls?: string[] | null; 11 11 febboxKey?: string | null; 12 + enableThumbnails?: boolean; 13 + enableAutoplay?: boolean; 14 + enableSkipCredits?: boolean; 15 + enableDiscover?: boolean; 16 + enableFeatured?: boolean; 17 + enableDetailsModal?: boolean; 18 + enableImageLogos?: boolean; 19 + enableCarouselView?: boolean; 20 + sourceOrder?: string[]; 21 + enableSourceOrder?: boolean; 22 + proxyTmdb?: boolean; 12 23 } 13 24 14 25 export interface SettingsResponse { ··· 17 28 defaultSubtitleLanguage?: string | null; 18 29 proxyUrls?: string[] | null; 19 30 febboxKey?: string | null; 31 + enableThumbnails?: boolean; 32 + enableAutoplay?: boolean; 33 + enableSkipCredits?: boolean; 34 + enableDiscover?: boolean; 35 + enableFeatured?: boolean; 36 + enableDetailsModal?: boolean; 37 + enableImageLogos?: boolean; 38 + enableCarouselView?: boolean; 39 + sourceOrder?: string[]; 40 + enableSourceOrder?: boolean; 41 + proxyTmdb?: boolean; 20 42 } 21 43 22 44 export function updateSettings(
+4 -4
src/components/player/hooks/useSkipTime.ts
··· 2 2 3 3 import { usePlayerMeta } from "@/components/player/hooks/usePlayerMeta"; 4 4 import { conf } from "@/setup/config"; 5 - import { useAuthStore } from "@/stores/auth"; 5 + import { usePreferencesStore } from "@/stores/preferences"; 6 6 7 7 // Thanks Nemo for this API 8 8 const BASE_URL = "https://skips.pstream.org"; ··· 11 11 export function useSkipTime() { 12 12 const { playerMeta: meta } = usePlayerMeta(); 13 13 const [skiptime, setSkiptime] = useState<number | null>(null); 14 - const febboxToken = useAuthStore((s) => s.febboxToken); 14 + const febboxKey = usePreferencesStore((s) => s.febboxKey); 15 15 16 16 useEffect(() => { 17 17 const fetchSkipTime = async (retries = 0): Promise<void> => { 18 18 if (!meta?.imdbId || meta.type === "movie") return; 19 19 if (!conf().ALLOW_FEBBOX_KEY) return; 20 - if (!febboxToken) return; 20 + if (!febboxKey) return; 21 21 22 22 try { 23 23 const apiUrl = `${BASE_URL}/${meta.imdbId}/${meta.season?.number}/${meta.episode?.number}`; ··· 57 57 meta?.type, 58 58 meta?.season?.number, 59 59 meta?.episode?.number, 60 - febboxToken, 60 + febboxKey, 61 61 ]); 62 62 63 63 return skiptime;
+84 -3
src/hooks/auth/useAuthData.ts
··· 12 12 import { useAuthStore } from "@/stores/auth"; 13 13 import { useBookmarkStore } from "@/stores/bookmarks"; 14 14 import { useLanguageStore } from "@/stores/language"; 15 + import { usePreferencesStore } from "@/stores/preferences"; 15 16 import { useProgressStore } from "@/stores/progress"; 16 17 import { useSubtitleStore } from "@/stores/subtitles"; 17 18 import { useThemeStore } from "@/stores/theme"; ··· 28 29 const importSubtitleLanguage = useSubtitleStore( 29 30 (s) => s.importSubtitleLanguage, 30 31 ); 31 - const setFebboxToken = useAuthStore((s) => s.setFebboxToken); 32 + const setFebboxKey = usePreferencesStore((s) => s.setFebboxKey); 32 33 33 34 const replaceBookmarks = useBookmarkStore((s) => s.replaceBookmarks); 34 35 const replaceItems = useProgressStore((s) => s.replaceItems); 35 36 37 + const setEnableThumbnails = usePreferencesStore((s) => s.setEnableThumbnails); 38 + const setEnableAutoplay = usePreferencesStore((s) => s.setEnableAutoplay); 39 + const setEnableSkipCredits = usePreferencesStore( 40 + (s) => s.setEnableSkipCredits, 41 + ); 42 + const setEnableDiscover = usePreferencesStore((s) => s.setEnableDiscover); 43 + const setEnableFeatured = usePreferencesStore((s) => s.setEnableFeatured); 44 + const setEnableDetailsModal = usePreferencesStore( 45 + (s) => s.setEnableDetailsModal, 46 + ); 47 + const setEnableImageLogos = usePreferencesStore((s) => s.setEnableImageLogos); 48 + const setEnableCarouselView = usePreferencesStore( 49 + (s) => s.setEnableCarouselView, 50 + ); 51 + const setSourceOrder = usePreferencesStore((s) => s.setSourceOrder); 52 + const setEnableSourceOrder = usePreferencesStore( 53 + (s) => s.setEnableSourceOrder, 54 + ); 55 + const setProxyTmdb = usePreferencesStore((s) => s.setProxyTmdb); 56 + 36 57 const login = useCallback( 37 58 async ( 38 59 loginResponse: LoginResponse, ··· 58 79 removeAccount(); 59 80 clearBookmarks(); 60 81 clearProgress(); 61 - setFebboxToken(null); 62 - }, [removeAccount, clearBookmarks, clearProgress, setFebboxToken]); 82 + setFebboxKey(null); 83 + }, [removeAccount, clearBookmarks, clearProgress, setFebboxKey]); 63 84 64 85 const syncData = useCallback( 65 86 async ( ··· 87 108 if (settings.proxyUrls) { 88 109 setProxySet(settings.proxyUrls); 89 110 } 111 + 112 + if (settings.enableThumbnails !== undefined) { 113 + setEnableThumbnails(settings.enableThumbnails); 114 + } 115 + 116 + if (settings.enableAutoplay !== undefined) { 117 + setEnableAutoplay(settings.enableAutoplay); 118 + } 119 + 120 + if (settings.enableSkipCredits !== undefined) { 121 + setEnableSkipCredits(settings.enableSkipCredits); 122 + } 123 + 124 + if (settings.enableDiscover !== undefined) { 125 + setEnableDiscover(settings.enableDiscover); 126 + } 127 + 128 + if (settings.enableFeatured !== undefined) { 129 + setEnableFeatured(settings.enableFeatured); 130 + } 131 + 132 + if (settings.enableDetailsModal !== undefined) { 133 + setEnableDetailsModal(settings.enableDetailsModal); 134 + } 135 + 136 + if (settings.enableImageLogos !== undefined) { 137 + setEnableImageLogos(settings.enableImageLogos); 138 + } 139 + 140 + if (settings.enableCarouselView !== undefined) { 141 + setEnableCarouselView(settings.enableCarouselView); 142 + } 143 + 144 + if (settings.sourceOrder !== undefined) { 145 + setSourceOrder(settings.sourceOrder); 146 + } 147 + 148 + if (settings.enableSourceOrder !== undefined) { 149 + setEnableSourceOrder(settings.enableSourceOrder); 150 + } 151 + 152 + if (settings.proxyTmdb !== undefined) { 153 + setProxyTmdb(settings.proxyTmdb); 154 + } 155 + 156 + if (settings.febboxKey !== undefined) { 157 + setFebboxKey(settings.febboxKey); 158 + } 90 159 }, 91 160 [ 92 161 replaceBookmarks, ··· 95 164 importSubtitleLanguage, 96 165 setTheme, 97 166 setProxySet, 167 + setEnableThumbnails, 168 + setEnableAutoplay, 169 + setEnableSkipCredits, 170 + setEnableDiscover, 171 + setEnableFeatured, 172 + setEnableDetailsModal, 173 + setEnableImageLogos, 174 + setEnableCarouselView, 175 + setSourceOrder, 176 + setEnableSourceOrder, 177 + setProxyTmdb, 178 + setFebboxKey, 98 179 ], 99 180 ); 100 181
+9 -13
src/hooks/useSettingsState.ts
··· 43 43 deviceName: string, 44 44 proxyUrls: string[] | null, 45 45 backendUrl: string | null, 46 - febboxToken: string | null, 46 + febboxKey: string | null, 47 47 profile: 48 48 | { 49 49 colorA: string; ··· 67 67 useDerived(proxyUrls); 68 68 const [backendUrlState, setBackendUrl, resetBackendUrl, backendUrlChanged] = 69 69 useDerived(backendUrl); 70 - const [ 71 - febboxTokenState, 72 - setFebboxToken, 73 - resetFebboxToken, 74 - febboxTokenChanged, 75 - ] = useDerived(febboxToken); 70 + const [febboxKeyState, setFebboxKey, resetFebboxKey, febboxKeyChanged] = 71 + useDerived(febboxKey); 76 72 const [themeState, setTheme, resetTheme, themeChanged] = useDerived(theme); 77 73 const setPreviewTheme = usePreviewThemeStore((s) => s.setPreviewTheme); 78 74 const resetPreviewTheme = useCallback( ··· 165 161 resetSubStyling(); 166 162 resetProxyUrls(); 167 163 resetBackendUrl(); 168 - resetFebboxToken(); 164 + resetFebboxKey(); 169 165 resetDeviceName(); 170 166 resetProfile(); 171 167 resetEnableThumbnails(); ··· 188 184 deviceNameChanged || 189 185 backendUrlChanged || 190 186 proxyUrlsChanged || 191 - febboxTokenChanged || 187 + febboxKeyChanged || 192 188 profileChanged || 193 189 enableThumbnailsChanged || 194 190 enableAutoplayChanged || ··· 235 231 set: setBackendUrl, 236 232 changed: backendUrlChanged, 237 233 }, 238 - febboxToken: { 239 - state: febboxTokenState, 240 - set: setFebboxToken, 241 - changed: febboxTokenChanged, 234 + febboxKey: { 235 + state: febboxKeyState, 236 + set: setFebboxKey, 237 + changed: febboxKeyChanged, 242 238 }, 243 239 profile: { 244 240 state: profileState,
+33 -11
src/pages/Settings.tsx
··· 131 131 const backendUrlSetting = useAuthStore((s) => s.backendUrl); 132 132 const setBackendUrl = useAuthStore((s) => s.setBackendUrl); 133 133 134 - const febboxToken = useAuthStore((s) => s.febboxToken); 135 - const setFebboxToken = useAuthStore((s) => s.setFebboxToken); 134 + const febboxKey = usePreferencesStore((s) => s.febboxKey); 135 + const setFebboxKey = usePreferencesStore((s) => s.setFebboxKey); 136 136 137 137 const enableThumbnails = usePreferencesStore((s) => s.enableThumbnails); 138 138 const setEnableThumbnails = usePreferencesStore((s) => s.setEnableThumbnails); ··· 193 193 if (account && backendUrl) { 194 194 const settings = await getSettings(backendUrl, account); 195 195 if (settings.febboxKey) { 196 - setFebboxToken(settings.febboxKey); 196 + setFebboxKey(settings.febboxKey); 197 197 } 198 198 } 199 199 }; 200 200 loadSettings(); 201 - }, [account, backendUrl, setFebboxToken]); 201 + }, [account, backendUrl, setFebboxKey]); 202 202 203 203 const state = useSettingsState( 204 204 activeTheme, ··· 207 207 decryptedName, 208 208 proxySet, 209 209 backendUrlSetting, 210 - febboxToken, 210 + febboxKey, 211 211 account ? account.profile : undefined, 212 212 enableThumbnails, 213 213 enableAutoplay, ··· 263 263 state.appLanguage.changed || 264 264 state.theme.changed || 265 265 state.proxyUrls.changed || 266 - state.febboxToken.changed 266 + state.febboxKey.changed || 267 + state.enableThumbnails.changed || 268 + state.enableAutoplay.changed || 269 + state.enableSkipCredits.changed || 270 + state.enableDiscover.changed || 271 + state.enableFeatured.changed || 272 + state.enableDetailsModal.changed || 273 + state.enableImageLogos.changed || 274 + state.sourceOrder.changed || 275 + state.enableSourceOrder.changed || 276 + state.proxyTmdb.changed || 277 + state.enableCarouselView.changed 267 278 ) { 268 279 await updateSettings(backendUrl, account, { 269 280 applicationLanguage: state.appLanguage.state, 270 281 applicationTheme: state.theme.state, 271 282 proxyUrls: state.proxyUrls.state?.filter((v) => v !== "") ?? null, 272 - febboxKey: state.febboxToken.state, 283 + febboxKey: state.febboxKey.state, 284 + enableThumbnails: state.enableThumbnails.state, 285 + enableAutoplay: state.enableAutoplay.state, 286 + enableSkipCredits: state.enableSkipCredits.state, 287 + enableDiscover: state.enableDiscover.state, 288 + enableFeatured: state.enableFeatured.state, 289 + enableDetailsModal: state.enableDetailsModal.state, 290 + enableImageLogos: state.enableImageLogos.state, 291 + sourceOrder: state.sourceOrder.state, 292 + enableSourceOrder: state.enableSourceOrder.state, 293 + proxyTmdb: state.proxyTmdb.state, 294 + enableCarouselView: state.enableCarouselView.state, 273 295 }); 274 296 } 275 297 if (state.deviceName.changed) { ··· 302 324 setSubStyling(state.subtitleStyling.state); 303 325 setProxySet(state.proxyUrls.state?.filter((v) => v !== "") ?? null); 304 326 setEnableSourceOrder(state.enableSourceOrder.state); 305 - setFebboxToken(state.febboxToken.state); 327 + setFebboxKey(state.febboxKey.state); 306 328 setProxyTmdb(state.proxyTmdb.state); 307 329 setEnableCarouselView(state.enableCarouselView.state); 308 330 ··· 325 347 account, 326 348 backendUrl, 327 349 setEnableThumbnails, 328 - setFebboxToken, 350 + setFebboxKey, 329 351 state, 330 352 setEnableAutoplay, 331 353 setEnableSkipCredits, ··· 424 446 setBackendUrl={state.backendUrl.set} 425 447 proxyUrls={state.proxyUrls.state} 426 448 setProxyUrls={state.proxyUrls.set} 427 - febboxToken={state.febboxToken.state} 428 - setFebboxToken={state.febboxToken.set} 449 + febboxKey={state.febboxKey.state} 450 + setFebboxKey={state.febboxKey.set} 429 451 proxyTmdb={state.proxyTmdb.state} 430 452 setProxyTmdb={state.proxyTmdb.set} 431 453 />
+20 -10
src/pages/onboarding/Onboarding.tsx
··· 42 42 import { PageTitle } from "@/pages/parts/util/PageTitle"; 43 43 import { conf } from "@/setup/config"; 44 44 import { useAuthStore } from "@/stores/auth"; 45 + import { usePreferencesStore } from "@/stores/preferences"; 45 46 import { getProxyUrls } from "@/utils/proxyUrls"; 46 47 47 - import { Status, testFebboxToken } from "../parts/settings/SetupPart"; 48 + import { Status, testFebboxKey } from "../parts/settings/SetupPart"; 48 49 49 - async function getFebboxTokenStatus(febboxToken: string | null) { 50 - if (febboxToken) { 51 - const status: Status = await testFebboxToken(febboxToken); 50 + async function getFebboxKeyStatus(febboxKey: string | null) { 51 + if (febboxKey) { 52 + const status: Status = await testFebboxKey(febboxKey); 52 53 return status; 53 54 } 54 55 return "unset"; ··· 57 58 export function FEDAPISetup() { 58 59 const { t } = useTranslation(); 59 60 const [isExpanded, setIsExpanded] = useState(false); 60 - const febboxToken = useAuthStore((s) => s.febboxToken); 61 - const setFebboxToken = useAuthStore((s) => s.setFebboxToken); 61 + const febboxKey = usePreferencesStore((s) => s.febboxKey); 62 + const setFebboxKey = usePreferencesStore((s) => s.setFebboxKey); 63 + const user = useAuthStore(); 64 + 65 + // Enable febbox token when account is loaded and we have a token 66 + useEffect(() => { 67 + if (user.account && febboxKey) { 68 + setFebboxKey(febboxKey); 69 + setIsExpanded(true); 70 + } 71 + }, [user.account, febboxKey, setFebboxKey]); 62 72 63 73 const [status, setStatus] = useState<Status>("unset"); 64 74 const statusMap: Record<Status, StatusCircleProps["type"]> = { ··· 71 81 72 82 useEffect(() => { 73 83 const checkTokenStatus = async () => { 74 - const result = await getFebboxTokenStatus(febboxToken); 84 + const result = await getFebboxKeyStatus(febboxKey); 75 85 setStatus(result); 76 86 }; 77 87 checkTokenStatus(); 78 - }, [febboxToken]); 88 + }, [febboxKey]); 79 89 80 90 const [showVideo, setShowVideo] = useState(false); 81 91 ··· 161 171 <StatusCircle type={statusMap[status]} className="mx-2 mr-4" /> 162 172 <AuthInputBox 163 173 onChange={(newToken) => { 164 - setFebboxToken(newToken); 174 + setFebboxKey(newToken); 165 175 }} 166 - value={febboxToken ?? ""} 176 + value={febboxKey ?? ""} 167 177 placeholder="eyABCdE..." 168 178 passwordToggleable 169 179 className="flex-grow"
+17
src/pages/parts/auth/VerifyPassphrasePart.tsx
··· 17 17 import { AccountProfile } from "@/pages/parts/auth/AccountCreatePart"; 18 18 import { useBookmarkStore } from "@/stores/bookmarks"; 19 19 import { useLanguageStore } from "@/stores/language"; 20 + import { usePreferencesStore } from "@/stores/preferences"; 20 21 import { useProgressStore } from "@/stores/progress"; 21 22 import { useSubtitleStore } from "@/stores/subtitles"; 22 23 import { useThemeStore } from "@/stores/theme"; ··· 39 40 (store) => store.lastSelectedLanguage, 40 41 ); 41 42 const applicationTheme = useThemeStore((store) => store.theme); 43 + 44 + const preferences = usePreferencesStore((store) => ({ 45 + enableThumbnails: store.enableThumbnails, 46 + enableAutoplay: store.enableAutoplay, 47 + enableSkipCredits: store.enableSkipCredits, 48 + enableDiscover: store.enableDiscover, 49 + enableFeatured: store.enableFeatured, 50 + enableDetailsModal: store.enableDetailsModal, 51 + enableImageLogos: store.enableImageLogos, 52 + enableCarouselView: store.enableCarouselView, 53 + sourceOrder: store.sourceOrder, 54 + enableSourceOrder: store.enableSourceOrder, 55 + proxyTmdb: store.proxyTmdb, 56 + febboxKey: store.febboxKey, 57 + })); 42 58 43 59 const backendUrl = useBackendUrl(); 44 60 const { t } = useTranslation(); ··· 80 96 defaultSubtitleLanguage: defaultSubtitleLanguage ?? undefined, 81 97 applicationTheme: applicationTheme ?? undefined, 82 98 proxyUrls: undefined, 99 + ...preferences, 83 100 }); 84 101 85 102 await restore(account);
+29 -19
src/pages/parts/settings/ConnectionsPart.tsx
··· 22 22 import { 23 23 SetupPart, 24 24 Status, 25 - testFebboxToken, 25 + testFebboxKey, 26 26 } from "@/pages/parts/settings/SetupPart"; 27 27 import { conf } from "@/setup/config"; 28 28 import { useAuthStore } from "@/stores/auth"; 29 + import { usePreferencesStore } from "@/stores/preferences"; 29 30 30 31 interface ProxyEditProps { 31 32 proxyUrls: string[] | null; ··· 39 40 setBackendUrl: Dispatch<SetStateAction<string | null>>; 40 41 } 41 42 42 - interface FebboxTokenProps { 43 - febboxToken: string | null; 44 - setFebboxToken: Dispatch<SetStateAction<string | null>>; 43 + interface FebboxKeyProps { 44 + febboxKey: string | null; 45 + setFebboxKey: Dispatch<SetStateAction<string | null>>; 45 46 } 46 47 47 48 function ProxyEdit({ ··· 218 219 ); 219 220 } 220 221 221 - async function getFebboxTokenStatus(febboxToken: string | null) { 222 - if (febboxToken) { 223 - const status: Status = await testFebboxToken(febboxToken); 222 + async function getFebboxKeyStatus(febboxKey: string | null) { 223 + if (febboxKey) { 224 + const status: Status = await testFebboxKey(febboxKey); 224 225 return status; 225 226 } 226 227 return "unset"; 227 228 } 228 229 229 - function FebboxTokenEdit({ febboxToken, setFebboxToken }: FebboxTokenProps) { 230 + function FebboxKeyEdit({ febboxKey, setFebboxKey }: FebboxKeyProps) { 230 231 const { t } = useTranslation(); 231 232 const [showVideo, setShowVideo] = useState(false); 233 + const user = useAuthStore(); 234 + const preferences = usePreferencesStore(); 235 + 236 + // Enable febbox token when account is loaded and we have a token 237 + useEffect(() => { 238 + if (user.account && febboxKey === null && preferences.febboxKey) { 239 + setFebboxKey(preferences.febboxKey); 240 + } 241 + }, [user.account, febboxKey, preferences.febboxKey, setFebboxKey]); 232 242 233 243 const [status, setStatus] = useState<Status>("unset"); 234 244 const statusMap: Record<Status, StatusCircleProps["type"]> = { ··· 241 251 242 252 useEffect(() => { 243 253 const checkTokenStatus = async () => { 244 - const result = await getFebboxTokenStatus(febboxToken); 254 + const result = await getFebboxKeyStatus(febboxKey); 245 255 setStatus(result); 246 256 }; 247 257 checkTokenStatus(); 248 - }, [febboxToken]); 258 + }, [febboxKey]); 249 259 250 260 if (conf().ALLOW_FEBBOX_KEY) { 251 261 return ( ··· 261 271 </div> 262 272 <div> 263 273 <Toggle 264 - onClick={() => setFebboxToken((s) => (s === null ? "" : null))} 265 - enabled={febboxToken !== null} 274 + onClick={() => setFebboxKey((s) => (s === null ? "" : null))} 275 + enabled={febboxKey !== null} 266 276 /> 267 277 </div> 268 278 </div> 269 - {febboxToken !== null ? ( 279 + {febboxKey !== null ? ( 270 280 <> 271 281 <Divider marginClass="my-6 px-8 box-content -mx-8" /> 272 282 ··· 328 338 <StatusCircle type={statusMap[status]} className="mx-2 mr-4" /> 329 339 <AuthInputBox 330 340 onChange={(newToken) => { 331 - setFebboxToken(newToken); 341 + setFebboxKey(newToken); 332 342 }} 333 - value={febboxToken ?? ""} 343 + value={febboxKey ?? ""} 334 344 placeholder="eyABCdE..." 335 345 passwordToggleable 336 346 className="flex-grow" ··· 359 369 } 360 370 361 371 export function ConnectionsPart( 362 - props: BackendEditProps & ProxyEditProps & FebboxTokenProps, 372 + props: BackendEditProps & ProxyEditProps & FebboxKeyProps, 363 373 ) { 364 374 const { t } = useTranslation(); 365 375 return ( ··· 377 387 backendUrl={props.backendUrl} 378 388 setBackendUrl={props.setBackendUrl} 379 389 /> 380 - <FebboxTokenEdit 381 - febboxToken={props.febboxToken} 382 - setFebboxToken={props.setFebboxToken} 390 + <FebboxKeyEdit 391 + febboxKey={props.febboxKey} 392 + setFebboxKey={props.setFebboxKey} 383 393 /> 384 394 </div> 385 395 </div>
+12 -13
src/pages/parts/settings/SetupPart.tsx
··· 18 18 import { Heading3 } from "@/components/utils/Text"; 19 19 import { conf } from "@/setup/config"; 20 20 import { useAuthStore } from "@/stores/auth"; 21 + import { usePreferencesStore } from "@/stores/preferences"; 21 22 22 23 const getRegion = async (): Promise<string | null> => { 23 24 if (typeof window === "undefined") return null; ··· 72 73 extension: Status; 73 74 proxy: Status; 74 75 defaultProxy: Status; 75 - febboxTokenTest?: Status; 76 + febboxKeyTest?: Status; 76 77 }; 77 78 78 79 function testProxy(url: string) { ··· 87 88 }); 88 89 } 89 90 90 - export async function testFebboxToken( 91 - febboxToken: string | null, 92 - ): Promise<Status> { 91 + export async function testFebboxKey(febboxKey: string | null): Promise<Status> { 93 92 const BASE_URL = await getBaseUrl(); 94 93 const febboxApiTestUrl = `${BASE_URL}/movie/tt13654226`; 95 94 96 - if (!febboxToken) { 95 + if (!febboxKey) { 97 96 return "unset"; 98 97 } 99 98 ··· 107 106 try { 108 107 const response = await fetch(febboxApiTestUrl, { 109 108 headers: { 110 - "ui-token": febboxToken, 109 + "ui-token": febboxKey, 111 110 }, 112 111 }); 113 112 ··· 177 176 178 177 function useIsSetup() { 179 178 const proxyUrls = useAuthStore((s) => s.proxySet); 180 - const febboxToken = useAuthStore((s) => s.febboxToken); 179 + const febboxKey = usePreferencesStore((s) => s.febboxKey); 181 180 const { loading, value } = useAsync(async (): Promise<SetupData> => { 182 181 const extensionStatus: Status = (await isExtensionActive()) 183 182 ? "success" ··· 192 191 } 193 192 } 194 193 195 - const febboxTokenStatus: Status = await testFebboxToken(febboxToken); 194 + const febboxKeyStatus: Status = await testFebboxKey(febboxKey); 196 195 197 196 return { 198 197 extension: extensionStatus, 199 198 proxy: proxyStatus, 200 199 defaultProxy: "success", 201 200 ...(conf().ALLOW_FEBBOX_KEY && { 202 - febboxTokenTest: febboxTokenStatus, 201 + febboxKeyTest: febboxKeyStatus, 203 202 }), 204 203 }; 205 - }, [proxyUrls, febboxToken]); 204 + }, [proxyUrls, febboxKey]); 206 205 207 206 let globalState: Status = "unset"; 208 207 if ( 209 208 value?.extension === "success" || 210 209 value?.proxy === "success" || 211 - value?.febboxTokenTest === "success" 210 + value?.febboxKeyTest === "success" 212 211 ) 213 212 globalState = "success"; 214 213 if ( 215 214 value?.proxy === "error" || 216 215 value?.extension === "error" || 217 - value?.febboxTokenTest === "error" 216 + value?.febboxKeyTest === "error" 218 217 ) 219 218 globalState = "error"; 220 219 ··· 356 355 {t("settings.connections.setup.items.default")} 357 356 </SetupCheckList> 358 357 {conf().ALLOW_FEBBOX_KEY && ( 359 - <SetupCheckList status={setupStates.febboxTokenTest || "unset"}> 358 + <SetupCheckList status={setupStates.febboxKeyTest || "unset"}> 360 359 Febbox UI token 361 360 </SetupCheckList> 362 361 )}
-8
src/stores/auth/index.ts
··· 22 22 account: null | AccountWithToken; 23 23 backendUrl: null | string; 24 24 proxySet: null | string[]; 25 - febboxToken: null | string; 26 25 removeAccount(): void; 27 26 setAccount(acc: AccountWithToken): void; 28 27 updateDeviceName(deviceName: string): void; ··· 30 29 setAccountProfile(acc: Account["profile"]): void; 31 30 setBackendUrl(url: null | string): void; 32 31 setProxySet(urls: null | string[]): void; 33 - setFebboxToken(token: null | string): void; 34 32 } 35 33 36 34 export const useAuthStore = create( ··· 39 37 account: null, 40 38 backendUrl: null, 41 39 proxySet: null, 42 - febboxToken: null, 43 40 setAccount(acc) { 44 41 set((s) => { 45 42 s.account = acc; ··· 58 55 setProxySet(urls) { 59 56 set((s) => { 60 57 s.proxySet = urls; 61 - }); 62 - }, 63 - setFebboxToken(token) { 64 - set((s) => { 65 - s.febboxToken = token; 66 58 }); 67 59 }, 68 60 setAccountProfile(profile) {
+8
src/stores/preferences/index.tsx
··· 14 14 sourceOrder: string[]; 15 15 enableSourceOrder: boolean; 16 16 proxyTmdb: boolean; 17 + febboxKey: string | null; 17 18 18 19 setEnableThumbnails(v: boolean): void; 19 20 setEnableAutoplay(v: boolean): void; ··· 26 27 setSourceOrder(v: string[]): void; 27 28 setEnableSourceOrder(v: boolean): void; 28 29 setProxyTmdb(v: boolean): void; 30 + setFebboxKey(v: string | null): void; 29 31 } 30 32 31 33 export const usePreferencesStore = create( ··· 42 44 sourceOrder: [], 43 45 enableSourceOrder: false, 44 46 proxyTmdb: false, 47 + febboxKey: null, 45 48 setEnableThumbnails(v) { 46 49 set((s) => { 47 50 s.enableThumbnails = v; ··· 95 98 setProxyTmdb(v) { 96 99 set((s) => { 97 100 s.proxyTmdb = v; 101 + }); 102 + }, 103 + setFebboxKey(v) { 104 + set((s) => { 105 + s.febboxKey = v; 98 106 }); 99 107 }, 100 108 })),