From 962f65874e56785fa931e5d671cb9294624ddbd3 Mon Sep 17 00:00:00 2001 From: retardgerman <78982850+retardgerman@users.noreply.github.com> Date: Sun, 5 Jan 2025 08:16:04 +0100 Subject: [PATCH 01/20] fix: removed assignees and modified link to roadmap --- .github/ISSUE_TEMPLATE/bug_report.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a4d04018..1ac06eda 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -4,9 +4,7 @@ title: "[Bug]: " labels: - ["❌ bug"] projects: - - ["fredrikburmester/5"] -assignees: - - fredrikburmester + - ["streamyfin/3"] body: - type: textarea From 46ac4a2cc738ca305eeffa56dc81b11c7b4c1beb Mon Sep 17 00:00:00 2001 From: retardgerman <78982850+retardgerman@users.noreply.github.com> Date: Sun, 5 Jan 2025 08:28:32 +0100 Subject: [PATCH 02/20] fix: auto add feature requests to roadmap --- .github/ISSUE_TEMPLATE/feature_request.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 544b2743..0a4ed68b 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,7 +4,8 @@ about: Suggest an idea for this project title: '' labels: '✨ enhancement' assignees: '' - +projects: + - streamyfin/3 --- **Describe the solution you'd like** From a602c35a8f588c6c9a54f25725f6ca72785b1d00 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Sun, 5 Jan 2025 10:39:46 +0100 Subject: [PATCH 03/20] refactor: Add support for tvos --- app.json | 26 ++++++++++++++++----- app/(auth)/(tabs)/(custom-links)/index.tsx | 12 ++++++++-- bun.lockb | Bin 594152 -> 595756 bytes modules/vlc-player/ios/VlcPlayer.podspec | 3 ++- modules/vlc-player/ios/VlcPlayerView.swift | 4 ++++ package.json | 20 ++++++++++++---- 6 files changed, 52 insertions(+), 13 deletions(-) diff --git a/app.json b/app.json index 8a0f4f54..2395acc2 100644 --- a/app.json +++ b/app.json @@ -13,13 +13,18 @@ "backgroundColor": "#2E2E2E" }, "jsEngine": "hermes", - "assetBundlePatterns": ["**/*"], + "assetBundlePatterns": [ + "**/*" + ], "ios": { "requireFullScreen": true, "infoPlist": { "NSCameraUsageDescription": "The app needs access to your camera to scan barcodes.", "NSMicrophoneUsageDescription": "The app needs access to your microphone.", - "UIBackgroundModes": ["audio", "fetch"], + "UIBackgroundModes": [ + "audio", + "fetch" + ], "NSLocalNetworkUsageDescription": "The app needs access to your local network to connect to your Jellyfin server.", "NSAppTransportSecurity": { "NSAllowsArbitraryLoads": true @@ -48,6 +53,7 @@ ] }, "plugins": [ + "@react-native-tvos/config-tv", "expo-router", "expo-font", "@config-plugins/ffmpeg-kit-react-native", @@ -108,10 +114,18 @@ "expo-asset", [ "react-native-edge-to-edge", - { "android": { "parentTheme": "Material3" } } + { + "android": { + "parentTheme": "Material3" + } + } ], - ["react-native-bottom-tabs"], - ["./plugins/withChangeNativeAndroidTextToWhite.js"] + [ + "react-native-bottom-tabs" + ], + [ + "./plugins/withChangeNativeAndroidTextToWhite.js" + ] ], "experiments": { "typedRoutes": true @@ -132,4 +146,4 @@ "url": "https://u.expo.dev/e79219d1-797f-4fbe-9fa1-cfd360690a68" } } -} +} \ No newline at end of file diff --git a/app/(auth)/(tabs)/(custom-links)/index.tsx b/app/(auth)/(tabs)/(custom-links)/index.tsx index bf6dc46b..29091e19 100644 --- a/app/(auth)/(tabs)/(custom-links)/index.tsx +++ b/app/(auth)/(tabs)/(custom-links)/index.tsx @@ -1,13 +1,15 @@ +import { Platform } from "react-native"; import { FlatList, TouchableOpacity, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import React, { useCallback, useEffect, useState } from "react"; import { useAtom } from "jotai/index"; import { apiAtom } from "@/providers/JellyfinProvider"; import { ListItem } from "@/components/list/ListItem"; -import * as WebBrowser from "expo-web-browser"; import Ionicons from "@expo/vector-icons/Ionicons"; import { Text } from "@/components/common/Text"; +const WebBrowser = !Platform.isTV ? require("expo-web-browser") : null; + export interface MenuLink { name: string; url: string; @@ -50,7 +52,13 @@ export default function menuLinks() { }} data={menuLinks} renderItem={({ item }) => ( - WebBrowser.openBrowserAsync(item.url)}> + { + if (!Platform.isTV) { + WebBrowser.openBrowserAsync(item.url); + } + }} + > } diff --git a/bun.lockb b/bun.lockb index 3a1947ce30c440a8d00177577d1bbabe3f3ebd0e..902c36ca2d70d6d6403a72b52bc4bdf3cefaf46d 100755 GIT binary patch delta 74263 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
=Ar59Vo)qzob#iq`|z`FFJgKB(7w!M5=Wdk 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 diff --git a/modules/vlc-player/ios/VlcPlayer.podspec b/modules/vlc-player/ios/VlcPlayer.podspec index 642026ae..eaa622ac 100644 --- a/modules/vlc-player/ios/VlcPlayer.podspec +++ b/modules/vlc-player/ios/VlcPlayer.podspec @@ -10,7 +10,8 @@ Pod::Spec.new do |s| s.static_framework = true s.dependency 'ExpoModulesCore' - s.dependency 'MobileVLCKit', '~> 3.6.1b1' + s.ios.dependency 'MobileVLCKit', '~> 3.6.1b1' + s.tvos.dependency 'TVVLCKit', '~> 3.6.1b1' # Swift/Objective-C compatibility s.pod_target_xcconfig = { diff --git a/modules/vlc-player/ios/VlcPlayerView.swift b/modules/vlc-player/ios/VlcPlayerView.swift index f63aff44..cb75721f 100644 --- a/modules/vlc-player/ios/VlcPlayerView.swift +++ b/modules/vlc-player/ios/VlcPlayerView.swift @@ -1,5 +1,9 @@ import ExpoModulesCore +#if os(tvOS) +import TVVLCKit +#else import MobileVLCKit +#endif import UIKit class VlcPlayerView: ExpoView { diff --git a/package.json b/package.json index e5ebb82a..e8e25416 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,13 @@ "submodule-reload": "git submodule update --init --remote --recursive", "start": "bun run submodule-reload && expo start", "reset-project": "node ./scripts/reset-project.js", - "android": "bun run submodule-reload && expo run:android", "ios": "bun run submodule-reload && expo run:ios", + "tvos": "EXPO_TV=1 expo run:ios", + "android": "bun run submodule-reload && expo run:android", + "androidtv": "EXPO_TV=1 expo run:android", "web": "bun run submodule-reload && expo start --web", + "prebuild": "expo prebuild --clean", + "prebuild-tv": "EXPO_TV=1 expo prebuild --clean", "test": "jest --watchAll", "lint": "expo lint", "postinstall": "patch-package" @@ -70,7 +74,7 @@ "nativewind": "^2.0.11", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.74.5", + "react-native": "npm:react-native-tvos@0.74.5-0", "react-native-awesome-slider": "^2.5.6", "react-native-bottom-tabs": "0.7.1", "react-native-circular-progress": "^1.4.1", @@ -108,6 +112,7 @@ "zod": "^3.23.8" }, "devDependencies": { + "@react-native-tvos/config-tv": "^0.1.1", "@babel/core": "^7.26.0", "@types/jest": "^29.5.14", "@types/react": "~18.2.79", @@ -119,5 +124,12 @@ "react-test-renderer": "18.2.0", "typescript": "~5.3.3" }, - "private": true -} + "private": true, + "expo": { + "install": { + "exclude": [ + "react-native" + ] + } + } +} \ No newline at end of file From 2fb19f601be2cf6c9cc933f64cdeb89eb4e25954 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Sun, 5 Jan 2025 10:54:14 +0100 Subject: [PATCH 04/20] remove reload --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index e8e25416..419a1afd 100644 --- a/package.json +++ b/package.json @@ -6,11 +6,11 @@ "submodule-reload": "git submodule update --init --remote --recursive", "start": "bun run submodule-reload && expo start", "reset-project": "node ./scripts/reset-project.js", - "ios": "bun run submodule-reload && expo run:ios", + "ios": "expo run:ios", "tvos": "EXPO_TV=1 expo run:ios", - "android": "bun run submodule-reload && expo run:android", + "android": "expo run:android", "androidtv": "EXPO_TV=1 expo run:android", - "web": "bun run submodule-reload && expo start --web", + "web": "expo start --web", "prebuild": "expo prebuild --clean", "prebuild-tv": "EXPO_TV=1 expo prebuild --clean", "test": "jest --watchAll", From ab33693dd9401dce2da74cfcb094df2a0a0e5d37 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Mon, 6 Jan 2025 13:25:49 +0100 Subject: [PATCH 05/20] wip --- app/(auth)/(tabs)/(home)/_layout.tsx | 2 +- app/(auth)/(tabs)/(home)/index.tsx | 52 ++-- app/(auth)/(tabs)/(home)/settings.tsx | 8 +- .../albums/[albumId].tsx | 20 +- .../collections/[collectionId].tsx | 2 +- .../jellyseerr/page.tsx | 2 +- app/(auth)/(tabs)/(libraries)/[libraryId].tsx | 2 +- app/(auth)/(tabs)/(libraries)/_layout.tsx | 2 +- app/(auth)/player/direct-player.tsx | 2 +- app/(auth)/player/music-player.tsx | 2 +- app/(auth)/player/transcoding-player.tsx | 2 +- app/_layout.tsx | 288 ++++++++++-------- bun.lockb | Bin 595756 -> 595756 bytes components/AudioTrackSelector.tsx | 2 +- components/BitrateSelector.tsx | 2 +- components/Button.tsx | 2 +- components/ContextMenu.native.ts | 0 components/ContextMenu.ts | 1 + components/DropdownMenu.native.ts | 0 components/DropdownMenu.ts | 1 + components/ItemContent.tsx | 40 +-- components/MediaSourceSelector.tsx | 2 +- components/PlayButton.tsx | 2 +- components/RoundButton.tsx | 2 +- components/SubtitleTrackSelector.tsx | 2 +- components/common/JellyseerrItemRouter.tsx | 105 ++++--- components/common/TouchableItemRouter.tsx | 2 +- components/downloads/ActiveDownloads.tsx | 11 +- components/downloads/EpisodeCard.tsx | 2 +- components/downloads/MovieCard.tsx | 2 +- components/home/LargeMovieCarousel.tsx | 2 +- components/series/SeasonDropdown.tsx | 2 +- components/settings/AudioToggles.tsx | 2 +- components/settings/DownloadSettings.tsx | 2 +- components/settings/OtherSettings.tsx | 13 +- components/settings/QuickConnect.tsx | 2 +- components/settings/StorageSettings.tsx | 2 +- components/settings/SubtitleToggles.tsx | 2 +- .../video-player/controls/AudioSlider.tsx | 9 +- .../controls/BrightnessSlider.tsx | 7 +- components/video-player/controls/Controls.tsx | 2 +- .../controls/dropdown/DropdownViewDirect.tsx | 2 +- .../dropdown/DropdownViewTranscoding.tsx | 2 +- hooks/useCreditSkipper.ts | 2 +- hooks/useImageColors.ts | 6 +- hooks/useIntroSkipper.ts | 2 +- hooks/useMarkAsPlayed.ts | 2 +- hooks/useOrientation.ts | 9 +- hooks/useOrientationSettings.ts | 5 +- hooks/useRemuxHlsToMp4.ts | 27 +- packages/expo-haptics.native.ts | 0 packages/expo-haptics.ts | 1 + packages/expo-screen-orientation.native.ts | 68 +++++ packages/expo-screen-orientation.ts | 1 + providers/DownloadProvider.tsx | 29 +- utils/OrientationLockConverter.ts | 5 +- utils/atoms/orientation.ts | 2 +- utils/atoms/settings.ts | 2 +- utils/background-tasks.ts | 5 +- 59 files changed, 474 insertions(+), 303 deletions(-) create mode 100644 components/ContextMenu.native.ts create mode 100644 components/ContextMenu.ts create mode 100644 components/DropdownMenu.native.ts create mode 100644 components/DropdownMenu.ts create mode 100644 packages/expo-haptics.native.ts create mode 100644 packages/expo-haptics.ts create mode 100644 packages/expo-screen-orientation.native.ts create mode 100644 packages/expo-screen-orientation.ts diff --git a/app/(auth)/(tabs)/(home)/_layout.tsx b/app/(auth)/(tabs)/(home)/_layout.tsx index 3509be51..5d5054b0 100644 --- a/app/(auth)/(tabs)/(home)/_layout.tsx +++ b/app/(auth)/(tabs)/(home)/_layout.tsx @@ -23,7 +23,7 @@ export default function IndexLayout() { headerShadowVisible: false, headerRight: () => ( - + {!Platform.isTV && } { router.push("/(auth)/settings"); diff --git a/app/(auth)/(tabs)/(home)/index.tsx b/app/(auth)/(tabs)/(home)/index.tsx index 0f777a45..98c1603d 100644 --- a/app/(auth)/(tabs)/(home)/index.tsx +++ b/app/(auth)/(tabs)/(home)/index.tsx @@ -27,6 +27,7 @@ import { QueryFunction, useQuery, useQueryClient } from "@tanstack/react-query"; import { useNavigation, useRouter } from "expo-router"; import { useAtomValue } from "jotai"; import { useCallback, useEffect, useMemo, useState } from "react"; +import { Platform } from "react-native"; import { ActivityIndicator, RefreshControl, @@ -64,30 +65,33 @@ export default function index() { const [isConnected, setIsConnected] = useState(null); const [loadingRetry, setLoadingRetry] = useState(false); - const { downloadedFiles, cleanCacheDirectory } = useDownload(); const navigation = useNavigation(); const insets = useSafeAreaInsets(); - useEffect(() => { - const hasDownloads = downloadedFiles && downloadedFiles.length > 0; - navigation.setOptions({ - headerLeft: () => ( - { - router.push("/(auth)/downloads"); - }} - className="p-2" - > - - - ), - }); - }, [downloadedFiles, navigation, router]); + if (!Platform.isTV) { + const { downloadedFiles, cleanCacheDirectory } = useDownload(); + + useEffect(() => { + const hasDownloads = downloadedFiles && downloadedFiles.length > 0; + navigation.setOptions({ + headerLeft: () => ( + { + router.push("/(auth)/downloads"); + }} + className="p-2" + > + + + ), + }); + }, [downloadedFiles, navigation, router]); + } const checkConnection = useCallback(async () => { setLoadingRetry(true); @@ -107,9 +111,11 @@ export default function index() { setIsConnected(state.isConnected); }); - cleanCacheDirectory().catch((e) => - console.error("Something went wrong cleaning cache directory") - ); + if (!Platform.isTV) { + cleanCacheDirectory().catch((e) => + console.error("Something went wrong cleaning cache directory") + ); + } return () => { unsubscribe(); }; diff --git a/app/(auth)/(tabs)/(home)/settings.tsx b/app/(auth)/(tabs)/(home)/settings.tsx index 8f6d102a..4c14f754 100644 --- a/app/(auth)/(tabs)/(home)/settings.tsx +++ b/app/(auth)/(tabs)/(home)/settings.tsx @@ -1,3 +1,4 @@ +import { Platform } from "react-native"; import { Text } from "@/components/common/Text"; import { ListGroup } from "@/components/list/ListGroup"; import { ListItem } from "@/components/list/ListItem"; @@ -13,7 +14,8 @@ import { SubtitleToggles } from "@/components/settings/SubtitleToggles"; import { UserInfo } from "@/components/settings/UserInfo"; import { useJellyfin } from "@/providers/JellyfinProvider"; import { clearLogs } from "@/utils/log"; -import * as Haptics from "expo-haptics"; +// const Haptics = !Platform.isTV ? require("expo-haptics") : null; +import * as Haptics from "@/packages/expo-haptics"; import { useNavigation, useRouter } from "expo-router"; import { useEffect } from "react"; import { ScrollView, TouchableOpacity, View } from "react-native"; @@ -26,7 +28,9 @@ export default function settings() { const onClearLogsClicked = async () => { clearLogs(); - Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success); + if (!Platform.isTV) { + Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success); + } }; const navigation = useNavigation(); diff --git a/app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx b/app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx index 565f84c8..de7d10e7 100644 --- a/app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx +++ b/app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx @@ -12,7 +12,7 @@ import { useQuery } from "@tanstack/react-query"; import { router, useLocalSearchParams, useNavigation } from "expo-router"; import { useAtom } from "jotai"; import { useEffect, useState } from "react"; -import { ScrollView, TouchableOpacity, View } from "react-native"; +import { Platform, ScrollView, TouchableOpacity, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; export default function page() { @@ -28,15 +28,17 @@ export default function page() { const navigation = useNavigation(); - useEffect(() => { - navigation.setOptions({ - headerRight: () => ( - - - - ), + if (!Platform.isTV) { + useEffect(() => { + navigation.setOptions({ + headerRight: () => ( + + + + ), + }); }); - }); + } const { data: album } = useQuery({ queryKey: ["album", albumId, artistId], diff --git a/app/(auth)/(tabs)/(home,libraries,search,favorites)/collections/[collectionId].tsx b/app/(auth)/(tabs)/(home,libraries,search,favorites)/collections/[collectionId].tsx index 4c2b72ae..6a840acb 100644 --- a/app/(auth)/(tabs)/(home,libraries,search,favorites)/collections/[collectionId].tsx +++ b/app/(auth)/(tabs)/(home,libraries,search,favorites)/collections/[collectionId].tsx @@ -29,7 +29,7 @@ import { import { FlashList } from "@shopify/flash-list"; import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; import { useLocalSearchParams, useNavigation } from "expo-router"; -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import { useAtom } from "jotai"; import React, { useCallback, useEffect, useMemo, useState } from "react"; import { FlatList, View } from "react-native"; diff --git a/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/page.tsx b/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/page.tsx index b839708d..d6aae61a 100644 --- a/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/page.tsx +++ b/app/(auth)/(tabs)/(home,libraries,search,favorites)/jellyseerr/page.tsx @@ -34,7 +34,7 @@ import { IssueType, IssueTypeName, } from "@/utils/jellyseerr/server/constants/issue"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { TvDetails } from "@/utils/jellyseerr/server/models/Tv"; import JellyseerrSeasons from "@/components/series/JellyseerrSeasons"; import { JellyserrRatings } from "@/components/Ratings"; diff --git a/app/(auth)/(tabs)/(libraries)/[libraryId].tsx b/app/(auth)/(tabs)/(libraries)/[libraryId].tsx index 7c0dbc91..5252f612 100644 --- a/app/(auth)/(tabs)/(libraries)/[libraryId].tsx +++ b/app/(auth)/(tabs)/(libraries)/[libraryId].tsx @@ -1,6 +1,6 @@ import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; import { useLocalSearchParams, useNavigation } from "expo-router"; -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import { useAtom } from "jotai"; import React, { useCallback, useEffect, useMemo } from "react"; import { FlatList, useWindowDimensions, View } from "react-native"; diff --git a/app/(auth)/(tabs)/(libraries)/_layout.tsx b/app/(auth)/(tabs)/(libraries)/_layout.tsx index 17813ed1..542d8af3 100644 --- a/app/(auth)/(tabs)/(libraries)/_layout.tsx +++ b/app/(auth)/(tabs)/(libraries)/_layout.tsx @@ -3,7 +3,7 @@ import { useSettings } from "@/utils/atoms/settings"; import { Ionicons } from "@expo/vector-icons"; import { Stack } from "expo-router"; import { Platform } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; export default function IndexLayout() { const [settings, updateSettings] = useSettings(); diff --git a/app/(auth)/player/direct-player.tsx b/app/(auth)/player/direct-player.tsx index 4d924938..fa27fac0 100644 --- a/app/(auth)/player/direct-player.tsx +++ b/app/(auth)/player/direct-player.tsx @@ -27,7 +27,7 @@ import { getUserLibraryApi, } from "@jellyfin/sdk/lib/utils/api"; import { useQuery } from "@tanstack/react-query"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import { useFocusEffect, useGlobalSearchParams } from "expo-router"; import { useAtomValue } from "jotai"; import React, { diff --git a/app/(auth)/player/music-player.tsx b/app/(auth)/player/music-player.tsx index eca16b4c..5419cafd 100644 --- a/app/(auth)/player/music-player.tsx +++ b/app/(auth)/player/music-player.tsx @@ -17,7 +17,7 @@ import { getUserLibraryApi, } from "@jellyfin/sdk/lib/utils/api"; import { useQuery } from "@tanstack/react-query"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import { Image } from "expo-image"; import { useFocusEffect, useLocalSearchParams } from "expo-router"; import { useAtomValue } from "jotai"; diff --git a/app/(auth)/player/transcoding-player.tsx b/app/(auth)/player/transcoding-player.tsx index bcb9a6e4..06b78722 100644 --- a/app/(auth)/player/transcoding-player.tsx +++ b/app/(auth)/player/transcoding-player.tsx @@ -20,7 +20,7 @@ import { getUserLibraryApi, } from "@jellyfin/sdk/lib/utils/api"; import { useQuery } from "@tanstack/react-query"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import { useFocusEffect, useLocalSearchParams } from "expo-router"; import { useAtomValue } from "jotai"; import React, { diff --git a/app/_layout.tsx b/app/_layout.tsx index 23512523..57b0e1e0 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -1,4 +1,5 @@ import "@/augmentations"; +import { Platform } from "react-native"; import { Text } from "@/components/common/Text"; import { DownloadProvider } from "@/providers/DownloadProvider"; import { @@ -18,23 +19,28 @@ import { cancelJobById, getAllJobsByDeviceId } from "@/utils/optimize-server"; import { ActionSheetProvider } from "@expo/react-native-action-sheet"; import { BottomSheetModalProvider } from "@gorhom/bottom-sheet"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client"; -import { - checkForExistingDownloads, - completeHandler, - download, -} from "@kesha-antonov/react-native-background-downloader"; +// import { +// checkForExistingDownloads, +// completeHandler, +// download, +// } from "@kesha-antonov/react-native-background-downloader"; +const BackGroundDownloader = !Platform.isTV + ? require("@kesha-antonov/react-native-background-downloader") + : null; import { DarkTheme, ThemeProvider } from "@react-navigation/native"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import * as BackgroundFetch from "expo-background-fetch"; +const BackgroundFetch = !Platform.isTV + ? require("expo-background-fetch") + : null; import * as FileSystem from "expo-file-system"; import { useFonts } from "expo-font"; import { useKeepAwake } from "expo-keep-awake"; import * as Linking from "expo-linking"; -import * as Notifications from "expo-notifications"; +const Notifications = !Platform.isTV ? require("expo-notifications") : null; import { router, Stack } from "expo-router"; -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import * as SplashScreen from "expo-splash-screen"; -import * as TaskManager from "expo-task-manager"; +const TaskManager = !Platform.isTV ? require("expo-task-manager") : null; import { Provider as JotaiProvider, useAtom } from "jotai"; import { useEffect, useRef } from "react"; import { Appearance, AppState, TouchableOpacity } from "react-native"; @@ -45,15 +51,19 @@ import { Toaster } from "sonner-native"; SplashScreen.preventAutoHideAsync(); -Notifications.setNotificationHandler({ - handleNotification: async () => ({ - shouldShowAlert: true, - shouldPlaySound: true, - shouldSetBadge: false, - }), -}); +if (!Platform.isTV) { + Notifications.setNotificationHandler({ + handleNotification: async () => ({ + shouldShowAlert: true, + shouldPlaySound: true, + shouldSetBadge: false, + }), + }); +} function useNotificationObserver() { + if (Platform.isTV) return; + useEffect(() => { let isMounted = true; @@ -84,99 +94,101 @@ function useNotificationObserver() { }, []); } -TaskManager.defineTask(BACKGROUND_FETCH_TASK, async () => { - console.log("TaskManager ~ trigger"); +if (!Platform.isTV) { + TaskManager.defineTask(BACKGROUND_FETCH_TASK, async () => { + console.log("TaskManager ~ trigger"); - const now = Date.now(); + const now = Date.now(); - const settingsData = storage.getString("settings"); + const settingsData = storage.getString("settings"); - if (!settingsData) return BackgroundFetch.BackgroundFetchResult.NoData; + if (!settingsData) return BackgroundFetch.BackgroundFetchResult.NoData; - const settings: Partial = JSON.parse(settingsData); - const url = settings?.optimizedVersionsServerUrl; + const settings: Partial = JSON.parse(settingsData); + const url = settings?.optimizedVersionsServerUrl; - if (!settings?.autoDownload || !url) - return BackgroundFetch.BackgroundFetchResult.NoData; + if (!settings?.autoDownload || !url) + return BackgroundFetch.BackgroundFetchResult.NoData; - const token = getTokenFromStorage(); - const deviceId = getOrSetDeviceId(); - const baseDirectory = FileSystem.documentDirectory; + const token = getTokenFromStorage(); + const deviceId = getOrSetDeviceId(); + const baseDirectory = FileSystem.documentDirectory; - if (!token || !deviceId || !baseDirectory) - return BackgroundFetch.BackgroundFetchResult.NoData; + if (!token || !deviceId || !baseDirectory) + return BackgroundFetch.BackgroundFetchResult.NoData; - const jobs = await getAllJobsByDeviceId({ - deviceId, - authHeader: token, - url, - }); + const jobs = await getAllJobsByDeviceId({ + deviceId, + authHeader: token, + url, + }); - console.log("TaskManager ~ Active jobs: ", jobs.length); + console.log("TaskManager ~ Active jobs: ", jobs.length); - for (let job of jobs) { - if (job.status === "completed") { - const downloadUrl = url + "download/" + job.id; - const tasks = await checkForExistingDownloads(); + for (let job of jobs) { + if (job.status === "completed") { + const downloadUrl = url + "download/" + job.id; + const tasks = await BackGroundDownloader.checkForExistingDownloads(); - if (tasks.find((task) => task.id === job.id)) { - console.log("TaskManager ~ Download already in progress: ", job.id); - continue; + if (tasks.find((task) => task.id === job.id)) { + console.log("TaskManager ~ Download already in progress: ", job.id); + continue; + } + + BackGroundDownloader.download({ + id: job.id, + url: downloadUrl, + destination: `${baseDirectory}${job.item.Id}.mp4`, + headers: { + Authorization: token, + }, + }) + .begin(() => { + console.log("TaskManager ~ Download started: ", job.id); + }) + .done(() => { + console.log("TaskManager ~ Download completed: ", job.id); + saveDownloadedItemInfo(job.item); + BackGroundDownloader.completeHandler(job.id); + cancelJobById({ + authHeader: token, + id: job.id, + url: url, + }); + Notifications.scheduleNotificationAsync({ + content: { + title: job.item.Name, + body: "Download completed", + data: { + url: `/downloads`, + }, + }, + trigger: null, + }); + }) + .error((error) => { + console.log("TaskManager ~ Download error: ", job.id, error); + completeHandler(job.id); + Notifications.scheduleNotificationAsync({ + content: { + title: job.item.Name, + body: "Download failed", + data: { + url: `/downloads`, + }, + }, + trigger: null, + }); + }); } - - download({ - id: job.id, - url: downloadUrl, - destination: `${baseDirectory}${job.item.Id}.mp4`, - headers: { - Authorization: token, - }, - }) - .begin(() => { - console.log("TaskManager ~ Download started: ", job.id); - }) - .done(() => { - console.log("TaskManager ~ Download completed: ", job.id); - saveDownloadedItemInfo(job.item); - completeHandler(job.id); - cancelJobById({ - authHeader: token, - id: job.id, - url: url, - }); - Notifications.scheduleNotificationAsync({ - content: { - title: job.item.Name, - body: "Download completed", - data: { - url: `/downloads`, - }, - }, - trigger: null, - }); - }) - .error((error) => { - console.log("TaskManager ~ Download error: ", job.id, error); - completeHandler(job.id); - Notifications.scheduleNotificationAsync({ - content: { - title: job.item.Name, - body: "Download failed", - data: { - url: `/downloads`, - }, - }, - trigger: null, - }); - }); } - } - console.log(`Auto download started: ${new Date(now).toISOString()}`); + console.log(`Auto download started: ${new Date(now).toISOString()}`); - // Be sure to return the successful result type! - return BackgroundFetch.BackgroundFetchResult.NewData; -}); + // Be sure to return the successful result type! + return BackgroundFetch.BackgroundFetchResult.NewData; + }); +} const checkAndRequestPermissions = async () => { try { @@ -250,55 +262,61 @@ function Layout() { const [orientation, setOrientation] = useAtom(orientationAtom); useKeepAwake(); - useNotificationObserver(); - - useEffect(() => { - checkAndRequestPermissions(); - }, []); - - useEffect(() => { - if (settings?.autoRotate === true) - ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.DEFAULT); - else - ScreenOrientation.lockAsync( - ScreenOrientation.OrientationLock.PORTRAIT_UP - ); - }, [settings]); const appState = useRef(AppState.currentState); - useEffect(() => { - const subscription = AppState.addEventListener("change", (nextAppState) => { - if ( - appState.current.match(/inactive|background/) && - nextAppState === "active" - ) { - checkForExistingDownloads(); - } - }); + if (!Platform.isTV) { + useNotificationObserver(); - checkForExistingDownloads(); + useEffect(() => { + checkAndRequestPermissions(); + }, []); - return () => { - subscription.remove(); - }; - }, []); + useEffect(() => { + if (settings?.autoRotate === true) + ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.DEFAULT); + else + ScreenOrientation.lockAsync( + ScreenOrientation.OrientationLock.PORTRAIT_UP + ); + }, [settings]); - useEffect(() => { - const subscription = ScreenOrientation.addOrientationChangeListener( - (event) => { - setOrientation(event.orientationInfo.orientation); - } - ); + useEffect(() => { + const subscription = AppState.addEventListener( + "change", + (nextAppState) => { + if ( + appState.current.match(/inactive|background/) && + nextAppState === "active" + ) { + BackGroundDownloader.checkForExistingDownloads(); + } + } + ); - ScreenOrientation.getOrientationAsync().then((initialOrientation) => { - setOrientation(initialOrientation); - }); + BackGroundDownloader.checkForExistingDownloads(); - return () => { - ScreenOrientation.removeOrientationChangeListener(subscription); - }; - }, []); + return () => { + subscription.remove(); + }; + }, []); + + useEffect(() => { + const subscription = ScreenOrientation.addOrientationChangeListener( + (event) => { + setOrientation(event.orientationInfo.orientation); + } + ); + + ScreenOrientation.getOrientationAsync().then((initialOrientation) => { + setOrientation(initialOrientation); + }); + + return () => { + ScreenOrientation.removeOrientationChangeListener(subscription); + }; + }, []); + } const url = Linking.useURL(); diff --git a/bun.lockb b/bun.lockb index 902c36ca2d70d6d6403a72b52bc4bdf3cefaf46d..ec0c8c95373d277e90414750a445d69fc4af61ad 100755 GIT binary patch delta 5173 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 I|6u-q0J42L`v3p{ delta 5247 zcmeI0d2m(b8OG0dZoZQo1PsuWKmsKV2_TYmnd z*aGALFP2@QMQRm_cx*>H+)h6jFsgZ|=Dgr_=t`KfNDnX6UGrx?At2$92l=g~J9bPDuE{N?B*}sX{4l%Y!D32jl z<}OkAcMZM+{Kqz5RN%?UE>M)>C7${2(o*G!$6tSer*Od1?1KE_+{Hy)Z@#;zY)Q7F zoGBJcDC+M=eZ;Ej%EE%Ayi!FeC=p5+GBzQD2eJaOGolBP2NZ$G11ZPAICg^P0S4Rg z0k{qyTPBnU#0W$#cL|X@EG=77=E)zZ%q#a#AiHSUfSl~HrS8B8=cr2S%!J*+@d|$j z z)=~9bC6rDmyb`hZ@vz><`yD?&E<+9d&4q(2KPlh%tH%$|KJ<>fb#YC?L@QyU2AREu8XgBvbv#L~P^` z^Sef;Jc?ADdD89FzeZ{}>SMb3hMtPEH3UwWt{g+JfJ^rGn`x-8d#Gg*Mso|))mp>1 z%+TX;+EU>ZQ+$vb0+RsaFui$(B)DYrwhD7m@_LwDimX2D|hFyDP}JbRSPGxRUu(%}@-i%oq3hk6hk z4hdW#9IqNm&NcK`;dl*1tGfcni+~kfYKX3MzfcU7Q*ng-qmw6*^lylM7s=M51q2Q!|DLLGVCrCiB4J;$leT}f$W z=A@!&_Va-{2gE?urEvC_-Md+4E+=w@1Sb>&Khd`DoV@2Vc3s<{&|$1Bb-)c zxp>lDrQ(0@bNsvUk0bl5cD#-l1b@r+w-E*W9h={^`8RgFkLW=Dw{|{XB!l6D5t+9` zpn{(vyGi={Ba`~Bd`Aj=Mh7+7I+m2aw21n-e5Cwg4QFQIc z?Jk1ln9mro!1l$6ec%aET0L~NCd69bERv#rJYZOr9}n37_kh*mfZ>oi4wqATm1B(P zL%u4<49cx?bfB1OfPPd`4G>-paE?KLit+-SW>Dh=7(h)7D!l+Hs{!K4yBeVHYJg@2 ziIlho;5>uvYXAn)Ck*P>0E}1*kV0G60;H}5xXZvGR}H{b28U_@o}xPpcGdt)s|9e< zfm(o3wE(gXAe|=F0o-G7g27M{^#F(K0NnKeE;_~_qaGk^9l+C+y$&E`9l%=*Mo_2q z0BP`0Kzu_oMSMCqBa7YW>B*cU>r3usN4vUvI$@Uc{c&{ z-2~9gU=k%Z0GwyAy#ZhfeZru=0bs;tfN8XKGeGKQfV&K4kZTLTRR)K)0L-L240dh- zn6?#Q79H3MFlsA+Yy_A?lNtf;F*w0sE(sIha3g@*1jwdi3^GiBux$YIDSI10$Tont z7`Um^c7Qh+ly3)EL_P+&+W}&B04%1G9RT4w0M0SUrziqA&7g(=3aN=fB>|-D1n`h| zCqUnw0L=_a==ZAt&NJwNQ)neT?#i>DmZS&_ZVL^k<+ZjO}0xt_Y@SxSv>h!?z zFO|7$eJrQ+ZyX-Bb@wI&S@$N$$k=qgHSi_>0j{@vuZV$a!T2YT!I$4ysNQC(&G<6B zktS8hEf32lS;29yic>3Fo@n-=Di)F2-?I`Gqm3I#!$mEI_C z$fyjY`Cgm~Jq4vfPG~Un7!+)c-YGYziF{j}291NpLnEMJPhVA zzX5(K;yxU`WJG?09SDtrTsGsF0zVlViS9PRPeOVO^ei+Q;_@S*K@gY!1)_Pl2vTM}@B*#Hx8KGUg!71aBo(OTw zf#yN8piC$Ong+F5zTJal2lI- zZ9$9-eBM!JZ8^68kC#2%GU^Y+Au6Jeo3(Ite-Yhl)~X`|Uz!|K$B*-F2;OU##JlLV zBHH#j+C1W+)1PY#)icGEa0N9BO6b`u+WV1#Pe2_feMWb8zgpco#zah6i7lh#tJ>Je zz{jDfSN2WI{@vl5D1kA=;SFsPg;K@E5r#v4`jo4cZW^@`TgTTAl# z4J12fM$^QEKO77n{wQaE1@*k9g+~Uy7`@|eSYP{Iy!oia@d}!J?FVb09N34O*R=;<=x(|bbtq+4j?jNMn j?%*C2+A}1GhK&vmwk{kAnHxqQycF`CHRV*uh3WqWG$}~0 diff --git a/components/AudioTrackSelector.tsx b/components/AudioTrackSelector.tsx index 75fd659c..11a895fc 100644 --- a/components/AudioTrackSelector.tsx +++ b/components/AudioTrackSelector.tsx @@ -1,7 +1,7 @@ import { MediaSourceInfo } from "@jellyfin/sdk/lib/generated-client/models"; import { useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "./common/Text"; interface Props extends React.ComponentProps { diff --git a/components/BitrateSelector.tsx b/components/BitrateSelector.tsx index 0f1bd28b..cb284f4b 100644 --- a/components/BitrateSelector.tsx +++ b/components/BitrateSelector.tsx @@ -1,5 +1,5 @@ import { TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "./common/Text"; import { useMemo } from "react"; diff --git a/components/Button.tsx b/components/Button.tsx index fb685f4c..a1005e49 100644 --- a/components/Button.tsx +++ b/components/Button.tsx @@ -1,4 +1,4 @@ -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import React, { PropsWithChildren, ReactNode, useMemo } from "react"; import { Text, TouchableOpacity, View } from "react-native"; import { Loader } from "./Loader"; diff --git a/components/ContextMenu.native.ts b/components/ContextMenu.native.ts new file mode 100644 index 00000000..e69de29b diff --git a/components/ContextMenu.ts b/components/ContextMenu.ts new file mode 100644 index 00000000..4be160e5 --- /dev/null +++ b/components/ContextMenu.ts @@ -0,0 +1 @@ +export * as ContextMenu from "zeego/context-menu"; diff --git a/components/DropdownMenu.native.ts b/components/DropdownMenu.native.ts new file mode 100644 index 00000000..e69de29b diff --git a/components/DropdownMenu.ts b/components/DropdownMenu.ts new file mode 100644 index 00000000..c457d736 --- /dev/null +++ b/components/DropdownMenu.ts @@ -0,0 +1 @@ +export * as DropdownMenu from "zeego/dropdown-menu"; diff --git a/components/ItemContent.tsx b/components/ItemContent.tsx index 402f3171..f1f3bcde 100644 --- a/components/ItemContent.tsx +++ b/components/ItemContent.tsx @@ -24,10 +24,10 @@ import { } from "@jellyfin/sdk/lib/generated-client/models"; import { Image } from "expo-image"; import { useNavigation } from "expo-router"; -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import { useAtom } from "jotai"; import React, { useEffect, useMemo, useState } from "react"; -import { View } from "react-native"; +import { Platform, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import { Chromecast } from "./Chromecast"; import { ItemHeader } from "./ItemHeader"; @@ -81,23 +81,25 @@ export const ItemContent: React.FC<{ item: BaseItemDto }> = React.memo( defaultMediaSource, ]); - useEffect(() => { - navigation.setOptions({ - headerRight: () => - item && ( - - - {item.Type !== "Program" && ( - - - - - - )} - - ), - }); - }, [item]); + if (!Platform.isTV) { + useEffect(() => { + navigation.setOptions({ + headerRight: () => + item && ( + + + {item.Type !== "Program" && ( + + + + + + )} + + ), + }); + }, [item]); + } useEffect(() => { if (orientation !== ScreenOrientation.OrientationLock.PORTRAIT_UP) diff --git a/components/MediaSourceSelector.tsx b/components/MediaSourceSelector.tsx index 34f02fd9..4b55a352 100644 --- a/components/MediaSourceSelector.tsx +++ b/components/MediaSourceSelector.tsx @@ -5,7 +5,7 @@ import { } from "@jellyfin/sdk/lib/generated-client/models"; import { useEffect, useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "./common/Text"; import { convertBitsToMegabitsOrGigabits } from "@/utils/bToMb"; diff --git a/components/PlayButton.tsx b/components/PlayButton.tsx index e5c5dd87..27a9021e 100644 --- a/components/PlayButton.tsx +++ b/components/PlayButton.tsx @@ -32,7 +32,7 @@ import Animated, { import { Button } from "./Button"; import { SelectedOptions } from "./ItemContent"; import { chromecastProfile } from "@/utils/profiles/chromecast"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; interface Props extends React.ComponentProps { item: BaseItemDto; diff --git a/components/RoundButton.tsx b/components/RoundButton.tsx index 049c5ed0..e16613a1 100644 --- a/components/RoundButton.tsx +++ b/components/RoundButton.tsx @@ -6,7 +6,7 @@ import { TouchableOpacity, TouchableOpacityProps, } from "react-native"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; interface Props extends TouchableOpacityProps { onPress?: () => void; diff --git a/components/SubtitleTrackSelector.tsx b/components/SubtitleTrackSelector.tsx index 087363a3..8e05532b 100644 --- a/components/SubtitleTrackSelector.tsx +++ b/components/SubtitleTrackSelector.tsx @@ -2,7 +2,7 @@ import { tc } from "@/utils/textTools"; import { MediaSourceInfo } from "@jellyfin/sdk/lib/generated-client/models"; import { useMemo } from "react"; import { Platform, TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "./common/Text"; import { SubtitleHelper } from "@/utils/SubtitleHelper"; diff --git a/components/common/JellyseerrItemRouter.tsx b/components/common/JellyseerrItemRouter.tsx index 90f9c336..198d5a45 100644 --- a/components/common/JellyseerrItemRouter.tsx +++ b/components/common/JellyseerrItemRouter.tsx @@ -1,11 +1,14 @@ -import {useRouter, useSegments} from "expo-router"; -import React, {PropsWithChildren, useCallback, useMemo} from "react"; -import {TouchableOpacity, TouchableOpacityProps} from "react-native"; -import * as ContextMenu from "zeego/context-menu"; -import {MovieResult, TvResult} from "@/utils/jellyseerr/server/models/Search"; -import {useJellyseerr} from "@/hooks/useJellyseerr"; -import {hasPermission, Permission} from "@/utils/jellyseerr/server/lib/permissions"; -import {MediaType} from "@/utils/jellyseerr/server/constants/media"; +import { useRouter, useSegments } from "expo-router"; +import React, { PropsWithChildren, useCallback, useMemo } from "react"; +import { TouchableOpacity, TouchableOpacityProps } from "react-native"; +import * as ContextMenu from "@/components/ContextMenu"; +import { MovieResult, TvResult } from "@/utils/jellyseerr/server/models/Search"; +import { useJellyseerr } from "@/hooks/useJellyseerr"; +import { + hasPermission, + Permission, +} from "@/utils/jellyseerr/server/lib/permissions"; +import { MediaType } from "@/utils/jellyseerr/server/constants/media"; interface Props extends TouchableOpacityProps { result: MovieResult | TvResult; @@ -26,26 +29,27 @@ export const TouchableJellyseerrRouter: React.FC> = ({ }) => { const router = useRouter(); const segments = useSegments(); - const {jellyseerrApi, jellyseerrUser, requestMedia} = useJellyseerr() + const { jellyseerrApi, jellyseerrUser, requestMedia } = useJellyseerr(); const from = segments[2]; const autoApprove = useMemo(() => { - return jellyseerrUser && hasPermission( - Permission.AUTO_APPROVE, - jellyseerrUser.permissions, - {type: 'or'} - ) - }, [jellyseerrApi, jellyseerrUser]) + return ( + jellyseerrUser && + hasPermission(Permission.AUTO_APPROVE, jellyseerrUser.permissions, { + type: "or", + }) + ); + }, [jellyseerrApi, jellyseerrUser]); - const request = useCallback(() => + const request = useCallback( + () => requestMedia(mediaTitle, { mediaId: result.id, - mediaType: result.mediaType - } - ), + mediaType: result.mediaType, + }), [jellyseerrApi, result] - ) + ); if (from === "(home)" || from === "(search)" || from === "(libraries)") return ( @@ -55,7 +59,16 @@ export const TouchableJellyseerrRouter: React.FC> = ({ { // @ts-ignore - router.push({pathname: `/(auth)/(tabs)/${from}/jellyseerr/page`, params: {...result, mediaTitle, releaseYear, canRequest, posterSrc}}); + router.push({ + pathname: `/(auth)/(tabs)/${from}/jellyseerr/page`, + params: { + ...result, + mediaTitle, + releaseYear, + canRequest, + posterSrc, + }, + }); }} {...props} > @@ -71,31 +84,33 @@ export const TouchableJellyseerrRouter: React.FC> = ({ > Actions {canRequest && result.mediaType === MediaType.MOVIE && ( - { - if (autoApprove) { - request() - } + { + if (autoApprove) { + request(); + } + }} + shouldDismissMenuOnSelect + > + + Request + + - Request - - - )} + androidIconName="download" + /> + + )} diff --git a/components/common/TouchableItemRouter.tsx b/components/common/TouchableItemRouter.tsx index c13e9821..b1b886bd 100644 --- a/components/common/TouchableItemRouter.tsx +++ b/components/common/TouchableItemRouter.tsx @@ -6,7 +6,7 @@ import { import { useRouter, useSegments } from "expo-router"; import { PropsWithChildren } from "react"; import { TouchableOpacity, TouchableOpacityProps } from "react-native"; -import * as ContextMenu from "zeego/context-menu"; +import * as ContextMenu from "@/components/ContextMenu"; interface Props extends TouchableOpacityProps { item: BaseItemDto; diff --git a/components/downloads/ActiveDownloads.tsx b/components/downloads/ActiveDownloads.tsx index 556ae8c7..14b7de15 100644 --- a/components/downloads/ActiveDownloads.tsx +++ b/components/downloads/ActiveDownloads.tsx @@ -5,13 +5,18 @@ import { useSettings } from "@/utils/atoms/settings"; import { JobStatus } from "@/utils/optimize-server"; import { formatTimeString } from "@/utils/time"; import { Ionicons } from "@expo/vector-icons"; -import { checkForExistingDownloads } from "@kesha-antonov/react-native-background-downloader"; +// import { checkForExistingDownloads } from "@kesha-antonov/react-native-background-downloader"; +const BackGroundDownloader = !Platform.isTV + ? require("@kesha-antonov/react-native-background-downloader") + : null; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useRouter } from "expo-router"; -import { FFmpegKit } from "ffmpeg-kit-react-native"; +// import { FFmpegKit } from "ffmpeg-kit-react-native"; +const FFmpegKit = !Platform.isTV ? require("ffmpeg-kit-react-native") : null; import { useAtom } from "jotai"; import { ActivityIndicator, + Platform, TouchableOpacity, TouchableOpacityProps, View, @@ -64,7 +69,7 @@ const DownloadCard = ({ process, ...props }: DownloadCardProps) => { if (settings?.downloadMethod === "optimized") { try { - const tasks = await checkForExistingDownloads(); + const tasks = await BackGroundDownloader.checkForExistingDownloads(); for (const task of tasks) { if (task.id === id) { task.stop(); diff --git a/components/downloads/EpisodeCard.tsx b/components/downloads/EpisodeCard.tsx index e8387da5..14b0eefa 100644 --- a/components/downloads/EpisodeCard.tsx +++ b/components/downloads/EpisodeCard.tsx @@ -1,5 +1,5 @@ import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import React, { useCallback, useMemo } from "react"; import { TouchableOpacity, TouchableOpacityProps, View } from "react-native"; import { diff --git a/components/downloads/MovieCard.tsx b/components/downloads/MovieCard.tsx index 3073bd0a..28af9cb1 100644 --- a/components/downloads/MovieCard.tsx +++ b/components/downloads/MovieCard.tsx @@ -3,7 +3,7 @@ import { useActionSheet, } from "@expo/react-native-action-sheet"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import React, { useCallback, useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; diff --git a/components/home/LargeMovieCarousel.tsx b/components/home/LargeMovieCarousel.tsx index a22c586f..7d310c9b 100644 --- a/components/home/LargeMovieCarousel.tsx +++ b/components/home/LargeMovieCarousel.tsx @@ -22,7 +22,7 @@ import { itemRouter, TouchableItemRouter } from "../common/TouchableItemRouter"; import { Loader } from "../Loader"; import { Gesture, GestureDetector } from "react-native-gesture-handler"; import { useRouter, useSegments } from "expo-router"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; interface Props extends ViewProps {} diff --git a/components/series/SeasonDropdown.tsx b/components/series/SeasonDropdown.tsx index 5c333f2e..dbdbe679 100644 --- a/components/series/SeasonDropdown.tsx +++ b/components/series/SeasonDropdown.tsx @@ -1,7 +1,7 @@ import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { useEffect, useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "../common/Text"; type Props = { diff --git a/components/settings/AudioToggles.tsx b/components/settings/AudioToggles.tsx index 62aea437..8a185c77 100644 --- a/components/settings/AudioToggles.tsx +++ b/components/settings/AudioToggles.tsx @@ -1,5 +1,5 @@ import { TouchableOpacity, View, ViewProps } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "../common/Text"; import { useMedia } from "./MediaContext"; import { Switch } from "react-native-gesture-handler"; diff --git a/components/settings/DownloadSettings.tsx b/components/settings/DownloadSettings.tsx index f330dc04..fd87c098 100644 --- a/components/settings/DownloadSettings.tsx +++ b/components/settings/DownloadSettings.tsx @@ -6,7 +6,7 @@ import { useQueryClient } from "@tanstack/react-query"; import { useRouter } from "expo-router"; import React from "react"; import { Switch, TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; diff --git a/components/settings/OtherSettings.tsx b/components/settings/OtherSettings.tsx index d280a167..5e750e40 100644 --- a/components/settings/OtherSettings.tsx +++ b/components/settings/OtherSettings.tsx @@ -1,3 +1,4 @@ +import { Platform } from "react-native"; import { ScreenOrientationEnum, useSettings } from "@/utils/atoms/settings"; import { BACKGROUND_FETCH_TASK, @@ -5,13 +6,15 @@ import { unregisterBackgroundFetchAsync, } from "@/utils/background-tasks"; import { Ionicons } from "@expo/vector-icons"; -import * as BackgroundFetch from "expo-background-fetch"; -import * as ScreenOrientation from "expo-screen-orientation"; -import * as TaskManager from "expo-task-manager"; +const BackgroundFetch = !Platform.isTV + ? require("expo-background-fetch") + : null; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; +const TaskManager = !Platform.isTV ? require("expo-task-manager") : null; import React, { useEffect } from "react"; import { Linking, Switch, TouchableOpacity, ViewProps } from "react-native"; import { toast } from "sonner-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; @@ -25,6 +28,8 @@ export const OtherSettings: React.FC = () => { * Background task *******************/ const checkStatusAsync = async () => { + if (Platform.isTV) return; + await BackgroundFetch.getStatusAsync(); return await TaskManager.isTaskRegisteredAsync(BACKGROUND_FETCH_TASK); }; diff --git a/components/settings/QuickConnect.tsx b/components/settings/QuickConnect.tsx index 9efbec43..78fe7d61 100644 --- a/components/settings/QuickConnect.tsx +++ b/components/settings/QuickConnect.tsx @@ -7,7 +7,7 @@ import { BottomSheetView, } from "@gorhom/bottom-sheet"; import { getQuickConnectApi } from "@jellyfin/sdk/lib/utils/api"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import { useAtom } from "jotai"; import React, { useCallback, useRef, useState } from "react"; import { Alert, View, ViewProps } from "react-native"; diff --git a/components/settings/StorageSettings.tsx b/components/settings/StorageSettings.tsx index 5b693acd..9f682e50 100644 --- a/components/settings/StorageSettings.tsx +++ b/components/settings/StorageSettings.tsx @@ -4,7 +4,7 @@ import { useDownload } from "@/providers/DownloadProvider"; import { clearLogs } from "@/utils/log"; import { useQuery } from "@tanstack/react-query"; import * as FileSystem from "expo-file-system"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import { View } from "react-native"; import * as Progress from "react-native-progress"; import { toast } from "sonner-native"; diff --git a/components/settings/SubtitleToggles.tsx b/components/settings/SubtitleToggles.tsx index 66c514b1..24e3d173 100644 --- a/components/settings/SubtitleToggles.tsx +++ b/components/settings/SubtitleToggles.tsx @@ -1,5 +1,5 @@ import { TouchableOpacity, View, ViewProps } from "react-native"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { Text } from "../common/Text"; import { useMedia } from "./MediaContext"; import { Switch } from "react-native-gesture-handler"; diff --git a/components/video-player/controls/AudioSlider.tsx b/components/video-player/controls/AudioSlider.tsx index 65ab7b9f..90326204 100644 --- a/components/video-player/controls/AudioSlider.tsx +++ b/components/video-player/controls/AudioSlider.tsx @@ -1,8 +1,11 @@ import React, { useEffect, useRef } from "react"; -import { View, StyleSheet } from "react-native"; +import { View, StyleSheet, Platform } from "react-native"; import { useSharedValue } from "react-native-reanimated"; import { Slider } from "react-native-awesome-slider"; -import { VolumeManager } from "react-native-volume-manager"; +// import { VolumeManager } from "react-native-volume-manager"; +const VolumeManager = !Platform.isTV + ? require("react-native-volume-manager") + : null; import { Ionicons } from "@expo/vector-icons"; interface AudioSliderProps { @@ -10,6 +13,8 @@ interface AudioSliderProps { } const AudioSlider: React.FC = ({ setVisibility }) => { + if (Platform.isTV) return; + const volume = useSharedValue(50); // Explicitly type as number const min = useSharedValue(0); // Explicitly type as number const max = useSharedValue(100); // Explicitly type as number diff --git a/components/video-player/controls/BrightnessSlider.tsx b/components/video-player/controls/BrightnessSlider.tsx index f7b0f392..be74e9cc 100644 --- a/components/video-player/controls/BrightnessSlider.tsx +++ b/components/video-player/controls/BrightnessSlider.tsx @@ -1,12 +1,15 @@ import React, { useEffect } from "react"; -import { View, StyleSheet } from "react-native"; +import { View, StyleSheet, Platform } from "react-native"; import { useSharedValue } from "react-native-reanimated"; import { Slider } from "react-native-awesome-slider"; -import * as Brightness from "expo-brightness"; +// import * as Brightness from "expo-brightness"; +const Brightness = !Platform.isTV ? require("expo-brightness") : null; import { Ionicons } from "@expo/vector-icons"; import MaterialCommunityIcons from "@expo/vector-icons/MaterialCommunityIcons"; const BrightnessSlider = () => { + if (Platform.isTV) return; + const brightness = useSharedValue(50); const min = useSharedValue(0); const max = useSharedValue(100); diff --git a/components/video-player/controls/Controls.tsx b/components/video-player/controls/Controls.tsx index 2fd1cba3..b82455ff 100644 --- a/components/video-player/controls/Controls.tsx +++ b/components/video-player/controls/Controls.tsx @@ -29,7 +29,7 @@ import { BaseItemDto, MediaSourceInfo, } from "@jellyfin/sdk/lib/generated-client"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import { Image } from "expo-image"; import { useLocalSearchParams, useRouter } from "expo-router"; import { useAtom } from "jotai"; diff --git a/components/video-player/controls/dropdown/DropdownViewDirect.tsx b/components/video-player/controls/dropdown/DropdownViewDirect.tsx index 28b55fa0..c75104cf 100644 --- a/components/video-player/controls/dropdown/DropdownViewDirect.tsx +++ b/components/video-player/controls/dropdown/DropdownViewDirect.tsx @@ -1,7 +1,7 @@ import React, { useMemo, useState } from "react"; import { View, TouchableOpacity } from "react-native"; import { Ionicons } from "@expo/vector-icons"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { useControlContext } from "../contexts/ControlContext"; import { useVideoContext } from "../contexts/VideoContext"; import { EmbeddedSubtitle, ExternalSubtitle } from "../types"; diff --git a/components/video-player/controls/dropdown/DropdownViewTranscoding.tsx b/components/video-player/controls/dropdown/DropdownViewTranscoding.tsx index d57cc126..09ab8ef2 100644 --- a/components/video-player/controls/dropdown/DropdownViewTranscoding.tsx +++ b/components/video-player/controls/dropdown/DropdownViewTranscoding.tsx @@ -1,7 +1,7 @@ import React, { useCallback, useMemo, useState } from "react"; import { View, TouchableOpacity } from "react-native"; import { Ionicons } from "@expo/vector-icons"; -import * as DropdownMenu from "zeego/dropdown-menu"; +import * as DropdownMenu from "@/components/DropdownMenu"; import { useControlContext } from "../contexts/ControlContext"; import { useVideoContext } from "../contexts/VideoContext"; import { TranscodedSubtitle } from "../types"; diff --git a/hooks/useCreditSkipper.ts b/hooks/useCreditSkipper.ts index 1430e7c9..37a82de6 100644 --- a/hooks/useCreditSkipper.ts +++ b/hooks/useCreditSkipper.ts @@ -5,7 +5,7 @@ import { apiAtom } from "@/providers/JellyfinProvider"; import { getAuthHeaders } from "@/utils/jellyfin/jellyfin"; import { writeToLog } from "@/utils/log"; import { msToSeconds, secondsToMs } from "@/utils/time"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; interface CreditTimestamps { Introduction: { diff --git a/hooks/useImageColors.ts b/hooks/useImageColors.ts index c7250c86..927e251e 100644 --- a/hooks/useImageColors.ts +++ b/hooks/useImageColors.ts @@ -10,7 +10,9 @@ import { storage } from "@/utils/mmkv"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client"; import { useAtom, useAtomValue } from "jotai"; import { useEffect, useMemo } from "react"; -import { getColors } from "react-native-image-colors"; +import { Platform } from "react-native"; +// import { getColors } from "react-native-image-colors"; +const getColors = !Platform.isTV ? require("react-native-image-colors") : null; /** * Custom hook to extract and manage image colors for a given item. @@ -28,6 +30,8 @@ export const useImageColors = ({ url?: string | null; disabled?: boolean; }) => { + if (Platform.isTV) return; + const api = useAtomValue(apiAtom); const [, setPrimaryColor] = useAtom(itemThemeColorAtom); diff --git a/hooks/useIntroSkipper.ts b/hooks/useIntroSkipper.ts index 15aaff05..80ea1bf9 100644 --- a/hooks/useIntroSkipper.ts +++ b/hooks/useIntroSkipper.ts @@ -5,7 +5,7 @@ import { apiAtom } from "@/providers/JellyfinProvider"; import { getAuthHeaders } from "@/utils/jellyfin/jellyfin"; import { writeToLog } from "@/utils/log"; import { msToSeconds, secondsToMs } from "@/utils/time"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; interface IntroTimestamps { EpisodeId: string; diff --git a/hooks/useMarkAsPlayed.ts b/hooks/useMarkAsPlayed.ts index ff039cc8..01704b74 100644 --- a/hooks/useMarkAsPlayed.ts +++ b/hooks/useMarkAsPlayed.ts @@ -3,7 +3,7 @@ import { markAsNotPlayed } from "@/utils/jellyfin/playstate/markAsNotPlayed"; import { markAsPlayed } from "@/utils/jellyfin/playstate/markAsPlayed"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { useQueryClient } from "@tanstack/react-query"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import { useAtom } from "jotai"; export const useMarkAsPlayed = (item: BaseItemDto) => { diff --git a/hooks/useOrientation.ts b/hooks/useOrientation.ts index 1ecb31ac..dff4015d 100644 --- a/hooks/useOrientation.ts +++ b/hooks/useOrientation.ts @@ -1,12 +1,17 @@ import orientationToOrientationLock from "@/utils/OrientationLockConverter"; -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import { useEffect, useState } from "react"; +import { Platform } from "react-native"; export const useOrientation = () => { const [orientation, setOrientation] = useState( - ScreenOrientation.OrientationLock.UNKNOWN + Platform.isTV + ? ScreenOrientation.OrientationLock.LANDSCAPE + : ScreenOrientation.OrientationLock.UNKNOWN ); + if (Platform.isTV) return { orientation, setOrientation }; + useEffect(() => { const orientationSubscription = ScreenOrientation.addOrientationChangeListener((event) => { diff --git a/hooks/useOrientationSettings.ts b/hooks/useOrientationSettings.ts index 85b8a113..7bb749a4 100644 --- a/hooks/useOrientationSettings.ts +++ b/hooks/useOrientationSettings.ts @@ -1,8 +1,11 @@ import { useSettings } from "@/utils/atoms/settings"; -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import { useEffect } from "react"; +import { Platform } from "react-native"; export const useOrientationSettings = () => { + if (Platform.isTV) return; + const [settings] = useSettings(); useEffect(() => { diff --git a/hooks/useRemuxHlsToMp4.ts b/hooks/useRemuxHlsToMp4.ts index 25492e33..da922e2d 100644 --- a/hooks/useRemuxHlsToMp4.ts +++ b/hooks/useRemuxHlsToMp4.ts @@ -9,7 +9,8 @@ import { import { useQueryClient } from "@tanstack/react-query"; import * as FileSystem from "expo-file-system"; import { useRouter } from "expo-router"; -import { FFmpegKit, FFmpegSession, Statistics } from "ffmpeg-kit-react-native"; +// import { FFmpegKit, FFmpegSession, Statistics } from "ffmpeg-kit-react-native"; +const FFmpegKit = !Platform.isTV ? require("ffmpeg-kit-react-native") : null; import { useAtomValue } from "jotai"; import { useCallback } from "react"; import { toast } from "sonner-native"; @@ -18,6 +19,7 @@ import useDownloadHelper from "@/utils/download"; import { Api } from "@jellyfin/sdk"; import { useSettings } from "@/utils/atoms/settings"; import { JobStatus } from "@/utils/optimize-server"; +import { Platform } from "react-native"; const createFFmpegCommand = (url: string, output: string) => [ "-y", // overwrite output files without asking @@ -53,7 +55,12 @@ export const useRemuxHlsToMp4 = () => { const [settings] = useSettings(); const { saveImage } = useImageStorage(); const { saveSeriesPrimaryImage } = useDownloadHelper(); - const { saveDownloadedItemInfo, setProcesses, processes, APP_CACHE_DOWNLOAD_DIRECTORY } = useDownload(); + const { + saveDownloadedItemInfo, + setProcesses, + processes, + APP_CACHE_DOWNLOAD_DIRECTORY, + } = useDownload(); const onSaveAssets = async (api: Api, item: BaseItemDto) => { await saveSeriesPrimaryImage(item); @@ -77,9 +84,9 @@ export const useRemuxHlsToMp4 = () => { if (returnCode.isValueSuccess()) { const stat = await session.getLastReceivedStatistics(); await FileSystem.moveAsync({ - from: `${APP_CACHE_DOWNLOAD_DIRECTORY}${item.Id}.mp4`, - to: `${FileSystem.documentDirectory}${item.Id}.mp4` - }) + from: `${APP_CACHE_DOWNLOAD_DIRECTORY}${item.Id}.mp4`, + to: `${FileSystem.documentDirectory}${item.Id}.mp4`, + }); await queryClient.invalidateQueries({ queryKey: ["downloadedItems"], }); @@ -131,12 +138,16 @@ export const useRemuxHlsToMp4 = () => { const startRemuxing = useCallback( async (item: BaseItemDto, url: string, mediaSource: MediaSourceInfo) => { - const cacheDir = await FileSystem.getInfoAsync(APP_CACHE_DOWNLOAD_DIRECTORY); + const cacheDir = await FileSystem.getInfoAsync( + APP_CACHE_DOWNLOAD_DIRECTORY + ); if (!cacheDir.exists) { - await FileSystem.makeDirectoryAsync(APP_CACHE_DOWNLOAD_DIRECTORY, {intermediates: true}) + await FileSystem.makeDirectoryAsync(APP_CACHE_DOWNLOAD_DIRECTORY, { + intermediates: true, + }); } - const output = APP_CACHE_DOWNLOAD_DIRECTORY + `${item.Id}.mp4` + const output = APP_CACHE_DOWNLOAD_DIRECTORY + `${item.Id}.mp4`; if (!api) throw new Error("API is not defined"); if (!item.Id) throw new Error("Item must have an Id"); diff --git a/packages/expo-haptics.native.ts b/packages/expo-haptics.native.ts new file mode 100644 index 00000000..e69de29b diff --git a/packages/expo-haptics.ts b/packages/expo-haptics.ts new file mode 100644 index 00000000..522187df --- /dev/null +++ b/packages/expo-haptics.ts @@ -0,0 +1 @@ +export * as Haptics from "expo-haptics"; diff --git a/packages/expo-screen-orientation.native.ts b/packages/expo-screen-orientation.native.ts new file mode 100644 index 00000000..b658398b --- /dev/null +++ b/packages/expo-screen-orientation.native.ts @@ -0,0 +1,68 @@ +// export { Orientation, OrientationLock } from "expo-screen-orientation"; + +export enum Orientation { + /** + * An unknown screen orientation. For example, the device is flat, perhaps on a table. + */ + UNKNOWN = 0, + /** + * Right-side up portrait interface orientation. + */ + PORTRAIT_UP = 1, + /** + * Upside down portrait interface orientation. + */ + PORTRAIT_DOWN = 2, + /** + * Left landscape interface orientation. + */ + LANDSCAPE_LEFT = 3, + /** + * Right landscape interface orientation. + */ + LANDSCAPE_RIGHT = 4, +} + +export enum OrientationLock { + /** + * The default orientation. On iOS, this will allow all orientations except `Orientation.PORTRAIT_DOWN`. + * On Android, this lets the system decide the best orientation. + */ + DEFAULT = 0, + /** + * All four possible orientations + */ + ALL = 1, + /** + * Any portrait orientation. + */ + PORTRAIT = 2, + /** + * Right-side up portrait only. + */ + PORTRAIT_UP = 3, + /** + * Upside down portrait only. + */ + PORTRAIT_DOWN = 4, + /** + * Any landscape orientation. + */ + LANDSCAPE = 5, + /** + * Left landscape only. + */ + LANDSCAPE_LEFT = 6, + /** + * Right landscape only. + */ + LANDSCAPE_RIGHT = 7, + /** + * A platform specific orientation. This is not a valid policy that can be applied in [`lockAsync`](#screenorientationlockasyncorientationlock). + */ + OTHER = 8, + /** + * An unknown screen orientation lock. This is not a valid policy that can be applied in [`lockAsync`](#screenorientationlockasyncorientationlock). + */ + UNKNOWN = 9, +} diff --git a/packages/expo-screen-orientation.ts b/packages/expo-screen-orientation.ts new file mode 100644 index 00000000..7b29bfe1 --- /dev/null +++ b/packages/expo-screen-orientation.ts @@ -0,0 +1 @@ +export * from "expo-screen-orientation"; diff --git a/providers/DownloadProvider.tsx b/providers/DownloadProvider.tsx index 78fbbe6f..f581dd2e 100644 --- a/providers/DownloadProvider.tsx +++ b/providers/DownloadProvider.tsx @@ -13,12 +13,15 @@ import { BaseItemDto, MediaSourceInfo, } from "@jellyfin/sdk/lib/generated-client/models"; -import { - checkForExistingDownloads, - completeHandler, - download, - setConfig, -} from "@kesha-antonov/react-native-background-downloader"; +// import { +// checkForExistingDownloads, +// completeHandler, +// download, +// setConfig, +// } from "@kesha-antonov/react-native-background-downloader"; +const BackGroundDownloader = !Platform.isTV + ? require("@kesha-antonov/react-native-background-downloader") + : null; import MMKV from "react-native-mmkv"; import { focusManager, @@ -42,13 +45,14 @@ import React, { import { AppState, AppStateStatus, Platform } from "react-native"; import { toast } from "sonner-native"; import { apiAtom } from "./JellyfinProvider"; -import * as Notifications from "expo-notifications"; +// import * as Notifications from "expo-notifications"; +const Notifications = !Platform.isTV ? require("expo-notifications") : null; import { getItemImage } from "@/utils/getItemImage"; import useImageStorage from "@/hooks/useImageStorage"; import { storage } from "@/utils/mmkv"; import useDownloadHelper from "@/utils/download"; import { FileInfo } from "expo-file-system"; -import * as Haptics from "expo-haptics"; +import * as Haptics from "@/packages/expo-haptics"; import * as Application from "expo-application"; export type DownloadedItem = { @@ -67,6 +71,7 @@ const DownloadContext = createContext | null>(null); function useDownloadProvider() { + if (Platform.isTV) return; const queryClient = useQueryClient(); const [settings] = useSettings(); const router = useRouter(); @@ -170,7 +175,7 @@ function useDownloadProvider() { useEffect(() => { const checkIfShouldStartDownload = async () => { if (processes.length === 0) return; - await checkForExistingDownloads(); + await BackGroundDownloader.checkForExistingDownloads(); }; checkIfShouldStartDownload(); @@ -214,7 +219,7 @@ function useDownloadProvider() { ) ); - setConfig({ + BackGroundDownloader.setConfig({ isLogsEnabled: true, progressInterval: 500, headers: { @@ -234,7 +239,7 @@ function useDownloadProvider() { const baseDirectory = FileSystem.documentDirectory; - download({ + BackGroundDownloader.download({ id: process.id, url: settings?.optimizedVersionsServerUrl + "download/" + process.id, destination: `${baseDirectory}/${process.item.Id}.mp4`, @@ -284,7 +289,7 @@ function useDownloadProvider() { }, }); setTimeout(() => { - completeHandler(process.id); + BackGroundDownloader.completeHandler(process.id); removeProcess(process.id); }, 1000); }) diff --git a/utils/OrientationLockConverter.ts b/utils/OrientationLockConverter.ts index 748ffcc6..498e01cb 100644 --- a/utils/OrientationLockConverter.ts +++ b/utils/OrientationLockConverter.ts @@ -1,4 +1,7 @@ -import { Orientation, OrientationLock } from "expo-screen-orientation"; +import { + Orientation, + OrientationLock, +} from "@/packages/expo-screen-orientation"; function orientationToOrientationLock( orientation: Orientation diff --git a/utils/atoms/orientation.ts b/utils/atoms/orientation.ts index e4680fe3..4ee340a2 100644 --- a/utils/atoms/orientation.ts +++ b/utils/atoms/orientation.ts @@ -1,4 +1,4 @@ -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import { atom } from "jotai"; export const orientationAtom = atom( diff --git a/utils/atoms/settings.ts b/utils/atoms/settings.ts index c37dd4eb..fd669530 100644 --- a/utils/atoms/settings.ts +++ b/utils/atoms/settings.ts @@ -1,6 +1,6 @@ import { atom, useAtom } from "jotai"; import { useEffect } from "react"; -import * as ScreenOrientation from "expo-screen-orientation"; +import * as ScreenOrientation from "@/packages/expo-screen-orientation"; import { storage } from "../mmkv"; import { Platform } from "react-native"; import { diff --git a/utils/background-tasks.ts b/utils/background-tasks.ts index 1d7f0a70..0e9a408a 100644 --- a/utils/background-tasks.ts +++ b/utils/background-tasks.ts @@ -1,4 +1,7 @@ -import * as BackgroundFetch from "expo-background-fetch"; +import { Platform } from "react-native"; +const BackgroundFetch = !Platform.isTV + ? require("expo-background-fetch") + : null; export const BACKGROUND_FETCH_TASK = "background-fetch"; From 5055a700c987c50671cf503aa36ff62d03f17716 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Mon, 6 Jan 2025 13:59:56 +0100 Subject: [PATCH 06/20] wip --- components/Button.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/Button.tsx b/components/Button.tsx index a1005e49..c5c0b746 100644 --- a/components/Button.tsx +++ b/components/Button.tsx @@ -1,6 +1,6 @@ import * as Haptics from "@/packages/expo-haptics"; import React, { PropsWithChildren, ReactNode, useMemo } from "react"; -import { Text, TouchableOpacity, View } from "react-native"; +import { Platform, Text, TouchableOpacity, View } from "react-native"; import { Loader } from "./Loader"; export interface ButtonProps @@ -54,7 +54,9 @@ export const Button: React.FC> = ({ onPress={() => { if (!loading && !disabled && onPress) { onPress(); - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + if (!Platform.isTV) { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + } } }} disabled={disabled || loading} From 74ce9d7eea10737aee1ac3f8b4829f16abbb964a Mon Sep 17 00:00:00 2001 From: sarendsen Date: Mon, 6 Jan 2025 14:28:24 +0100 Subject: [PATCH 07/20] wip --- app/(auth)/(tabs)/(home)/index.tsx | 15 ++++++++------- .../{ContextMenu.native.ts => ContextMenu.tv.ts} | 0 ...{DropdownMenu.native.ts => DropdownMenu.tv.ts} | 0 ...{expo-haptics.native.ts => expo-haptics.tv.ts} | 0 packages/expo-screen-orientation.ts | 1 + ...on.native.ts => expo-screen-orientation.tv.ts} | 2 +- 6 files changed, 10 insertions(+), 8 deletions(-) rename components/{ContextMenu.native.ts => ContextMenu.tv.ts} (100%) rename components/{DropdownMenu.native.ts => DropdownMenu.tv.ts} (100%) rename packages/{expo-haptics.native.ts => expo-haptics.tv.ts} (100%) rename packages/{expo-screen-orientation.native.ts => expo-screen-orientation.tv.ts} (98%) diff --git a/app/(auth)/(tabs)/(home)/index.tsx b/app/(auth)/(tabs)/(home)/index.tsx index 98c1603d..2f74e55e 100644 --- a/app/(auth)/(tabs)/(home)/index.tsx +++ b/app/(auth)/(tabs)/(home)/index.tsx @@ -69,9 +69,9 @@ export default function index() { const insets = useSafeAreaInsets(); - if (!Platform.isTV) { - const { downloadedFiles, cleanCacheDirectory } = useDownload(); + const { downloadedFiles, cleanCacheDirectory } = useDownload(); + if (!Platform.isTV) { useEffect(() => { const hasDownloads = downloadedFiles && downloadedFiles.length > 0; navigation.setOptions({ @@ -91,6 +91,12 @@ export default function index() { ), }); }, [downloadedFiles, navigation, router]); + + useEffect(() => { + cleanCacheDirectory().catch((e) => + console.error("Something went wrong cleaning cache directory") + ); + }, []); } const checkConnection = useCallback(async () => { @@ -111,11 +117,6 @@ export default function index() { setIsConnected(state.isConnected); }); - if (!Platform.isTV) { - cleanCacheDirectory().catch((e) => - console.error("Something went wrong cleaning cache directory") - ); - } return () => { unsubscribe(); }; diff --git a/components/ContextMenu.native.ts b/components/ContextMenu.tv.ts similarity index 100% rename from components/ContextMenu.native.ts rename to components/ContextMenu.tv.ts diff --git a/components/DropdownMenu.native.ts b/components/DropdownMenu.tv.ts similarity index 100% rename from components/DropdownMenu.native.ts rename to components/DropdownMenu.tv.ts diff --git a/packages/expo-haptics.native.ts b/packages/expo-haptics.tv.ts similarity index 100% rename from packages/expo-haptics.native.ts rename to packages/expo-haptics.tv.ts diff --git a/packages/expo-screen-orientation.ts b/packages/expo-screen-orientation.ts index 7b29bfe1..5978df82 100644 --- a/packages/expo-screen-orientation.ts +++ b/packages/expo-screen-orientation.ts @@ -1 +1,2 @@ export * from "expo-screen-orientation"; +console.log("LOADED"); diff --git a/packages/expo-screen-orientation.native.ts b/packages/expo-screen-orientation.tv.ts similarity index 98% rename from packages/expo-screen-orientation.native.ts rename to packages/expo-screen-orientation.tv.ts index b658398b..8bd1d5ca 100644 --- a/packages/expo-screen-orientation.native.ts +++ b/packages/expo-screen-orientation.tv.ts @@ -1,5 +1,5 @@ // export { Orientation, OrientationLock } from "expo-screen-orientation"; - +console.log("NOT"); export enum Orientation { /** * An unknown screen orientation. For example, the device is flat, perhaps on a table. From 3fae21d559560ce6c490e480a72571951a1c5f1d Mon Sep 17 00:00:00 2001 From: sarendsen Date: Mon, 6 Jan 2025 14:45:42 +0100 Subject: [PATCH 08/20] wip --- components/ContextMenu.ts | 2 +- components/DropdownMenu.ts | 2 +- hooks/useImageColors.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/ContextMenu.ts b/components/ContextMenu.ts index 4be160e5..71954e83 100644 --- a/components/ContextMenu.ts +++ b/components/ContextMenu.ts @@ -1 +1 @@ -export * as ContextMenu from "zeego/context-menu"; +export * from "zeego/context-menu"; diff --git a/components/DropdownMenu.ts b/components/DropdownMenu.ts index c457d736..d5e75592 100644 --- a/components/DropdownMenu.ts +++ b/components/DropdownMenu.ts @@ -1 +1 @@ -export * as DropdownMenu from "zeego/dropdown-menu"; +export * from "zeego/dropdown-menu"; diff --git a/hooks/useImageColors.ts b/hooks/useImageColors.ts index 927e251e..b3a8ff90 100644 --- a/hooks/useImageColors.ts +++ b/hooks/useImageColors.ts @@ -12,7 +12,7 @@ import { useAtom, useAtomValue } from "jotai"; import { useEffect, useMemo } from "react"; import { Platform } from "react-native"; // import { getColors } from "react-native-image-colors"; -const getColors = !Platform.isTV ? require("react-native-image-colors") : null; +const Colors = !Platform.isTV ? require("react-native-image-colors") : null; /** * Custom hook to extract and manage image colors for a given item. @@ -66,7 +66,7 @@ export const useImageColors = ({ } // Extract colors from the image - getColors(source.uri, { + Colors.getColors(source.uri, { fallback: "#fff", cache: false, }) From 8bc360d554ab5726a89ec20f8dd45e234981a68d Mon Sep 17 00:00:00 2001 From: sarendsen Date: Mon, 6 Jan 2025 15:04:07 +0100 Subject: [PATCH 09/20] wip --- metro.config.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 metro.config.js diff --git a/metro.config.js b/metro.config.js new file mode 100644 index 00000000..7d041df7 --- /dev/null +++ b/metro.config.js @@ -0,0 +1,14 @@ +const { getDefaultConfig } = require("expo/metro-config"); + +const config = getDefaultConfig(__dirname); + +if (process.env?.EXPO_TV === "1") { + const originalSourceExts = config.resolver.sourceExts; + const tvSourceExts = [ + ...originalSourceExts.map((e) => `tv.${e}`), + ...originalSourceExts, + ]; + config.resolver.sourceExts = tvSourceExts; +} + +module.exports = config; From 373d4ca3b11194fc5845b438f89e669392adefcd Mon Sep 17 00:00:00 2001 From: sarendsen Date: Mon, 6 Jan 2025 15:10:59 +0100 Subject: [PATCH 10/20] wip --- app/(auth)/(tabs)/(home)/index.tsx | 3 +-- packages/expo-screen-orientation.ts | 1 - packages/expo-screen-orientation.tv.ts | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/app/(auth)/(tabs)/(home)/index.tsx b/app/(auth)/(tabs)/(home)/index.tsx index 2f74e55e..76964325 100644 --- a/app/(auth)/(tabs)/(home)/index.tsx +++ b/app/(auth)/(tabs)/(home)/index.tsx @@ -69,9 +69,8 @@ export default function index() { const insets = useSafeAreaInsets(); - const { downloadedFiles, cleanCacheDirectory } = useDownload(); - if (!Platform.isTV) { + const { downloadedFiles, cleanCacheDirectory } = useDownload(); useEffect(() => { const hasDownloads = downloadedFiles && downloadedFiles.length > 0; navigation.setOptions({ diff --git a/packages/expo-screen-orientation.ts b/packages/expo-screen-orientation.ts index 5978df82..7b29bfe1 100644 --- a/packages/expo-screen-orientation.ts +++ b/packages/expo-screen-orientation.ts @@ -1,2 +1 @@ export * from "expo-screen-orientation"; -console.log("LOADED"); diff --git a/packages/expo-screen-orientation.tv.ts b/packages/expo-screen-orientation.tv.ts index 8bd1d5ca..b994b846 100644 --- a/packages/expo-screen-orientation.tv.ts +++ b/packages/expo-screen-orientation.tv.ts @@ -1,5 +1,3 @@ -// export { Orientation, OrientationLock } from "expo-screen-orientation"; -console.log("NOT"); export enum Orientation { /** * An unknown screen orientation. For example, the device is flat, perhaps on a table. From cda3b64a2beca3f990b00cdcd313d17430529e45 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Tue, 7 Jan 2025 10:08:07 +0100 Subject: [PATCH 11/20] wip --- .gitignore | 4 +++ bun.lockb | Bin 595756 -> 602937 bytes package.json | 6 ++-- scripts/symlink-native-dirs.js | 62 +++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 scripts/symlink-native-dirs.js diff --git a/.gitignore b/.gitignore index 33ed8e6d..b14fd39c 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,10 @@ package-lock.json /ios /android +/iostv +/iosmobile +/androidmobile +/androidtv modules/player/android diff --git a/bun.lockb b/bun.lockb index ec0c8c95373d277e90414750a445d69fc4af61ad..249e5d5fefc07306bcb034c0d1e5120c08b3b0e1 100755 GIT binary patch delta 141664 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 Date: Tue, 7 Jan 2025 10:45:25 +0100 Subject: [PATCH 12/20] wip --- package.json | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 16a86c4a..1eea8c50 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,13 @@ "submodule-reload": "git submodule update --init --remote --recursive", "start": "bun run submodule-reload && expo start", "reset-project": "node ./scripts/reset-project.js", - "ios": "expo run:ios", - "tvos": "EXPO_TV=1 expo run:ios", - "android": "expo run:android", - "androidtv": "EXPO_TV=1 expo run:android", - "web": "expo start --web", - "prebuild": "expo prebuild --clean", - "prebuild-tv": "EXPO_TV=1 expo prebuild --clean", - "prebuild-tv-new": "EXPO_TV=1 node ./scripts/symlink-native-dirs.js; EXPO_TV=1 expo prebuild --clean", + "ios": "EXPO_TV=0 expo run:ios", + "ios:tv": "EXPO_TV=1 expo run:ios", + "android": "EXPO_TV=0 expo run:android", + "android:tv": "EXPO_TV=1 expo run:android", + "prebuild": "EXPO_TV=0 expo prebuild --clean", + "prebuild:tv": "EXPO_TV=1 expo prebuild --clean", + "prebuild:tv-new": "EXPO_TV=1 node ./scripts/symlink-native-dirs.js; EXPO_TV=1 expo prebuild --clean", "test": "jest --watchAll", "lint": "expo lint", "postinstall": "patch-package" From b681025389ac838bde7aaf1b71e7add550a28b44 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Tue, 7 Jan 2025 12:01:55 +0100 Subject: [PATCH 13/20] wip --- app.json | 4 +++- bun.lockb | Bin 602937 -> 624830 bytes package.json | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app.json b/app.json index 2395acc2..2ad2ee22 100644 --- a/app.json +++ b/app.json @@ -81,9 +81,11 @@ { "ios": { "deploymentTarget": "15.6", - "useFrameworks": "static" + "useFrameworks": "static", + "newArchEnabled": false }, "android": { + "newArchEnabled": false, "android": { "compileSdkVersion": 34, "targetSdkVersion": 34, diff --git a/bun.lockb b/bun.lockb index 249e5d5fefc07306bcb034c0d1e5120c08b3b0e1..f015d26901ef0495fcab10dca0cf94c149dbcc30 100755 GIT binary patch delta 88247 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

  • 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�xp!1z9|$!WuBXfGKB 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 Q8Q|AHb}02JV>$o-0Zuq87XSbN diff --git a/package.json b/package.json index 1eea8c50..69b0e977 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "nativewind": "^2.0.11", "react": "18.2.0", "react-dom": "18.2.0", - "react-native": "npm:react-native-tvos@0.76.5-0", + "react-native": "npm:react-native-tvos@~0.74.5-0", "react-native-awesome-slider": "^2.5.6", "react-native-bottom-tabs": "0.7.1", "react-native-circular-progress": "^1.4.1", @@ -100,7 +100,7 @@ "react-native-uitextview": "^1.4.0", "react-native-url-polyfill": "^2.0.0", "react-native-uuid": "^2.0.2", - "react-native-video": "^6.9.0", + "react-native-video": "^6.8.0", "react-native-volume-manager": "^1.10.0", "react-native-web": "~0.19.13", "react-native-webview": "13.8.6", From dd0882693150370917e66a82bbfba940cc1e0e4e Mon Sep 17 00:00:00 2001 From: sarendsen Date: Tue, 7 Jan 2025 12:03:35 +0100 Subject: [PATCH 14/20] wip --- package.json | 1 - scripts/reset-project.js | 73 ---------------------------------------- 2 files changed, 74 deletions(-) delete mode 100755 scripts/reset-project.js diff --git a/package.json b/package.json index 69b0e977..b128915c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,6 @@ "scripts": { "submodule-reload": "git submodule update --init --remote --recursive", "start": "bun run submodule-reload && expo start", - "reset-project": "node ./scripts/reset-project.js", "ios": "EXPO_TV=0 expo run:ios", "ios:tv": "EXPO_TV=1 expo run:ios", "android": "EXPO_TV=0 expo run:android", diff --git a/scripts/reset-project.js b/scripts/reset-project.js deleted file mode 100755 index 4512e162..00000000 --- a/scripts/reset-project.js +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env node - -/** - * This script is used to reset the project to a blank state. - * It moves the /app directory to /app-example and creates a new /app directory with an index.tsx and _layout.tsx file. - * You can remove the `reset-project` script from package.json and safely delete this file after running it. - */ - -const fs = require('fs'); -const path = require('path'); - -const root = process.cwd(); -const oldDirPath = path.join(root, 'app'); -const newDirPath = path.join(root, 'app-example'); -const newAppDirPath = path.join(root, 'app'); - -const indexContent = `import { Text, View } from "react-native"; - -export default function Index() { - return ( - - Edit app/index.tsx to edit this screen. - - ); -} -`; - -const layoutContent = `import { Stack } from "expo-router"; - -export default function RootLayout() { - return ( - - - - ); -} -`; - -fs.rename(oldDirPath, newDirPath, (error) => { - if (error) { - return console.error(`Error renaming directory: ${error}`); - } - console.log('/app moved to /app-example.'); - - fs.mkdir(newAppDirPath, { recursive: true }, (error) => { - if (error) { - return console.error(`Error creating new app directory: ${error}`); - } - console.log('New /app directory created.'); - - const indexPath = path.join(newAppDirPath, 'index.tsx'); - fs.writeFile(indexPath, indexContent, (error) => { - if (error) { - return console.error(`Error creating index.tsx: ${error}`); - } - console.log('app/index.tsx created.'); - - const layoutPath = path.join(newAppDirPath, '_layout.tsx'); - fs.writeFile(layoutPath, layoutContent, (error) => { - if (error) { - return console.error(`Error creating _layout.tsx: ${error}`); - } - console.log('app/_layout.tsx created.'); - }); - }); - }); -}); From 3cd8e4100007cbeb40c8f0b7b2723dbe9518af8a Mon Sep 17 00:00:00 2001 From: sarendsen Date: Wed, 8 Jan 2025 15:25:06 +0100 Subject: [PATCH 15/20] wip --- bun.lockb | Bin 624830 -> 624830 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index f015d26901ef0495fcab10dca0cf94c149dbcc30..a3b7f57838581ade96a42dd6e4d7324eeb3cdc7a 100755 GIT binary patch delta 13283 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 F^uLePy;A@H delta 13270 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

    _4z3wKVn)TWq!qN2$Qe4JoVJJ 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 epjv9@K1Y~$?!6$J&HIMc`Dlpu Date: Thu, 30 Jan 2025 09:20:31 +0100 Subject: [PATCH 16/20] WIP --- app/(auth)/(tabs)/(home)/_layout.tsx | 2 +- .../albums/[albumId].tsx | 130 ------------------ .../artists/[artistId].tsx | 130 ------------------ .../artists/index.tsx | 117 ---------------- app/(auth)/(tabs)/(search)/index.tsx | 42 ------ components/Chromecast.tv.tsx | 0 components/ItemContent.tsx | 17 +-- components/PlayButton.tsx | 5 +- components/common/TouchableItemRouter.tsx | 12 -- components/stacks/NestedTabPageStack.tsx | 9 +- utils/jellyseerr | 2 +- 11 files changed, 16 insertions(+), 450 deletions(-) delete mode 100644 app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx delete mode 100644 app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/[artistId].tsx delete mode 100644 app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/index.tsx create mode 100644 components/Chromecast.tv.tsx diff --git a/app/(auth)/(tabs)/(home)/_layout.tsx b/app/(auth)/(tabs)/(home)/_layout.tsx index 5d5054b0..430d4ba1 100644 --- a/app/(auth)/(tabs)/(home)/_layout.tsx +++ b/app/(auth)/(tabs)/(home)/_layout.tsx @@ -1,4 +1,4 @@ -import { Chromecast } from "@/components/Chromecast"; +const Chromecast = !Platform.isTV ? require("@/components/Chromecast") : null; import { Text } from "@/components/common/Text"; import { nestedTabPageScreenOptions } from "@/components/stacks/NestedTabPageStack"; import { Feather } from "@expo/vector-icons"; diff --git a/app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx b/app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx deleted file mode 100644 index de7d10e7..00000000 --- a/app/(auth)/(tabs)/(home,libraries,search,favorites)/albums/[albumId].tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { Chromecast } from "@/components/Chromecast"; -import { ItemImage } from "@/components/common/ItemImage"; -import { Text } from "@/components/common/Text"; -import { TouchableItemRouter } from "@/components/common/TouchableItemRouter"; -import { SongsList } from "@/components/music/SongsList"; -import { ParallaxScrollView } from "@/components/ParallaxPage"; -import ArtistPoster from "@/components/posters/ArtistPoster"; -import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; -import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { getItemsApi } from "@jellyfin/sdk/lib/utils/api"; -import { useQuery } from "@tanstack/react-query"; -import { router, useLocalSearchParams, useNavigation } from "expo-router"; -import { useAtom } from "jotai"; -import { useEffect, useState } from "react"; -import { Platform, ScrollView, TouchableOpacity, View } from "react-native"; -import { useSafeAreaInsets } from "react-native-safe-area-context"; - -export default function page() { - const searchParams = useLocalSearchParams(); - const { collectionId, artistId, albumId } = searchParams as { - collectionId: string; - artistId: string; - albumId: string; - }; - - const [api] = useAtom(apiAtom); - const [user] = useAtom(userAtom); - - const navigation = useNavigation(); - - if (!Platform.isTV) { - useEffect(() => { - navigation.setOptions({ - headerRight: () => ( - - - - ), - }); - }); - } - - const { data: album } = useQuery({ - queryKey: ["album", albumId, artistId], - queryFn: async () => { - if (!api) return null; - const response = await getItemsApi(api).getItems({ - userId: user?.Id, - ids: [albumId], - }); - const data = response.data.Items?.[0]; - return data; - }, - enabled: !!api && !!user?.Id && !!albumId, - staleTime: 0, - }); - - const { - data: songs, - isLoading, - isError, - } = useQuery<{ - Items: BaseItemDto[]; - TotalRecordCount: number; - }>({ - queryKey: ["songs", artistId, albumId], - queryFn: async () => { - if (!api) - return { - Items: [], - TotalRecordCount: 0, - }; - - const response = await getItemsApi(api).getItems({ - userId: user?.Id, - parentId: albumId, - fields: [ - "ItemCounts", - "PrimaryImageAspectRatio", - "CanDelete", - "MediaSourceCount", - ], - sortBy: ["ParentIndexNumber", "IndexNumber", "SortName"], - }); - - const data = response.data.Items; - - return { - Items: data || [], - TotalRecordCount: response.data.TotalRecordCount || 0, - }; - }, - enabled: !!api && !!user?.Id, - }); - - const insets = useSafeAreaInsets(); - - if (!album) return null; - - return ( - - } - > - - {album?.Name} - - {songs?.TotalRecordCount} songs - - - - - - - ); -} diff --git a/app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/[artistId].tsx b/app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/[artistId].tsx deleted file mode 100644 index 8d82d205..00000000 --- a/app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/[artistId].tsx +++ /dev/null @@ -1,130 +0,0 @@ -import ArtistPoster from "@/components/posters/ArtistPoster"; -import { Text } from "@/components/common/Text"; -import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; -import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { getItemsApi } from "@jellyfin/sdk/lib/utils/api"; -import { useQuery } from "@tanstack/react-query"; -import { router, useLocalSearchParams, useNavigation } from "expo-router"; -import { useAtom } from "jotai"; -import { useEffect, useState } from "react"; -import { FlatList, ScrollView, TouchableOpacity, View } from "react-native"; -import { useSafeAreaInsets } from "react-native-safe-area-context"; -import { ItemImage } from "@/components/common/ItemImage"; -import { ParallaxScrollView } from "@/components/ParallaxPage"; -import { TouchableItemRouter } from "@/components/common/TouchableItemRouter"; - -export default function page() { - const searchParams = useLocalSearchParams(); - const { artistId } = searchParams as { - artistId: string; - }; - - const [api] = useAtom(apiAtom); - const [user] = useAtom(userAtom); - - const navigation = useNavigation(); - - const [startIndex, setStartIndex] = useState(0); - - const { data: artist } = useQuery({ - queryKey: ["album", artistId], - queryFn: async () => { - if (!api) return null; - const response = await getItemsApi(api).getItems({ - userId: user?.Id, - ids: [artistId], - }); - const data = response.data.Items?.[0]; - return data; - }, - enabled: !!api && !!user?.Id && !!artistId, - staleTime: 0, - }); - - const { - data: albums, - isLoading, - isError, - } = useQuery<{ - Items: BaseItemDto[]; - TotalRecordCount: number; - }>({ - queryKey: ["albums", artistId, startIndex], - queryFn: async () => { - if (!api) - return { - Items: [], - TotalRecordCount: 0, - }; - - const response = await getItemsApi(api).getItems({ - userId: user?.Id, - parentId: artistId, - sortOrder: ["Descending", "Descending", "Ascending"], - includeItemTypes: ["MusicAlbum"], - recursive: true, - fields: [ - "ParentId", - "PrimaryImageAspectRatio", - "ParentId", - "PrimaryImageAspectRatio", - ], - collapseBoxSetItems: false, - albumArtistIds: [artistId], - startIndex, - limit: 100, - sortBy: ["PremiereDate", "ProductionYear", "SortName"], - }); - - const data = response.data.Items; - - return { - Items: data || [], - TotalRecordCount: response.data.TotalRecordCount || 0, - }; - }, - enabled: !!api && !!user?.Id, - }); - - const insets = useSafeAreaInsets(); - - if (!artist || !albums) return null; - - return ( - - } - > - - {artist?.Name} - - {albums.TotalRecordCount} albums - - - - {albums.Items.map((item, idx) => ( - - - - {item.Name} - {item.ProductionYear} - - - ))} - - - ); -} diff --git a/app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/index.tsx b/app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/index.tsx deleted file mode 100644 index 4827287e..00000000 --- a/app/(auth)/(tabs)/(home,libraries,search,favorites)/artists/index.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import { Text } from "@/components/common/Text"; -import { TouchableItemRouter } from "@/components/common/TouchableItemRouter"; -import ArtistPoster from "@/components/posters/ArtistPoster"; -import MoviePoster from "@/components/posters/MoviePoster"; -import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; -import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; -import { getArtistsApi, getItemsApi } from "@jellyfin/sdk/lib/utils/api"; -import { useQuery } from "@tanstack/react-query"; -import { router, useLocalSearchParams } from "expo-router"; -import { useAtom } from "jotai"; -import { useMemo, useState } from "react"; -import { FlatList, TouchableOpacity, View } from "react-native"; - -export default function page() { - const searchParams = useLocalSearchParams(); - const { collectionId } = searchParams as { collectionId: string }; - - const [api] = useAtom(apiAtom); - const [user] = useAtom(userAtom); - - const { data: collection } = useQuery({ - queryKey: ["collection", collectionId], - queryFn: async () => { - if (!api) return null; - const response = await getItemsApi(api).getItems({ - userId: user?.Id, - ids: [collectionId], - }); - const data = response.data.Items?.[0]; - return data; - }, - enabled: !!api && !!user?.Id && !!collectionId, - staleTime: 0, - }); - - const [startIndex, setStartIndex] = useState(0); - - const { data, isLoading, isError } = useQuery<{ - Items: BaseItemDto[]; - TotalRecordCount: number; - }>({ - queryKey: ["collection-items", collection?.Id, startIndex], - queryFn: async () => { - if (!api || !collectionId) - return { - Items: [], - TotalRecordCount: 0, - }; - - const response = await getArtistsApi(api).getArtists({ - sortBy: ["SortName"], - sortOrder: ["Ascending"], - fields: ["PrimaryImageAspectRatio", "SortName"], - imageTypeLimit: 1, - enableImageTypes: ["Primary", "Backdrop", "Banner", "Thumb"], - parentId: collectionId, - userId: user?.Id, - }); - - const data = response.data.Items; - - return { - Items: data || [], - TotalRecordCount: response.data.TotalRecordCount || 0, - }; - }, - enabled: !!collection?.Id && !!api && !!user?.Id, - }); - - const totalItems = useMemo(() => { - return data?.TotalRecordCount; - }, [data]); - - if (!data) return null; - - return ( - - Artists - - } - nestedScrollEnabled - data={data.Items} - numColumns={3} - columnWrapperStyle={{ - justifyContent: "space-between", - }} - renderItem={({ item, index }) => ( - - - {collection?.CollectionType === "movies" && ( - - )} - {collection?.CollectionType === "music" && ( - - )} - {item.Name} - {item.ProductionYear} - - - )} - keyExtractor={(item) => item.Id || ""} - /> - ); -} diff --git a/app/(auth)/(tabs)/(search)/index.tsx b/app/(auth)/(tabs)/(search)/index.tsx index 1ae0059c..373a1fbf 100644 --- a/app/(auth)/(tabs)/(search)/index.tsx +++ b/app/(auth)/(tabs)/(search)/index.tsx @@ -441,48 +441,6 @@ export default function search() { )} /> - m.Id!)} - header="Artists" - renderItem={(item: BaseItemDto) => ( - - - - - )} - /> - m.Id!)} - header="Albums" - renderItem={(item: BaseItemDto) => ( - - - - - )} - /> - m.Id!)} - header="Songs" - renderItem={(item: BaseItemDto) => ( - - - - - )} - /> )} {searchType === "Discover" && ( diff --git a/components/Chromecast.tv.tsx b/components/Chromecast.tv.tsx new file mode 100644 index 00000000..e69de29b diff --git a/components/ItemContent.tsx b/components/ItemContent.tsx index f1f3bcde..c59ccdfb 100644 --- a/components/ItemContent.tsx +++ b/components/ItemContent.tsx @@ -3,7 +3,7 @@ import { Bitrate, BitrateSelector } from "@/components/BitrateSelector"; import { DownloadSingleItem } from "@/components/DownloadItem"; import { OverviewText } from "@/components/OverviewText"; import { ParallaxScrollView } from "@/components/ParallaxPage"; -import { PlayButton } from "@/components/PlayButton"; +const PlayButton = !Platform.isTV ? require("@/components/PlayButton") : null; import { PlayedStatus } from "@/components/PlayedStatus"; import { SimilarItems } from "@/components/SimilarItems"; import { SubtitleTrackSelector } from "@/components/SubtitleTrackSelector"; @@ -29,7 +29,7 @@ import { useAtom } from "jotai"; import React, { useEffect, useMemo, useState } from "react"; import { Platform, View } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; -import { Chromecast } from "./Chromecast"; +const Chromecast = !Platform.isTV ? require("./Chromecast") : null; import { ItemHeader } from "./ItemHeader"; import { ItemTechnicalDetails } from "./ItemTechnicalDetails"; import { MediaSourceSelector } from "./MediaSourceSelector"; @@ -248,12 +248,13 @@ export const ItemContent: React.FC<{ item: BaseItemDto }> = React.memo( /> )} - - + {!Platform.isTV && ( + + )} {item.Type === "Episode" && ( diff --git a/components/PlayButton.tsx b/components/PlayButton.tsx index 27a9021e..9a403be0 100644 --- a/components/PlayButton.tsx +++ b/components/PlayButton.tsx @@ -1,3 +1,4 @@ +import { Platform } from "react-native"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { itemThemeColorAtom } from "@/utils/atoms/primaryColor"; import { useSettings } from "@/utils/atoms/settings"; @@ -31,7 +32,9 @@ import Animated, { } from "react-native-reanimated"; import { Button } from "./Button"; import { SelectedOptions } from "./ItemContent"; -import { chromecastProfile } from "@/utils/profiles/chromecast"; +const chromecastProfile = !Platform.isTV + ? require("@/utils/profiles/chromecast") + : null; import * as Haptics from "@/packages/expo-haptics"; interface Props extends React.ComponentProps { diff --git a/components/common/TouchableItemRouter.tsx b/components/common/TouchableItemRouter.tsx index b1b886bd..cb6dff12 100644 --- a/components/common/TouchableItemRouter.tsx +++ b/components/common/TouchableItemRouter.tsx @@ -26,18 +26,6 @@ export const itemRouter = ( return `/(auth)/(tabs)/${from}/series/${item.Id}`; } - if (item.Type === "MusicAlbum") { - return `/(auth)/(tabs)/${from}/albums/${item.Id}`; - } - - if (item.Type === "Audio") { - return `/(auth)/(tabs)/${from}/albums/${item.AlbumId}`; - } - - if (item.Type === "MusicArtist") { - return `/(auth)/(tabs)/${from}/artists/${item.Id}`; - } - if (item.Type === "Person" || item.Type === "Actor") { return `/(auth)/(tabs)/${from}/actors/${item.Id}`; } diff --git a/components/stacks/NestedTabPageStack.tsx b/components/stacks/NestedTabPageStack.tsx index 024b1272..2cfeed1d 100644 --- a/components/stacks/NestedTabPageStack.tsx +++ b/components/stacks/NestedTabPageStack.tsx @@ -17,14 +17,7 @@ export const commonScreenOptions: ICommonScreenOptions = { headerLeft: () => , }; -const routes = [ - "actors/[actorId]", - "albums/[albumId]", - "artists/index", - "artists/[artistId]", - "items/page", - "series/[id]", -]; +const routes = ["actors/[actorId]", "items/page", "series/[id]"]; export const nestedTabPageScreenOptions: Record = Object.fromEntries(routes.map((route) => [route, commonScreenOptions])); diff --git a/utils/jellyseerr b/utils/jellyseerr index e69d160e..4401b164 160000 --- a/utils/jellyseerr +++ b/utils/jellyseerr @@ -1 +1 @@ -Subproject commit e69d160e25f0962cd77b01c861ce248050e1ad38 +Subproject commit 4401b16414af604a7372dacac326c38b18ad8555 From 3e90447dd44bbc58ce7078edd05ada8594beb59d Mon Sep 17 00:00:00 2001 From: sarendsen Date: Thu, 30 Jan 2025 10:18:07 +0100 Subject: [PATCH 17/20] WIP --- app.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app.json b/app.json index 2ad2ee22..d5f972c5 100644 --- a/app.json +++ b/app.json @@ -57,12 +57,6 @@ "expo-router", "expo-font", "@config-plugins/ffmpeg-kit-react-native", - [ - "react-native-google-cast", - { - "useDefaultExpandedMediaControls": true - } - ], [ "react-native-video", { From 65c4a1340d2ba326152f246571da8a4b97268339 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Thu, 30 Jan 2025 11:19:36 +0100 Subject: [PATCH 18/20] WIP --- components/common/TouchableItemRouter.tsx | 158 ++++++++++++---------- 1 file changed, 87 insertions(+), 71 deletions(-) diff --git a/components/common/TouchableItemRouter.tsx b/components/common/TouchableItemRouter.tsx index cb6dff12..ceb13638 100644 --- a/components/common/TouchableItemRouter.tsx +++ b/components/common/TouchableItemRouter.tsx @@ -1,4 +1,5 @@ import { useMarkAsPlayed } from "@/hooks/useMarkAsPlayed"; +import { Platform } from "react-native"; import { BaseItemDto, BaseItemPerson, @@ -67,79 +68,94 @@ export const TouchableItemRouter: React.FC> = ({ from === "(libraries)" || from === "(favorites)" ) - return ( - - - { - const url = itemRouter(item, from); - // @ts-ignore - router.push(url); - }} - {...props} - > - {children} - - - { + const url = itemRouter(item, from); + // @ts-ignore + router.push(url); + }} + {...props} > - Actions - { - markAsPlayedStatus(true); - }} - shouldDismissMenuOnSelect - > - - Mark as watched - - + ); + } else { + return ( + + + { + const url = itemRouter(item, from); + // @ts-ignore + router.push(url); }} - androidIconName="checkmark-circle" - > - - { - markAsPlayedStatus(false); - }} - shouldDismissMenuOnSelect - destructive + {...props} + > + {children} + + + - - Mark as not watched - - Actions + { + markAsPlayedStatus(true); }} - androidIconName="eye-slash" - > - - - - ); + shouldDismissMenuOnSelect + > + + Mark as watched + + + + { + markAsPlayedStatus(false); + }} + shouldDismissMenuOnSelect + destructive + > + + Mark as not watched + + + + + + ); + } }; From 366bc0137ec2037f5476767c988d3849913f65c4 Mon Sep 17 00:00:00 2001 From: sarendsen Date: Fri, 31 Jan 2025 13:22:51 +0100 Subject: [PATCH 19/20] WIP --- app.config.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 app.config.js diff --git a/app.config.js b/app.config.js new file mode 100644 index 00000000..a6b72ec0 --- /dev/null +++ b/app.config.js @@ -0,0 +1,11 @@ +module.exports = ({ config }) => { + if (process.env.EXPO_TV === "1") { + config.plugins.push([ + "react-native-google-cast", + { useDefaultExpandedMediaControls: true }, + ]); + } + return { + ...config, + }; +}; From 7fcd598fa19f9946669eb34f8fe2c789554c267d Mon Sep 17 00:00:00 2001 From: sarendsen Date: Wed, 5 Feb 2025 10:04:50 +0100 Subject: [PATCH 20/20] wip --- components/AudioTrackSelector.tsx | 6 ++++-- components/BitrateSelector.tsx | 6 ++++-- components/DropdownMenu.ts | 1 - components/DropdownMenu.tv.ts | 0 components/ItemContent.tsx | 7 +++++-- components/MediaSourceSelector.tsx | 6 ++++-- components/SubtitleTrackSelector.tsx | 6 ++++-- components/series/SeasonDropdown.tsx | 6 ++++-- components/settings/AudioToggles.tsx | 15 ++++++++++----- .../controls/dropdown/DropdownViewDirect.tsx | 2 +- .../controls/dropdown/DropdownViewTranscoding.tsx | 2 +- 11 files changed, 37 insertions(+), 20 deletions(-) delete mode 100644 components/DropdownMenu.ts delete mode 100644 components/DropdownMenu.tv.ts diff --git a/components/AudioTrackSelector.tsx b/components/AudioTrackSelector.tsx index d8cba49d..579dab79 100644 --- a/components/AudioTrackSelector.tsx +++ b/components/AudioTrackSelector.tsx @@ -1,7 +1,7 @@ import { MediaSourceInfo } from "@jellyfin/sdk/lib/generated-client/models"; import { useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "@/components/DropdownMenu"; +import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; import { useTranslation } from "react-i18next"; @@ -39,7 +39,9 @@ export const AudioTrackSelector: React.FC = ({ - {t("item_card.audio")} + + {t("item_card.audio")} + {selectedAudioSteam?.DisplayTitle} diff --git a/components/BitrateSelector.tsx b/components/BitrateSelector.tsx index 2fd10b3d..94cf14e1 100644 --- a/components/BitrateSelector.tsx +++ b/components/BitrateSelector.tsx @@ -1,5 +1,5 @@ import { TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "@/components/DropdownMenu"; +import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; @@ -77,7 +77,9 @@ export const BitrateSelector: React.FC = ({ - {t("item_card.quality")} + + {t("item_card.quality")} + {BITRATES.find((b) => b.value === selected?.value)?.key} diff --git a/components/DropdownMenu.ts b/components/DropdownMenu.ts deleted file mode 100644 index d5e75592..00000000 --- a/components/DropdownMenu.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "zeego/dropdown-menu"; diff --git a/components/DropdownMenu.tv.ts b/components/DropdownMenu.tv.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/components/ItemContent.tsx b/components/ItemContent.tsx index ef0907ac..c4e53ba2 100644 --- a/components/ItemContent.tsx +++ b/components/ItemContent.tsx @@ -3,7 +3,8 @@ import { Bitrate, BitrateSelector } from "@/components/BitrateSelector"; import { DownloadSingleItem } from "@/components/DownloadItem"; import { OverviewText } from "@/components/OverviewText"; import { ParallaxScrollView } from "@/components/ParallaxPage"; -const PlayButton = !Platform.isTV ? require("@/components/PlayButton") : null; +// const PlayButton = !Platform.isTV ? require("@/components/PlayButton") : null; +import { PlayButton } from "@/components/PlayButton"; import { PlayedStatus } from "@/components/PlayedStatus"; import { SimilarItems } from "@/components/SimilarItems"; import { SubtitleTrackSelector } from "@/components/SubtitleTrackSelector"; @@ -192,9 +193,10 @@ export const ItemContent: React.FC<{ item: BaseItemDto }> = React.memo( } > + {/* {!Platform.isTV && ( */} - {item.Type !== "Program" && ( + {item.Type !== "Program" && !Platform.isTV && ( = React.memo( /> )} + {!Platform.isTV && ( = ({ - {t("item_card.video")} + + {t("item_card.video")} + {selectedName} diff --git a/components/SubtitleTrackSelector.tsx b/components/SubtitleTrackSelector.tsx index 63e3e5f8..641d4ef0 100644 --- a/components/SubtitleTrackSelector.tsx +++ b/components/SubtitleTrackSelector.tsx @@ -2,7 +2,7 @@ import { tc } from "@/utils/textTools"; import { MediaSourceInfo } from "@jellyfin/sdk/lib/generated-client/models"; import { useMemo } from "react"; import { Platform, TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "@/components/DropdownMenu"; +import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; import { SubtitleHelper } from "@/utils/SubtitleHelper"; import { useTranslation } from "react-i18next"; @@ -51,7 +51,9 @@ export const SubtitleTrackSelector: React.FC = ({ - {t("item_card.subtitles")} + + {t("item_card.subtitles")} + {selectedSubtitleSteam diff --git a/components/series/SeasonDropdown.tsx b/components/series/SeasonDropdown.tsx index a01e105c..438966a3 100644 --- a/components/series/SeasonDropdown.tsx +++ b/components/series/SeasonDropdown.tsx @@ -1,7 +1,7 @@ import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { useEffect, useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; -import * as DropdownMenu from "@/components/DropdownMenu"; +import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "../common/Text"; import { t } from "i18next"; @@ -92,7 +92,9 @@ export const SeasonDropdown: React.FC = ({ - {t("item_card.season")} {seasonIndex} + + {t("item_card.season")} {seasonIndex} + diff --git a/components/settings/AudioToggles.tsx b/components/settings/AudioToggles.tsx index 4ce39942..b9508191 100644 --- a/components/settings/AudioToggles.tsx +++ b/components/settings/AudioToggles.tsx @@ -1,5 +1,5 @@ import { TouchableOpacity, View, ViewProps } from "react-native"; -import * as DropdownMenu from "@/components/DropdownMenu"; +import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "../common/Text"; import { useMedia } from "./MediaContext"; import { Switch } from "react-native-gesture-handler"; @@ -7,7 +7,7 @@ import { useTranslation } from "react-i18next"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; import { Ionicons } from "@expo/vector-icons"; -import {useSettings} from "@/utils/atoms/settings"; +import { useSettings } from "@/utils/atoms/settings"; interface Props extends ViewProps {} @@ -47,7 +47,8 @@ export const AudioToggles: React.FC = ({ ...props }) => { - {settings?.defaultAudioLanguage?.DisplayName || t("home.settings.audio.none")} + {settings?.defaultAudioLanguage?.DisplayName || + t("home.settings.audio.none")} = ({ ...props }) => { collisionPadding={8} sideOffset={8} > - {t("home.settings.audio.language")} + + {t("home.settings.audio.language")} + { @@ -74,7 +77,9 @@ export const AudioToggles: React.FC = ({ ...props }) => { }); }} > - {t("home.settings.audio.none")} + + {t("home.settings.audio.none")} + {cultures?.map((l) => (