diff --git a/app/_layout.tsx b/app/_layout.tsx index 487f4f39..6ff7e994 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -1,23 +1,22 @@ +import { CurrentlyPlayingBar } from "@/components/CurrentlyPlayingBar"; import { JellyfinProvider } from "@/providers/JellyfinProvider"; +import { JobQueueProvider } from "@/providers/JobQueueProvider"; +import { PlaybackProvider } from "@/providers/PlaybackProvider"; +import { useSettings } from "@/utils/atoms/settings"; +import { ActionSheetProvider } from "@expo/react-native-action-sheet"; +import { BottomSheetModalProvider } from "@gorhom/bottom-sheet"; import { DarkTheme, ThemeProvider } from "@react-navigation/native"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { useFonts } from "expo-font"; -import { Stack } from "expo-router"; -import * as SplashScreen from "expo-splash-screen"; -import { Provider as JotaiProvider } from "jotai"; -import { useEffect, useRef, useState } from "react"; -import "react-native-reanimated"; -import * as ScreenOrientation from "expo-screen-orientation"; -import { StatusBar } from "expo-status-bar"; -import { CurrentlyPlayingBar } from "@/components/CurrentlyPlayingBar"; -import { ActionSheetProvider } from "@expo/react-native-action-sheet"; -import { useJobProcessor } from "@/utils/atoms/queue"; -import { JobQueueProvider } from "@/providers/JobQueueProvider"; import { useKeepAwake } from "expo-keep-awake"; -import { useSettings } from "@/utils/atoms/settings"; +import { Stack } from "expo-router"; +import * as ScreenOrientation from "expo-screen-orientation"; +import * as SplashScreen from "expo-splash-screen"; +import { StatusBar } from "expo-status-bar"; +import { Provider as JotaiProvider } from "jotai"; +import { useEffect, useRef } from "react"; import { GestureHandlerRootView } from "react-native-gesture-handler"; -import { BottomSheetModalProvider } from "@gorhom/bottom-sheet"; -import { PlaybackProvider } from "@/providers/PlaybackProvider"; +import "react-native-reanimated"; // Prevent the splash screen from auto-hiding before asset loading is complete. SplashScreen.preventAutoHideAsync(); diff --git a/components/CurrentlyPlayingBar.tsx b/components/CurrentlyPlayingBar.tsx index 90b81c73..80fcc423 100644 --- a/components/CurrentlyPlayingBar.tsx +++ b/components/CurrentlyPlayingBar.tsx @@ -1,40 +1,22 @@ import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; -import { - currentlyPlayingItemAtom, - fullScreenAtom, - playingAtom, - showCurrentlyPlayingBarAtom, -} from "@/utils/atoms/playState"; +import { usePlayback } from "@/providers/PlaybackProvider"; import { getBackdropUrl } from "@/utils/jellyfin/image/getBackdropUrl"; import { getAuthHeaders } from "@/utils/jellyfin/jellyfin"; -import { reportPlaybackProgress } from "@/utils/jellyfin/playstate/reportPlaybackProgress"; -import { reportPlaybackStopped } from "@/utils/jellyfin/playstate/reportPlaybackStopped"; -import { getUserItemData } from "@/utils/jellyfin/user-library/getUserItemData"; import { writeToLog } from "@/utils/log"; import { Ionicons } from "@expo/vector-icons"; -import { getMediaInfoApi } from "@jellyfin/sdk/lib/utils/api"; -import { useQuery, useQueryClient } from "@tanstack/react-query"; import { BlurView } from "expo-blur"; import { useRouter, useSegments } from "expo-router"; import { useAtom } from "jotai"; -import { - useCallback, - useContext, - useEffect, - useMemo, - useRef, - useState, -} from "react"; +import { useEffect, useMemo } from "react"; import { Alert, Platform, TouchableOpacity, View } from "react-native"; import Animated, { useAnimatedStyle, useSharedValue, withTiming, } from "react-native-reanimated"; -import Video, { OnProgressData, VideoRef } from "react-native-video"; +import Video from "react-native-video"; import { Text } from "./common/Text"; import { Loader } from "./Loader"; -import { usePlayback } from "@/providers/PlaybackProvider"; export const CurrentlyPlayingBar: React.FC = () => { const segments = useSegments(); diff --git a/providers/PlaybackProvider.tsx b/providers/PlaybackProvider.tsx index fc98c5a5..1311d755 100644 --- a/providers/PlaybackProvider.tsx +++ b/providers/PlaybackProvider.tsx @@ -1,27 +1,24 @@ +import { useQuery } from "@tanstack/react-query"; import React, { createContext, + ReactNode, + useCallback, useContext, useRef, useState, - useEffect, - ReactNode, - useCallback, } from "react"; -import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { getUserItemData } from "@/utils/jellyfin/user-library/getUserItemData"; -import { getMediaInfoApi } from "@jellyfin/sdk/lib/utils/api"; -import { Ionicons } from "@expo/vector-icons"; -import { useAtom } from "jotai"; -import { OnProgressData, type VideoRef } from "react-native-video"; -import { apiAtom, userAtom } from "./JellyfinProvider"; +import { useSettings } from "@/utils/atoms/settings"; +import { reportPlaybackProgress } from "@/utils/jellyfin/playstate/reportPlaybackProgress"; +import { reportPlaybackStopped } from "@/utils/jellyfin/playstate/reportPlaybackStopped"; import { BaseItemDto, PlaybackInfoResponse, } from "@jellyfin/sdk/lib/generated-client/models"; -import { reportPlaybackStopped } from "@/utils/jellyfin/playstate/reportPlaybackStopped"; -import { reportPlaybackProgress } from "@/utils/jellyfin/playstate/reportPlaybackProgress"; -import { useSettings } from "@/utils/atoms/settings"; +import { getMediaInfoApi } from "@jellyfin/sdk/lib/utils/api"; +import { useAtom } from "jotai"; +import { OnProgressData, type VideoRef } from "react-native-video"; +import { apiAtom, userAtom } from "./JellyfinProvider"; type CurrentlyPlayingState = { url: string;