feat(downloads): local-upload UI — drag-drop dialog + progress (E7 S5c)

UploadDialog (drag-drop + native picker + optional display name) opened
from a new Upload button in the queue add-row. Uploads stream through a
new XHR helper (uploadReq in api/core) so the dialog shows real 0-100%
progress with a cancel — fetch/req can't report upload progress. The
upload lands as an already-done job; the S5b file-kind row gates it to
download+share. i18n HU/EN; upload cap/empty errors localize via the
shared structured-detail path.
This commit is contained in:
2026-08-29 18:53:53 +02:00
parent b4ad59274b
commit 584e9ced0c
7 changed files with 358 additions and 1 deletions
@@ -21,8 +21,20 @@
"addUrl": "Paste a YouTube link or video id…",
"add": "Add",
"paste": "Paste link from clipboard",
"upload": "Upload",
"manage": "Manage formats"
},
"upload": {
"title": "Upload a file",
"hint": "Any file type. Video and audio can be played and edited; other files are download-only.",
"drop": "Drag a file here, or click to choose",
"dropActive": "Drop to upload",
"nameLabel": "Name (optional)",
"namePlaceholder": "Leave blank to use the file name",
"submit": "Upload",
"uploading": "Uploading… {{pct}}%",
"added": "File uploaded"
},
"tabs": {
"queue": "Queue",
"done": "Library",
@@ -212,6 +224,10 @@
"source_not_ready": "The source download isn't ready to edit.",
"generic": "That edit couldn't be created."
},
"upload": {
"tooLarge": "That file is too large (max {{size}}).",
"empty": "That file is empty."
},
"fail": {
"title": "Download failed",
"detailsLink": "details",
@@ -21,8 +21,20 @@
"addUrl": "Illessz be egy YouTube linket vagy videó azonosítót…",
"add": "Hozzáad",
"paste": "Link beillesztése a vágólapról",
"upload": "Feltöltés",
"manage": "Formátumok kezelése"
},
"upload": {
"title": "Fájl feltöltése",
"hint": "Bármilyen fájltípus. A videó és a hang lejátszható és szerkeszthető; a többi fájl csak letölthető.",
"drop": "Húzz ide egy fájlt, vagy kattints a kiválasztáshoz",
"dropActive": "Engedd el a feltöltéshez",
"nameLabel": "Név (opcionális)",
"namePlaceholder": "Hagyd üresen a fájlnév használatához",
"submit": "Feltöltés",
"uploading": "Feltöltés… {{pct}}%",
"added": "Fájl feltöltve"
},
"tabs": {
"queue": "Sor",
"done": "Könyvtár",
@@ -212,6 +224,10 @@
"source_not_ready": "A forrásletöltés még nem szerkeszthető.",
"generic": "Ezt a vágást nem sikerült létrehozni."
},
"upload": {
"tooLarge": "Ez a fájl túl nagy (legfeljebb {{size}}).",
"empty": "Ez a fájl üres."
},
"fail": {
"title": "A letöltés nem sikerült",
"detailsLink": "részletek",