mirror of
https://github.com/p-stream/p-stream.git
synced 2026-03-11 17:55:33 +00:00
288 lines
8.7 KiB
TypeScript
288 lines
8.7 KiB
TypeScript
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,
|
|
};
|
|
}
|