A small web app for watching movies and shows easily
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

99 lines
2.7 KiB

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 { useLanguageStore } from "@/stores/language";
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 clearBookmarks = useBookmarkStore((s) => s.clear);
const clearProgress = useProgressStore((s) => s.clear);
const setTheme = useThemeStore((s) => s.setTheme);
const setAppLanguage = useLanguageStore((s) => s.setLanguage);
const importSubtitleLanguage = useSubtitleStore(
(s) => s.importSubtitleLanguage,
);
const replaceBookmarks = useBookmarkStore((s) => s.replaceBookmarks);
const replaceItems = useProgressStore((s) => s.replaceItems);
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();
}, [removeAccount, clearBookmarks, clearProgress]);
const syncData = useCallback(
async (
_user: UserResponse,
_session: SessionResponse,
progress: ProgressResponse[],
bookmarks: BookmarkResponse[],
settings: SettingsResponse,
) => {
replaceBookmarks(bookmarkResponsesToEntries(bookmarks));
replaceItems(progressResponsesToEntries(progress));
if (settings.applicationLanguage) {
setAppLanguage(settings.applicationLanguage);
}
if (settings.defaultSubtitleLanguage) {
importSubtitleLanguage(settings.defaultSubtitleLanguage);
}
if (settings.applicationTheme) {
setTheme(settings.applicationTheme);
}
},
[
replaceBookmarks,
replaceItems,
setAppLanguage,
importSubtitleLanguage,
setTheme,
],
);
return {
loggedIn,
login,
logout,
syncData,
};
}