mirror of
https://github.com/Jellify-Music/App.git
synced 2026-01-08 03:49:59 -06:00
More work with the queue
This commit is contained in:
20
api/mutators/play-queue/helpers/index.ts
Normal file
20
api/mutators/play-queue/helpers/index.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { QueuingType } from "../../../../enums/queuing-type";
|
||||
import { JellifyTrack } from "../../../../types/JellifyTrack";
|
||||
|
||||
/**
|
||||
* 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[]) => {
|
||||
return 1
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds and returns the index of the play queue to insert user queue tracks into
|
||||
* @param playQueue The current player queue
|
||||
* @returns The index to insert songs to add to the user queue
|
||||
*/
|
||||
export const findPlayQueueIndexStart = (playQueue: JellifyTrack[]) => {
|
||||
return playQueue.findIndex(queuedTrack => queuedTrack.QueueType === QueuingType.FromSelection) - 1;
|
||||
}
|
||||
@@ -2,6 +2,22 @@ import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||
import { AsyncStorageKeys } from "../../../../enums/async-storage-keys";
|
||||
import { JellifyTrack } from "../../../../types/JellifyTrack";
|
||||
|
||||
export async function storePlayQueue(queue: JellifyTrack[]) : Promise<void> {{
|
||||
/**
|
||||
* Stores the play queue for referencing in the UI and for loading at launch
|
||||
* @param queue The queue of tracks to store
|
||||
* @returns
|
||||
*/
|
||||
export async function storePlayQueue(queue: JellifyTrack[]) : Promise<void> {
|
||||
return AsyncStorage.setItem(AsyncStorageKeys.PlayQueue, JSON.stringify(queue));
|
||||
}}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the stored play queue for referencing in the UI and for loading at launch
|
||||
* @returns An array of the stored tracks or an empty array if nothing is stored
|
||||
*/
|
||||
export async function fetchPlayQueue() : Promise<JellifyTrack[]> {
|
||||
|
||||
let storedQueue = await AsyncStorage.getItem(AsyncStorageKeys.PlayQueue);
|
||||
|
||||
return storedQueue != null ? JSON.parse(storedQueue as string) : [];
|
||||
}
|
||||
@@ -3,15 +3,52 @@
|
||||
*/
|
||||
|
||||
import { useMutation } from "@tanstack/react-query";
|
||||
import { useQueue } from "../../queries/queue";
|
||||
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||
import { AsyncStorageKeys } from "../../../enums/async-storage-keys";
|
||||
import { JellifyTrack } from "../../../types/JellifyTrack";
|
||||
import { getQueue, remove } from "react-native-track-player/lib/src/trackPlayer";
|
||||
import { storePlayQueue } from "./helpers/storage";
|
||||
import { Track } from "react-native-track-player/lib/src/interfaces/Track";
|
||||
import { add, getQueue, remove } from "react-native-track-player/lib/src/trackPlayer";
|
||||
import { fetchPlayQueue, storePlayQueue } from "./helpers/storage";
|
||||
import { findPlayNextIndexStart, findPlayQueueIndexStart } from "./helpers";
|
||||
|
||||
export const removeFromQueue = useMutation({
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export const addToPlayNext = useMutation({
|
||||
mutationFn: async (tracks: JellifyTrack[]) => {
|
||||
|
||||
let playQueue = await fetchPlayQueue();
|
||||
let insertIndex = findPlayNextIndexStart(playQueue);
|
||||
|
||||
add(tracks, insertIndex);
|
||||
|
||||
tracks.forEach(track => {
|
||||
playQueue.splice(insertIndex, 0, track);
|
||||
});
|
||||
|
||||
await storePlayQueue(playQueue)
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Adds additional tracks to the end of the user queue
|
||||
*/
|
||||
export const addToPlayQueue = useMutation({
|
||||
mutationFn: async (tracks: JellifyTrack[]) => {
|
||||
|
||||
let playQueue = await fetchPlayQueue();
|
||||
let insertIndex = findPlayQueueIndexStart(playQueue);
|
||||
|
||||
add(tracks, insertIndex);
|
||||
|
||||
tracks.forEach(track => {
|
||||
playQueue.splice(insertIndex, 0, track);
|
||||
});
|
||||
|
||||
await storePlayQueue(playQueue)
|
||||
}
|
||||
});
|
||||
|
||||
export const removeFromPlayQueue = useMutation({
|
||||
mutationFn: async (indexes: number[]) => {
|
||||
// Remove from the player first thing
|
||||
remove(indexes);
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import { useMutation } from "@tanstack/react-query";
|
||||
import { MutationKeys } from "../../../enums/mutation-keys";
|
||||
import { useQuery, UseQueryResult } from "@tanstack/react-query";
|
||||
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||
import { AsyncStorageKeys } from "../../../enums/async-storage-keys";
|
||||
|
||||
import * as Keychain from "react-native-keychain"
|
||||
import { useServerUrl } from "../../queries/storage";
|
||||
import { Jellyfin } from "@jellyfin/sdk";
|
||||
import { client } from "../../queries";
|
||||
import { getSystemApi } from "@jellyfin/sdk/lib/utils/api/system-api"
|
||||
import { JellyfinCredentials } from "../../types/jellyfin-credentials";
|
||||
import { JellifyTrack } from "../../../types/JellifyTrack";
|
||||
import { QueryKeys } from "../../../enums/query-keys";
|
||||
|
||||
export const useStoredQueue: UseQueryResult<JellifyTrack[]> = useQuery({
|
||||
queryKey: [QueryKeys.PlayQueue],
|
||||
queryFn: (() => {
|
||||
return AsyncStorage.getItem(AsyncStorageKeys.PlayQueue);
|
||||
})
|
||||
});
|
||||
Reference in New Issue
Block a user