domain: replace user-facing Jellyfin type badge with kind label (phase 3b)

The library detail page showed the raw Jellyfin item_type string
("MusicAlbum") to users. Add utils/mediaKind.ts with kindLabel(), a
presentation-only MediaKind -> human label map, and use it for the badge.
Flip the two remaining .type debug logs to .kind.

This removes the last user-visible Jellyfin vocabulary on the catalog
surface. primaryImageTag -> imageId rename (naming-only, ~40 sites across
catalog + player/merged types needing a Rust round-trip) intentionally
deferred as the lowest-value slice.

Frontend 644 tests, check clean.
This commit is contained in:
2026-07-23 21:31:51 +02:00
parent 7660a33dfc
commit 2b42b74912
3 changed files with 35 additions and 3 deletions
+31
View File
@@ -0,0 +1,31 @@
// Presentation helpers for the neutral MediaKind.
//
// MediaKind is the app's provider-neutral item classification (defined in Rust,
// generated into bindings). This module holds *display* concerns over it —
// human-readable labels — which are presentation, not domain, and so live in
// the frontend.
import type { MediaKind } from "$lib/api/types";
const KIND_LABELS: Record<MediaKind, string> = {
track: "Song",
album: "Album",
artist: "Artist",
playlist: "Playlist",
movie: "Movie",
series: "Series",
season: "Season",
episode: "Episode",
person: "Person",
channel: "Channel",
liveChannel: "Live TV",
channelItem: "Channel",
folder: "Folder",
other: "",
};
/** Human-readable label for a media kind (e.g. "Album"), or "" if unknown. */
export function kindLabel(kind: MediaKind | null | undefined): string {
if (!kind) return "";
return KIND_LABELS[kind] ?? "";
}