From 3dae4af7604e1ddfa1c6fed7ce7da08b12edc5fc Mon Sep 17 00:00:00 2001 From: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:26:38 -0500 Subject: [PATCH] Fix home screen playback (#289) Fix home screen playback issues - where miniplayer would just disappear continued queue and offline mode work --- helpers/mappings.ts | 13 +++++++--- player/provider.tsx | 53 +++++++++++++++++++++------------------ player/queue-provider.tsx | 20 +++++++++++++++ 3 files changed, 59 insertions(+), 27 deletions(-) create mode 100644 player/queue-provider.tsx diff --git a/helpers/mappings.ts b/helpers/mappings.ts index 82afc75e..9a34096c 100644 --- a/helpers/mappings.ts +++ b/helpers/mappings.ts @@ -48,6 +48,7 @@ export function mapDtoToTrack( PlaySessionId: Client.sessionId, } + console.debug(`Mapping BaseItemDTO to Track object`) const isFavorite = !isUndefined(item.UserData) && (item.UserData.IsFavorite ?? false) const downloads = downloadedTracks.filter((download) => download.item.Id === item.Id) @@ -56,18 +57,24 @@ export function mapDtoToTrack( if (downloads.length > 0 && downloads[0].path) url = downloads[0].path else { - const { MediaSources } = queryClient.getQueryData([ + const PlaybackInfoResponse = queryClient.getQueryData([ QueryKeys.MediaSources, item.Id!, - ]) as PlaybackInfoResponse + ]) as PlaybackInfoResponse | undefined - if (MediaSources && MediaSources[0].TranscodingUrl) url = MediaSources![0].TranscodingUrl + if ( + PlaybackInfoResponse && + PlaybackInfoResponse.MediaSources && + PlaybackInfoResponse.MediaSources[0].TranscodingUrl + ) + url = PlaybackInfoResponse.MediaSources![0].TranscodingUrl else url = `${Client.api!.basePath}/Audio/${item.Id!}/universal?${new URLSearchParams( urlParams, )}` } + console.debug(url.length) return { url, type: TrackType.Default, diff --git a/player/provider.tsx b/player/provider.tsx index c79044e3..a14cd6b1 100644 --- a/player/provider.tsx +++ b/player/provider.tsx @@ -38,6 +38,7 @@ import { getPlaystateApi } from '@jellyfin/sdk/lib/utils/api' import { SKIP_TO_PREVIOUS_THRESHOLD } from './config' import { useNetworkContext } from '../components/Network/provider' import { networkStatusCheck } from './helpers/queue' +import { QueueProvider } from './queue-provider' interface PlayerContext { initialized: boolean @@ -309,6 +310,8 @@ const PlayerContextInitializer = () => { return mapDtoToTrack(queueItem, downloadedTracks ?? [], QueuingType.FromSelection) }) + console.debug(`Slotting ${queueTracks.length} track(s)`) + await addToQueue(queueTracks) setQueue(mutation.queue) @@ -670,30 +673,32 @@ export const PlayerProvider: ({ children }: { children: ReactNode }) => React.JS } = PlayerContextInitializer() return ( - - {children} - + + + {children} + + ) } diff --git a/player/queue-provider.tsx b/player/queue-provider.tsx new file mode 100644 index 00000000..d39a5b98 --- /dev/null +++ b/player/queue-provider.tsx @@ -0,0 +1,20 @@ +import React, { ReactNode } from 'react' +import { createContext } from 'react' + +interface QueueContext {} + +const QueueContextInitailizer = () => { + return {} +} + +export const QueueContext = createContext({}) + +export const QueueProvider: ({ children }: { children: ReactNode }) => React.JSX.Element = ({ + children, +}: { + children: ReactNode +}) => { + const urmo = QueueContextInitailizer() + + return {children} +}