import { useCallback } from "react"; import { LoginResponse, SessionResponse } from "@/backend/accounts/auth"; import { SettingsResponse } from "@/backend/accounts/settings"; import { BookmarkResponse, ProgressResponse, UserResponse, bookmarkResponsesToEntries, progressResponsesToEntries, } from "@/backend/accounts/user"; import { useAuthStore } from "@/stores/auth"; import { useBookmarkStore } from "@/stores/bookmarks"; import { useGroupOrderStore } from "@/stores/groupOrder"; import { useLanguageStore } from "@/stores/language"; import { usePreferencesStore } from "@/stores/preferences"; import { useProgressStore } from "@/stores/progress"; import { useSubtitleStore } from "@/stores/subtitles"; import { useThemeStore } from "@/stores/theme"; export function useAuthData() { const loggedIn = !!useAuthStore((s) => s.account); const setAccount = useAuthStore((s) => s.setAccount); const removeAccount = useAuthStore((s) => s.removeAccount); const setProxySet = useAuthStore((s) => s.setProxySet); const clearBookmarks = useBookmarkStore((s) => s.clear); const clearProgress = useProgressStore((s) => s.clear); const clearGroupOrder = useGroupOrderStore((s) => s.clear); const setTheme = useThemeStore((s) => s.setTheme); const setAppLanguage = useLanguageStore((s) => s.setLanguage); const importSubtitleLanguage = useSubtitleStore( (s) => s.importSubtitleLanguage, ); const setFebboxKey = usePreferencesStore((s) => s.setFebboxKey); const setRealDebridKey = usePreferencesStore((s) => s.setRealDebridKey); const replaceBookmarks = useBookmarkStore((s) => s.replaceBookmarks); const replaceItems = useProgressStore((s) => s.replaceItems); const setEnableThumbnails = usePreferencesStore((s) => s.setEnableThumbnails); const setEnableAutoplay = usePreferencesStore((s) => s.setEnableAutoplay); const setEnableSkipCredits = usePreferencesStore( (s) => s.setEnableSkipCredits, ); const setEnableDiscover = usePreferencesStore((s) => s.setEnableDiscover); const setEnableFeatured = usePreferencesStore((s) => s.setEnableFeatured); const setEnableDetailsModal = usePreferencesStore( (s) => s.setEnableDetailsModal, ); const setEnableImageLogos = usePreferencesStore((s) => s.setEnableImageLogos); const setEnableCarouselView = usePreferencesStore( (s) => s.setEnableCarouselView, ); const setForceCompactEpisodeView = usePreferencesStore( (s) => s.setForceCompactEpisodeView, ); const setSourceOrder = usePreferencesStore((s) => s.setSourceOrder); const setEnableSourceOrder = usePreferencesStore( (s) => s.setEnableSourceOrder, ); const setDisabledSources = usePreferencesStore((s) => s.setDisabledSources); const setEmbedOrder = usePreferencesStore((s) => s.setEmbedOrder); const setEnableEmbedOrder = usePreferencesStore((s) => s.setEnableEmbedOrder); const setDisabledEmbeds = usePreferencesStore((s) => s.setDisabledEmbeds); const setProxyTmdb = usePreferencesStore((s) => s.setProxyTmdb); const setEnableLowPerformanceMode = usePreferencesStore( (s) => s.setEnableLowPerformanceMode, ); const setEnableNativeSubtitles = usePreferencesStore( (s) => s.setEnableNativeSubtitles, ); const setEnableHoldToBoost = usePreferencesStore( (s) => s.setEnableHoldToBoost, ); const setHomeSectionOrder = usePreferencesStore((s) => s.setHomeSectionOrder); const setEnableDoubleClickToSeek = usePreferencesStore( (s) => s.setEnableDoubleClickToSeek, ); const setManualSourceSelection = usePreferencesStore( (s) => s.setManualSourceSelection, ); const login = useCallback( async ( loginResponse: LoginResponse, user: UserResponse, session: SessionResponse, seed: string, ) => { const account = { token: loginResponse.token, userId: user.id, sessionId: loginResponse.session.id, deviceName: session.device, profile: user.profile, seed, }; setAccount(account); return account; }, [setAccount], ); const logout = useCallback(async () => { removeAccount(); clearBookmarks(); clearProgress(); clearGroupOrder(); setFebboxKey(null); }, [ removeAccount, clearBookmarks, clearProgress, clearGroupOrder, setFebboxKey, ]); const syncData = useCallback( async ( _user: UserResponse, _session: SessionResponse, progress: ProgressResponse[], bookmarks: BookmarkResponse[], settings: SettingsResponse, groupOrder: { groupOrder: string[] }, ) => { replaceBookmarks(bookmarkResponsesToEntries(bookmarks)); replaceItems(progressResponsesToEntries(progress)); if (groupOrder?.groupOrder) { useGroupOrderStore.getState().setGroupOrder(groupOrder.groupOrder); } if (settings.applicationLanguage) { setAppLanguage(settings.applicationLanguage); } if (settings.defaultSubtitleLanguage) { importSubtitleLanguage(settings.defaultSubtitleLanguage); } if (settings.applicationTheme) { setTheme(settings.applicationTheme); } if (settings.proxyUrls) { setProxySet(settings.proxyUrls); } if (settings.enableThumbnails !== undefined) { setEnableThumbnails(settings.enableThumbnails); } if (settings.enableAutoplay !== undefined) { setEnableAutoplay(settings.enableAutoplay); } if (settings.enableSkipCredits !== undefined) { setEnableSkipCredits(settings.enableSkipCredits); } if (settings.enableDiscover !== undefined) { setEnableDiscover(settings.enableDiscover); } if (settings.enableFeatured !== undefined) { setEnableFeatured(settings.enableFeatured); } if (settings.enableDetailsModal !== undefined) { setEnableDetailsModal(settings.enableDetailsModal); } if (settings.enableImageLogos !== undefined) { setEnableImageLogos(settings.enableImageLogos); } if (settings.enableCarouselView !== undefined) { setEnableCarouselView(settings.enableCarouselView); } if (settings.forceCompactEpisodeView !== undefined) { setForceCompactEpisodeView(settings.forceCompactEpisodeView); } if (settings.sourceOrder !== undefined) { setSourceOrder(settings.sourceOrder); } if (settings.enableSourceOrder !== undefined) { setEnableSourceOrder(settings.enableSourceOrder); } if (settings.disabledSources !== undefined) { setDisabledSources(settings.disabledSources); } if (settings.embedOrder !== undefined) { setEmbedOrder(settings.embedOrder); } if (settings.enableEmbedOrder !== undefined) { setEnableEmbedOrder(settings.enableEmbedOrder); } if (settings.disabledEmbeds !== undefined) { setDisabledEmbeds(settings.disabledEmbeds); } if (settings.proxyTmdb !== undefined) { setProxyTmdb(settings.proxyTmdb); } if (settings.febboxKey !== undefined) { setFebboxKey(settings.febboxKey); } if (settings.realDebridKey !== undefined) { setRealDebridKey(settings.realDebridKey); } if (settings.enableLowPerformanceMode !== undefined) { setEnableLowPerformanceMode(settings.enableLowPerformanceMode); } if (settings.enableNativeSubtitles !== undefined) { setEnableNativeSubtitles(settings.enableNativeSubtitles); } if (settings.enableHoldToBoost !== undefined) { setEnableHoldToBoost(settings.enableHoldToBoost); } if (settings.homeSectionOrder !== undefined) { setHomeSectionOrder(settings.homeSectionOrder); } if (settings.manualSourceSelection !== undefined) { setManualSourceSelection(settings.manualSourceSelection); } if (settings.enableDoubleClickToSeek !== undefined) { setEnableDoubleClickToSeek(settings.enableDoubleClickToSeek); } }, [ replaceBookmarks, replaceItems, setAppLanguage, importSubtitleLanguage, setTheme, setProxySet, setEnableThumbnails, setEnableAutoplay, setEnableSkipCredits, setEnableDiscover, setEnableFeatured, setEnableDetailsModal, setEnableImageLogos, setEnableCarouselView, setForceCompactEpisodeView, setSourceOrder, setEnableSourceOrder, setDisabledSources, setEmbedOrder, setEnableEmbedOrder, setDisabledEmbeds, setProxyTmdb, setFebboxKey, setRealDebridKey, setEnableLowPerformanceMode, setEnableNativeSubtitles, setEnableHoldToBoost, setHomeSectionOrder, setManualSourceSelection, setEnableDoubleClickToSeek, ], ); return { loggedIn, login, logout, syncData, }; }