feat(downloads): in-app player for library items (E7 S4b)

Play a completed library item in-app: a Play button on Library rows (and
Shared rows with download access) opens a modal that streams the local file
into a native <video controls> (or <audio> for audio-only assets).

Rather than the YouTube IFrame PlayerModal or the Plex HLS PlexPlayer — both
bound to their own domain APIs and unable to point at a local file — this
reuses the shared Modal a11y shell (focus-trap, ESC, layer-stack, portal) and
the range-aware /api/downloads/{id}/file endpoint. S4a's universal-codec
guarantee (mp4/H.264/AAC + m4a/mp3) makes native playback always work, so seek,
volume, fullscreen and speed come for free with zero transcode.
This commit is contained in:
2026-08-29 07:18:58 +02:00
parent fdca12968b
commit 9eaa01617c
5 changed files with 175 additions and 0 deletions
@@ -56,6 +56,7 @@
"delete": "Remove",
"retry": "Retry",
"download": "Save to my device",
"play": "Play",
"rename": "Rename",
"editDetails": "Edit details",
"share": "Share (copy link)",
@@ -64,6 +65,9 @@
"redownload": "Re-download (rebuild file)",
"removeShared": "Remove from my list"
},
"player": {
"unsupported": "Your browser can't play this file."
},
"empty": {
"queue": "Nothing in the queue.",
"done": "No downloads yet.",
@@ -56,6 +56,7 @@
"delete": "Eltávolítás",
"retry": "Újra",
"download": "Mentés a gépemre",
"play": "Lejátszás",
"rename": "Átnevezés",
"editDetails": "Adatok szerkesztése",
"share": "Megosztás (link másolása)",
@@ -64,6 +65,9 @@
"redownload": "Újraletöltés (fájl újraépítése)",
"removeShared": "Eltávolítás a listámból"
},
"player": {
"unsupported": "A böngésződ nem tudja lejátszani ezt a fájlt."
},
"empty": {
"queue": "A sor üres.",
"done": "Még nincs letöltés.",