Add playlist image to type

This commit is contained in:
jeffvli 2023-01-02 01:58:31 -08:00
parent d0e2a798fe
commit d6dc880ef4
5 changed files with 66 additions and 10 deletions

View file

@ -582,6 +582,22 @@ const getSongCoverArtUrl = (args: { baseUrl: string; item: JFSong; size: number
);
};
const getPlaylistCoverArtUrl = (args: { baseUrl: string; item: JFPlaylist; size: number }) => {
const size = args.size ? args.size : 300;
if (!args.item.ImageTags?.Primary) {
return null;
}
return (
`${args.baseUrl}/Items` +
`/${args.item.Id}` +
'/Images/Primary' +
`?width=${size}&height=${size}` +
'&quality=96'
);
};
const normalizeSong = (
item: JFSong,
server: ServerListItem,
@ -698,10 +714,28 @@ const normalizeAlbumArtist = (
};
};
const normalizePlaylist = (item: JFPlaylist): Playlist => {
const normalizePlaylist = (
item: JFPlaylist,
server: ServerListItem,
imageSize?: number,
): Playlist => {
const imageUrl = getPlaylistCoverArtUrl({
baseUrl: server.url,
item,
size: imageSize || 300,
});
const imagePlaceholderUrl = getPlaylistCoverArtUrl({
baseUrl: server.url,
item,
size: 1,
});
return {
duration: item.RunTimeTicks / 10000000,
id: item.Id,
imagePlaceholderUrl,
imageUrl,
name: item.Name,
public: null,
rules: null,

View file

@ -512,14 +512,14 @@ const normalizeSong = (
const normalizeAlbum = (item: NDAlbum, server: ServerListItem, imageSize?: number): Album => {
const imageUrl = getCoverArtUrl({
baseUrl: server.url,
coverArtId: item.coverArtId,
coverArtId: item.coverArtId || item.id,
credential: server.credential,
size: imageSize || 300,
});
const imagePlaceholderUrl = getCoverArtUrl({
baseUrl: server.url,
coverArtId: item.coverArtId,
coverArtId: item.coverArtId || item.id,
credential: server.credential,
size: 1,
});
@ -571,10 +571,30 @@ const normalizeAlbumArtist = (item: NDAlbumArtist): AlbumArtist => {
};
};
const normalizePlaylist = (item: NDPlaylist): Playlist => {
const normalizePlaylist = (
item: NDPlaylist,
server: ServerListItem,
imageSize?: number,
): Playlist => {
const imageUrl = getCoverArtUrl({
baseUrl: server.url,
coverArtId: item.id,
credential: server.credential,
size: imageSize || 300,
});
const imagePlaceholderUrl = getCoverArtUrl({
baseUrl: server.url,
coverArtId: item.id,
credential: server.credential,
size: 1,
});
return {
duration: item.duration,
id: item.id,
imagePlaceholderUrl,
imageUrl,
name: item.name,
public: item.public,
rules: item?.rules || null,

View file

@ -20,8 +20,8 @@ export type NDAlbum = {
artist: string;
artistId: string;
compilation: boolean;
coverArtId: string;
coverArtPath: string;
coverArtId?: string; // Removed after v0.48.0
coverArtPath?: string; // Removed after v0.48.0
createdAt: string;
duration: number;
fullText: string;

View file

@ -176,10 +176,10 @@ const playlistList = (data: RawPlaylistListResponse | undefined, server: ServerL
let playlists;
switch (server?.type) {
case 'jellyfin':
playlists = data?.items.map((item) => jfNormalize.playlist(item as JFPlaylist));
playlists = data?.items.map((item) => jfNormalize.playlist(item as JFPlaylist, server));
break;
case 'navidrome':
playlists = data?.items.map((item) => ndNormalize.playlist(item as NDPlaylist));
playlists = data?.items.map((item) => ndNormalize.playlist(item as NDPlaylist, server));
break;
case 'subsonic':
break;
@ -199,10 +199,10 @@ const playlistDetail = (
let playlist;
switch (server?.type) {
case 'jellyfin':
playlist = jfNormalize.playlist(data as JFPlaylist);
playlist = jfNormalize.playlist(data as JFPlaylist, server);
break;
case 'navidrome':
playlist = ndNormalize.playlist(data as NDPlaylist);
playlist = ndNormalize.playlist(data as NDPlaylist, server);
break;
case 'subsonic':
break;

View file

@ -237,6 +237,8 @@ export type MusicFolder = {
export type Playlist = {
duration: number | null;
id: string;
imagePlaceholderUrl: string | null;
imageUrl: string | null;
name: string;
public: boolean | null;
rules?: Record<string, any> | null;