feat(upload): wire A8 local track upload to backend
Implement the A8 upload screen against the existing /upload contract:
- UploadResponse type ({track_id, title, already_exists}) + mutation typed to it
- buildUploadFormData helper (single file under field `file`, per FastAPI)
- UploadPage: drag-and-drop + file picker, client-side queue with
concurrency cap (3), per-file status badges, retry on error,
already_exists -> "Already in library", deep-link to A7 metadata editor
- i18n upload.* section (en/ru) incl. "metadata pending" hint
Indeterminate spinner per file; percent progress is a follow-up
(needs an XHR baseQuery — fetchBaseQuery gives no upload progress).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -181,6 +181,28 @@ const ru: Translations = {
|
||||
description: 'Этого экрана пока нет.',
|
||||
backToLibrary: 'Вернуться в библиотеку',
|
||||
},
|
||||
upload: {
|
||||
title: 'Загрузка файлов',
|
||||
dropzone: {
|
||||
title: 'Перетащите аудиофайлы сюда',
|
||||
hint: 'или нажмите, чтобы выбрать файлы — по одному или сразу несколько',
|
||||
button: 'Выбрать файлы',
|
||||
},
|
||||
queueTitle: 'Загрузки ({{completed}}/{{total}})',
|
||||
clearCompleted: 'Убрать завершённые',
|
||||
retry: 'Повторить',
|
||||
editMetadata: 'Изменить метаданные',
|
||||
metadataPending:
|
||||
'Загруженные треки появляются как «Unknown Artist» с метаданными в ожидании — дозаполните их позже.',
|
||||
unknownArtist: 'Unknown Artist · метаданные в ожидании',
|
||||
status: {
|
||||
queued: 'В очереди',
|
||||
uploading: 'Загрузка',
|
||||
done: 'Загружено',
|
||||
duplicate: 'Уже в библиотеке',
|
||||
error: 'Ошибка',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default ru;
|
||||
|
||||
Reference in New Issue
Block a user