pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
at main 345 lines 11 kB view raw
1import { useCallback } from "react"; 2 3import { LoginResponse, SessionResponse } from "@/backend/accounts/auth"; 4import { SettingsResponse } from "@/backend/accounts/settings"; 5import { 6 BookmarkResponse, 7 ProgressResponse, 8 UserResponse, 9 WatchHistoryResponse, 10 bookmarkResponsesToEntries, 11 progressResponsesToEntries, 12 watchHistoryResponsesToEntries, 13} from "@/backend/accounts/user"; 14import { useAuthStore } from "@/stores/auth"; 15import { useBookmarkStore } from "@/stores/bookmarks"; 16import { useGroupOrderStore } from "@/stores/groupOrder"; 17import { useLanguageStore } from "@/stores/language"; 18import { usePreferencesStore } from "@/stores/preferences"; 19import { useProgressStore } from "@/stores/progress"; 20import { useSubtitleStore } from "@/stores/subtitles"; 21import { useThemeStore } from "@/stores/theme"; 22import { useWatchHistoryStore } from "@/stores/watchHistory"; 23 24export function useAuthData() { 25 const loggedIn = !!useAuthStore((s) => s.account); 26 const setAccount = useAuthStore((s) => s.setAccount); 27 const removeAccount = useAuthStore((s) => s.removeAccount); 28 const setProxySet = useAuthStore((s) => s.setProxySet); 29 const clearBookmarks = useBookmarkStore((s) => s.clear); 30 const clearProgress = useProgressStore((s) => s.clear); 31 const clearWatchHistory = useWatchHistoryStore((s) => s.clear); 32 const clearGroupOrder = useGroupOrderStore((s) => s.clear); 33 const setTheme = useThemeStore((s) => s.setTheme); 34 const setAppLanguage = useLanguageStore((s) => s.setLanguage); 35 const importSubtitleLanguage = useSubtitleStore( 36 (s) => s.importSubtitleLanguage, 37 ); 38 const setFebboxKey = usePreferencesStore((s) => s.setFebboxKey); 39 const setdebridToken = usePreferencesStore((s) => s.setdebridToken); 40 const setdebridService = usePreferencesStore((s) => s.setdebridService); 41 42 const replaceBookmarks = useBookmarkStore((s) => s.replaceBookmarks); 43 const replaceItems = useProgressStore((s) => s.replaceItems); 44 const replaceWatchHistory = useWatchHistoryStore((s) => s.replaceItems); 45 46 const setEnableThumbnails = usePreferencesStore((s) => s.setEnableThumbnails); 47 const setEnableAutoplay = usePreferencesStore((s) => s.setEnableAutoplay); 48 const setEnableSkipCredits = usePreferencesStore( 49 (s) => s.setEnableSkipCredits, 50 ); 51 const setEnableDiscover = usePreferencesStore((s) => s.setEnableDiscover); 52 const setEnableFeatured = usePreferencesStore((s) => s.setEnableFeatured); 53 const setEnableDetailsModal = usePreferencesStore( 54 (s) => s.setEnableDetailsModal, 55 ); 56 const setEnableImageLogos = usePreferencesStore((s) => s.setEnableImageLogos); 57 const setEnableCarouselView = usePreferencesStore( 58 (s) => s.setEnableCarouselView, 59 ); 60 const setForceCompactEpisodeView = usePreferencesStore( 61 (s) => s.setForceCompactEpisodeView, 62 ); 63 const setSourceOrder = usePreferencesStore((s) => s.setSourceOrder); 64 const setEnableSourceOrder = usePreferencesStore( 65 (s) => s.setEnableSourceOrder, 66 ); 67 const setLastSuccessfulSource = usePreferencesStore( 68 (s) => s.setLastSuccessfulSource, 69 ); 70 const setEnableLastSuccessfulSource = usePreferencesStore( 71 (s) => s.setEnableLastSuccessfulSource, 72 ); 73 const setEmbedOrder = usePreferencesStore((s) => s.setEmbedOrder); 74 const setEnableEmbedOrder = usePreferencesStore((s) => s.setEnableEmbedOrder); 75 76 const setProxyTmdb = usePreferencesStore((s) => s.setProxyTmdb); 77 78 const setEnableLowPerformanceMode = usePreferencesStore( 79 (s) => s.setEnableLowPerformanceMode, 80 ); 81 const setEnableNativeSubtitles = usePreferencesStore( 82 (s) => s.setEnableNativeSubtitles, 83 ); 84 const setEnableHoldToBoost = usePreferencesStore( 85 (s) => s.setEnableHoldToBoost, 86 ); 87 const setHomeSectionOrder = usePreferencesStore((s) => s.setHomeSectionOrder); 88 const setEnableDoubleClickToSeek = usePreferencesStore( 89 (s) => s.setEnableDoubleClickToSeek, 90 ); 91 const setManualSourceSelection = usePreferencesStore( 92 (s) => s.setManualSourceSelection, 93 ); 94 const setEnableAutoResumeOnPlaybackError = usePreferencesStore( 95 (s) => s.setEnableAutoResumeOnPlaybackError, 96 ); 97 const setEnableNumberKeySeeking = usePreferencesStore( 98 (s) => s.setEnableNumberKeySeeking, 99 ); 100 const setKeyboardShortcuts = usePreferencesStore( 101 (s) => s.setKeyboardShortcuts, 102 ); 103 const setEnableMinimalCards = usePreferencesStore( 104 (s) => s.setEnableMinimalCards, 105 ); 106 107 const login = useCallback( 108 async ( 109 loginResponse: LoginResponse, 110 user: UserResponse, 111 session: SessionResponse, 112 seed: string, 113 ) => { 114 const account = { 115 token: loginResponse.token, 116 userId: user.id, 117 sessionId: loginResponse.session.id, 118 deviceName: session.device, 119 profile: user.profile, 120 nickname: user.nickname, 121 seed, 122 }; 123 setAccount(account); 124 return account; 125 }, 126 [setAccount], 127 ); 128 129 const logout = useCallback(async () => { 130 removeAccount(); 131 clearBookmarks(); 132 clearProgress(); 133 clearWatchHistory(); 134 clearGroupOrder(); 135 setFebboxKey(null); 136 }, [ 137 removeAccount, 138 clearBookmarks, 139 clearProgress, 140 clearWatchHistory, 141 clearGroupOrder, 142 setFebboxKey, 143 ]); 144 145 const syncData = useCallback( 146 async ( 147 _user: UserResponse, 148 _session: SessionResponse, 149 progress: ProgressResponse[], 150 bookmarks: BookmarkResponse[], 151 watchHistory: WatchHistoryResponse[], 152 settings: SettingsResponse, 153 groupOrder: { groupOrder: string[] }, 154 ) => { 155 replaceBookmarks(bookmarkResponsesToEntries(bookmarks)); 156 replaceItems(progressResponsesToEntries(progress)); 157 replaceWatchHistory(watchHistoryResponsesToEntries(watchHistory)); 158 159 if (groupOrder?.groupOrder) { 160 useGroupOrderStore.getState().setGroupOrder(groupOrder.groupOrder); 161 } 162 163 if (settings.applicationLanguage) { 164 setAppLanguage(settings.applicationLanguage); 165 } 166 167 if (settings.defaultSubtitleLanguage) { 168 importSubtitleLanguage(settings.defaultSubtitleLanguage); 169 } 170 171 if (settings.applicationTheme) { 172 setTheme(settings.applicationTheme); 173 } 174 175 if (settings.proxyUrls) { 176 setProxySet(settings.proxyUrls); 177 } 178 179 if (settings.enableThumbnails !== undefined) { 180 setEnableThumbnails(settings.enableThumbnails); 181 } 182 183 if (settings.enableAutoplay !== undefined) { 184 setEnableAutoplay(settings.enableAutoplay); 185 } 186 187 if (settings.enableSkipCredits !== undefined) { 188 setEnableSkipCredits(settings.enableSkipCredits); 189 } 190 191 if (settings.enableDiscover !== undefined) { 192 setEnableDiscover(settings.enableDiscover); 193 } 194 195 if (settings.enableFeatured !== undefined) { 196 setEnableFeatured(settings.enableFeatured); 197 } 198 199 if (settings.enableDetailsModal !== undefined) { 200 setEnableDetailsModal(settings.enableDetailsModal); 201 } 202 203 if (settings.enableImageLogos !== undefined) { 204 setEnableImageLogos(settings.enableImageLogos); 205 } 206 207 if (settings.enableCarouselView !== undefined) { 208 setEnableCarouselView(settings.enableCarouselView); 209 } 210 211 if (settings.forceCompactEpisodeView !== undefined) { 212 setForceCompactEpisodeView(settings.forceCompactEpisodeView); 213 } 214 215 if (settings.sourceOrder !== undefined) { 216 setSourceOrder(settings.sourceOrder ?? []); 217 } 218 219 if (settings.enableSourceOrder !== undefined) { 220 setEnableSourceOrder(settings.enableSourceOrder); 221 } 222 223 if (settings.lastSuccessfulSource !== undefined) { 224 setLastSuccessfulSource(settings.lastSuccessfulSource); 225 } 226 227 if (settings.enableLastSuccessfulSource !== undefined) { 228 setEnableLastSuccessfulSource(settings.enableLastSuccessfulSource); 229 } 230 231 if (settings.embedOrder !== undefined) { 232 setEmbedOrder(settings.embedOrder ?? []); 233 } 234 235 if (settings.enableEmbedOrder !== undefined) { 236 setEnableEmbedOrder(settings.enableEmbedOrder); 237 } 238 239 if (settings.proxyTmdb !== undefined) { 240 setProxyTmdb(settings.proxyTmdb); 241 } 242 243 if (settings.febboxKey !== undefined) { 244 setFebboxKey(settings.febboxKey); 245 } 246 247 if (settings.debridToken !== undefined) { 248 setdebridToken(settings.debridToken); 249 } 250 251 if (settings.debridService !== undefined) { 252 setdebridService(settings.debridService); 253 } 254 255 if (settings.enableLowPerformanceMode !== undefined) { 256 setEnableLowPerformanceMode(settings.enableLowPerformanceMode); 257 } 258 259 if (settings.enableNativeSubtitles !== undefined) { 260 setEnableNativeSubtitles(settings.enableNativeSubtitles); 261 } 262 263 if (settings.enableHoldToBoost !== undefined) { 264 setEnableHoldToBoost(settings.enableHoldToBoost); 265 } 266 267 if (settings.homeSectionOrder !== undefined) { 268 setHomeSectionOrder( 269 settings.homeSectionOrder ?? ["watching", "bookmarks"], 270 ); 271 } 272 273 if (settings.manualSourceSelection !== undefined) { 274 setManualSourceSelection(settings.manualSourceSelection); 275 } 276 277 if (settings.enableDoubleClickToSeek !== undefined) { 278 setEnableDoubleClickToSeek(settings.enableDoubleClickToSeek); 279 } 280 281 if (settings.enableAutoResumeOnPlaybackError !== undefined) { 282 setEnableAutoResumeOnPlaybackError( 283 settings.enableAutoResumeOnPlaybackError, 284 ); 285 } 286 287 if (settings.enableNumberKeySeeking !== undefined) { 288 setEnableNumberKeySeeking(settings.enableNumberKeySeeking); 289 } 290 291 if (settings.keyboardShortcuts !== undefined) { 292 setKeyboardShortcuts(settings.keyboardShortcuts); 293 } 294 295 if (settings.enableMinimalCards !== undefined) { 296 setEnableMinimalCards(settings.enableMinimalCards); 297 } 298 }, 299 [ 300 replaceBookmarks, 301 replaceItems, 302 replaceWatchHistory, 303 setAppLanguage, 304 importSubtitleLanguage, 305 setTheme, 306 setProxySet, 307 setEnableThumbnails, 308 setEnableAutoplay, 309 setEnableSkipCredits, 310 setEnableDiscover, 311 setEnableFeatured, 312 setEnableDetailsModal, 313 setEnableImageLogos, 314 setEnableCarouselView, 315 setForceCompactEpisodeView, 316 setSourceOrder, 317 setEnableSourceOrder, 318 setLastSuccessfulSource, 319 setEnableLastSuccessfulSource, 320 setEmbedOrder, 321 setEnableEmbedOrder, 322 setProxyTmdb, 323 setFebboxKey, 324 setdebridToken, 325 setdebridService, 326 setEnableLowPerformanceMode, 327 setEnableNativeSubtitles, 328 setEnableHoldToBoost, 329 setHomeSectionOrder, 330 setManualSourceSelection, 331 setEnableDoubleClickToSeek, 332 setEnableAutoResumeOnPlaybackError, 333 setEnableNumberKeySeeking, 334 setKeyboardShortcuts, 335 setEnableMinimalCards, 336 ], 337 ); 338 339 return { 340 loggedIn, 341 login, 342 logout, 343 syncData, 344 }; 345}