From f894f24130b6cbdcd8e3037ab8789bd4a9eb1d64 Mon Sep 17 00:00:00 2001 From: Violet Caulfield Date: Sat, 25 Jan 2025 06:03:37 -0600 Subject: [PATCH] play next and add to queue changes --- player/helpers/index.ts | 21 +++++++++++++++------ player/provider.tsx | 6 +++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/player/helpers/index.ts b/player/helpers/index.ts index 902035dc..25d9113d 100644 --- a/player/helpers/index.ts +++ b/player/helpers/index.ts @@ -1,17 +1,18 @@ import { isEmpty } from "lodash"; import { QueuingType } from "../../enums/queuing-type"; import { JellifyTrack } from "../../types/JellifyTrack"; +import { getActiveTrackIndex } from "react-native-track-player/lib/src/trackPlayer"; /** * Finds and returns the index of the player queue to insert additional tracks into * @param playQueue The current player queue * @returns The index to insert songs to play next at */ -export const findPlayNextIndexStart = (playQueue: JellifyTrack[]) => { - if (playQueue.length > 0) - return 1 +export const findPlayNextIndexStart = async (playQueue: JellifyTrack[]) => { + if (isEmpty(playQueue)) + return 0; - return 0; + return (await getActiveTrackIndex())! + 1; } /** @@ -19,10 +20,18 @@ export const findPlayNextIndexStart = (playQueue: JellifyTrack[]) => { * @param playQueue The current player queue * @returns The index to insert songs to add to the user queue */ -export const findPlayQueueIndexStart = (playQueue: JellifyTrack[]) => { +export const findPlayQueueIndexStart = async (playQueue: JellifyTrack[]) => { if (isEmpty(playQueue)) return 0; - return playQueue.findIndex(queuedTrack => queuedTrack.QueuingType === QueuingType.FromSelection); + const activeIndex = await getActiveTrackIndex(); + + if (playQueue.findIndex(track => track.QueuingType === QueuingType.FromSelection) === -1) + return activeIndex! + 1 + + return playQueue.findIndex((queuedTrack, index) => + queuedTrack.QueuingType === QueuingType.FromSelection && + index > activeIndex! + ); } \ No newline at end of file diff --git a/player/provider.tsx b/player/provider.tsx index 86730936..026c163c 100644 --- a/player/provider.tsx +++ b/player/provider.tsx @@ -3,7 +3,7 @@ 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, Progress, State, Track, 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"; @@ -75,7 +75,7 @@ const PlayerContextInitializer = () => { } const addToQueue = async (tracks: JellifyTrack[]) => { - const insertIndex = findPlayQueueIndexStart(queue); + const insertIndex = await findPlayQueueIndexStart(queue); console.debug(`Adding ${tracks.length} to queue at index ${insertIndex}`) await TrackPlayer.add(tracks, insertIndex); @@ -86,7 +86,7 @@ const PlayerContextInitializer = () => { } const addToNext = async (tracks: JellifyTrack[]) => { - const insertIndex = findPlayNextIndexStart(queue); + const insertIndex = await findPlayNextIndexStart(queue); console.debug(`Adding ${tracks.length} to queue at index ${insertIndex}`);