From 08990e19a0a40efc7981db09f7d1d19213e3d185 Mon Sep 17 00:00:00 2001 From: lashman Date: Fri, 10 Apr 2026 00:01:14 +0300 Subject: [PATCH] notification bell shows poster thumbnails instead of icons --- src/components/layout/AppHeader.tsx | 31 ++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/components/layout/AppHeader.tsx b/src/components/layout/AppHeader.tsx index 0d7c11b..39f35d5 100644 --- a/src/components/layout/AppHeader.tsx +++ b/src/components/layout/AppHeader.tsx @@ -16,7 +16,7 @@ import { Tv, } from '../../lib/icons' import { isTauri } from '../../lib/tauri' -import { jellyfinClient, getItemsApi } from '../../api/jellyfin' +import { jellyfinClient, getItemsApi, getImageUrl, getStoredServerUrl } from '../../api/jellyfin' /** * The single chrome bar at the top of the in-app shell. Replaces the @@ -87,7 +87,7 @@ export default function AppHeader({ pinned, onTogglePin }: Props) { limit: 10, recursive: true, includeItemTypes: ['Movie'], - fields: ['DateCreated', 'PrimaryImageAspectRatio'], + fields: ['DateCreated', 'PrimaryImageAspectRatio', 'ImageTags'], } as any), getItemsApi(api!).getItems({ userId: auth.userId, @@ -96,7 +96,7 @@ export default function AppHeader({ pinned, onTogglePin }: Props) { limit: 50, recursive: true, includeItemTypes: ['Episode'], - fields: ['DateCreated', 'PrimaryImageAspectRatio', 'SeriesName', 'SeriesId', 'ParentIndexNumber', 'IndexNumber'], + fields: ['DateCreated', 'PrimaryImageAspectRatio', 'ImageTags', 'SeriesName', 'SeriesId', 'SeriesPrimaryImageTag', 'ParentIndexNumber', 'IndexNumber'], } as any), ]) const movies = (movieRes.data.Items || []) as any[] @@ -364,6 +364,20 @@ export default function AppHeader({ pinned, onTogglePin }: Props) { const epLabel = isEpisode && (season != null || epNum != null) ? `S${season ?? '?'}E${epNum ?? '?'}${entry.Name ? ` ยท ${entry.Name}` : ''}` : null + + // Poster thumbnail: series poster for episodes, movie poster for movies + const serverUrl = getStoredServerUrl() + const posterUrl = (() => { + if (!serverUrl) return null + if (isEpisode && entry.SeriesId && entry.SeriesPrimaryImageTag) { + return getImageUrl(serverUrl, entry.SeriesId, 'Primary', 160, entry.SeriesPrimaryImageTag) + } + if (entry.ImageTags?.Primary) { + return getImageUrl(serverUrl, entry.Id, 'Primary', 160, entry.ImageTags.Primary) + } + return null + })() + return (