library: rename Scan nav/page to Library, show audio codecs per row
All checks were successful
Build and Push Docker Image / build (push) Successful in 1m4s

Per-row audio codec summary (distinct lowercased codecs across an
item's audio streams) via scalar subquery on media_streams, rendered
as "ac3 · aac" in a new monospace Audio column.

v2026.04.15.9

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-15 19:10:00 +02:00
parent a2bdecd298
commit 7d30e6c1a6
4 changed files with 34 additions and 15 deletions

View File

@@ -163,7 +163,11 @@ app.get("/items", (c) => {
`
SELECT id, jellyfin_id, name, type, series_name, season_number, episode_number,
scan_status, original_language, orig_lang_source, container, file_size, file_path,
last_scanned_at, ingest_source
last_scanned_at, ingest_source,
(SELECT GROUP_CONCAT(DISTINCT LOWER(codec))
FROM media_streams
WHERE item_id = media_items.id AND type = 'Audio' AND codec IS NOT NULL
) AS audio_codecs
FROM media_items
${where.sql}
ORDER BY COALESCE(last_scanned_at, created_at) DESC, id DESC
@@ -186,6 +190,7 @@ app.get("/items", (c) => {
file_path: string;
last_scanned_at: string | null;
ingest_source: string | null;
audio_codecs: string | null;
}>;
const total = (db.prepare(`SELECT COUNT(*) as n FROM media_items ${where.sql}`).get(...where.args) as { n: number }).n;
return c.json({ rows, total, hasMore: query.offset + rows.length < total, query });