From d66b452e17c21ba370df7b1439b245a01e4669f2 Mon Sep 17 00:00:00 2001 From: Violet Caulfield Date: Sat, 15 Feb 2025 06:29:54 -0600 Subject: [PATCH] more use query fixes --- player/constants.ts | 14 +++++++++++++ player/hooks/index.ts | 48 ++----------------------------------------- player/provider.tsx | 40 ++++++++++++++++++++++++++++++++---- 3 files changed, 52 insertions(+), 50 deletions(-) create mode 100644 player/constants.ts diff --git a/player/constants.ts b/player/constants.ts new file mode 100644 index 00000000..fbb220aa --- /dev/null +++ b/player/constants.ts @@ -0,0 +1,14 @@ +import { Capability } from "react-native-track-player"; + +export const CAPABILITIES: Capability[] = [ + Capability.Pause, + Capability.Play, + Capability.PlayFromId, + Capability.SeekTo, + // Capability.JumpForward, + // Capability.JumpBackward, + Capability.SkipToNext, + Capability.SkipToPrevious, + // Capability.Like, + // Capability.Dislike +] \ No newline at end of file diff --git a/player/hooks/index.ts b/player/hooks/index.ts index e6b11953..5e3b0a35 100644 --- a/player/hooks/index.ts +++ b/player/hooks/index.ts @@ -1,49 +1,5 @@ -import { QueryKeys } from "../../enums/query-keys" -import { useQuery } from "@tanstack/react-query" -import TrackPlayer, { Capability, IOSCategory, IOSCategoryOptions, RatingType } from "react-native-track-player" - -const CAPABILITIES: Capability[] = [ - Capability.Pause, - Capability.Play, - Capability.PlayFromId, - Capability.SeekTo, - // Capability.JumpForward, - // Capability.JumpBackward, - Capability.SkipToNext, - Capability.SkipToPrevious, - // Capability.Like, - // Capability.Dislike -] - -export const useSetupPlayer = () => useQuery({ - queryKey: [QueryKeys.Player], - queryFn: async () => { - await TrackPlayer.setupPlayer({ - autoHandleInterruptions: true, - maxCacheSize: 1000 * 100, // 100MB, TODO make this adjustable - iosCategory: IOSCategory.Playback, - iosCategoryOptions: [ - IOSCategoryOptions.AllowAirPlay, - IOSCategoryOptions.AllowBluetooth, - ] - }) - return await TrackPlayer.updateOptions({ - progressUpdateEventInterval: 1, - capabilities: CAPABILITIES, - notificationCapabilities: CAPABILITIES, - compactCapabilities: CAPABILITIES, - // ratingType: RatingType.Heart, - // likeOptions: { - // isActive: false, - // title: "Favorite" - // }, - // dislikeOptions: { - // isActive: true, - // title: "Unfavorite" - // } - }); - } -}); +import TrackPlayer, { RatingType } from "react-native-track-player" +import { CAPABILITIES } from "../constants"; export const useUpdateOptions = async (isFavorite: boolean) => { return await TrackPlayer.updateOptions({ diff --git a/player/provider.tsx b/player/provider.tsx index 9c736f1b..77f1a89d 100644 --- a/player/provider.tsx +++ b/player/provider.tsx @@ -3,13 +3,13 @@ import { JellifyTrack } from "../types/JellifyTrack"; import { storage } from "../constants/storage"; import { MMKVStorageKeys } from "../enums/mmkv-storage-keys"; import { findPlayNextIndexStart, findPlayQueueIndexStart } from "./helpers/index"; -import TrackPlayer, { Event, Progress, State, usePlaybackState, useProgress, useTrackPlayerEvents } from "react-native-track-player"; +import TrackPlayer, { Event, IOSCategory, IOSCategoryOptions, Progress, State, usePlaybackState, useProgress, useTrackPlayerEvents } from "react-native-track-player"; import { isEqual, isUndefined } from "lodash"; import { getPlaystateApi } from "@jellyfin/sdk/lib/utils/api"; import { handlePlaybackProgressUpdated, handlePlaybackState } from "./handlers"; -import { useSetupPlayer, useUpdateOptions } from "../player/hooks"; +import { useUpdateOptions } from "../player/hooks"; import { UPDATE_INTERVAL } from "./config"; -import { useMutation, UseMutationResult } from "@tanstack/react-query"; +import { useMutation, UseMutationResult, useQuery } from "@tanstack/react-query"; import { mapDtoToTrack } from "../helpers/mappings"; import { QueuingType } from "../enums/queuing-type"; import { trigger } from "react-native-haptic-feedback"; @@ -21,6 +21,8 @@ import { Section } from "../components/Player/types"; import { Queue } from "./types/queue-item"; import { markItemPlayed } from "../api/mutations/functions/item"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; +import { QueryKeys } from "@/enums/query-keys"; +import { CAPABILITIES } from "./constants"; interface PlayerContext { initialized: boolean; @@ -234,7 +236,37 @@ const PlayerContextInitializer = () => { //#endregion //#region RNTP Setup - const { isSuccess: isPlayerReady } = useSetupPlayer(); + const { isSuccess: isPlayerReady } = useQuery({ + queryKey: [QueryKeys.Player], + queryFn: async () => { + await TrackPlayer.setupPlayer({ + autoHandleInterruptions: true, + maxCacheSize: 1000 * 100, // 100MB, TODO make this adjustable + iosCategory: IOSCategory.Playback, + iosCategoryOptions: [ + IOSCategoryOptions.AllowAirPlay, + IOSCategoryOptions.AllowBluetooth, + ] + }); + + return await TrackPlayer.updateOptions({ + progressUpdateEventInterval: 1, + capabilities: CAPABILITIES, + notificationCapabilities: CAPABILITIES, + compactCapabilities: CAPABILITIES, + // ratingType: RatingType.Heart, + // likeOptions: { + // isActive: false, + // title: "Favorite" + // }, + // dislikeOptions: { + // isActive: true, + // title: "Unfavorite" + // } + }); + } + }); + const { state: playbackState } = usePlaybackState(); const progress = useProgress(UPDATE_INTERVAL);