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}
+}