diff --git a/src/renderer/api/navidrome.api.ts b/src/renderer/api/navidrome.api.ts index 039dc668..9143a1f0 100644 --- a/src/renderer/api/navidrome.api.ts +++ b/src/renderer/api/navidrome.api.ts @@ -34,6 +34,9 @@ import type { NDPlaylist, NDUpdatePlaylistParams, NDUpdatePlaylistResponse, + NDPlaylistSongListResponse, + NDPlaylistSongList, + NDPlaylistSong, } from '/@/renderer/api/navidrome.types'; import { NDPlaylistListSort, NDSongListSort, NDSortOrder } from '/@/renderer/api/navidrome.types'; import type { @@ -391,7 +394,7 @@ const getPlaylistDetail = async (args: PlaylistDetailArgs): Promise => { +const getPlaylistSongList = async (args: PlaylistSongListArgs): Promise => { const { query, server, signal } = args; const searchParams: NDSongListParams & { playlist_id: string } = { @@ -409,7 +412,7 @@ const getPlaylistSongList = async (args: PlaylistSongListArgs): Promise(); + const data = await res.json(); const itemCount = res.headers.get('x-total-count'); return { @@ -442,7 +445,7 @@ const getCoverArtUrl = (args: { }; const normalizeSong = ( - item: NDSong, + item: NDSong | NDPlaylistSong, server: ServerListItem, deviceId: string, imageSize?: number, @@ -453,6 +456,14 @@ const normalizeSong = ( credential: server.credential, size: imageSize || 300, }); + let id; + + // Dynamically determine the id field based on whether or not the item is a playlist song + if ('mediaFileId' in item) { + id = item.mediaFileId; + } else { + id = item.id; + } return { album: item.album, @@ -469,7 +480,7 @@ const normalizeSong = ( discNumber: item.discNumber, duration: item.duration, genres: item.genres, - id: item.id, + id, imageUrl, isFavorite: item.starred, lastPlayedAt: item.playDate ? item.playDate : null, @@ -481,7 +492,7 @@ const normalizeSong = ( releaseYear: String(item.year), serverId: server.id, size: item.size, - streamUrl: `${server.url}/rest/stream.view?id=${item.id}&v=1.13.0&c=feishin_${deviceId}&${server.credential}`, + streamUrl: `${server.url}/rest/stream.view?id=${id}&v=1.13.0&c=feishin_${deviceId}&${server.credential}`, trackNumber: item.trackNumber, type: ServerType.NAVIDROME, uniqueId: nanoid(), diff --git a/src/renderer/api/navidrome.types.ts b/src/renderer/api/navidrome.types.ts index e792c96a..45d53e26 100644 --- a/src/renderer/api/navidrome.types.ts +++ b/src/renderer/api/navidrome.types.ts @@ -325,3 +325,16 @@ export type NDPlaylistListParams = { owner_id?: string; } & NDPagination & NDOrder; + +export type NDPlaylistSong = NDSong & { + mediaFileId: string; + playlistId: string; +}; + +export type NDPlaylistSongListResponse = NDPlaylistSong[]; + +export type NDPlaylistSongList = { + items: NDPlaylistSong[]; + startIndex: number; + totalRecordCount: number; +};