feat(storage): wire Storage Maintenance screen (A6)

Duplicates / failed / missing-metadata tabs (paginated, reusing TrackRow) plus
admin orphan-file cleanup. Adds getDuplicates/getBrokenFiles/getMissingMetadata/
runCleanup endpoints and a DuplicateGroup type; drops the dead scanStorage/
deleteTrackFile stubs that had no backend route.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Цвылев Александр Вадимович
2026-07-28 20:42:05 +03:00
parent 28d9e59e34
commit 3eba3701d0
5 changed files with 345 additions and 17 deletions
+29
View File
@@ -287,6 +287,35 @@ const ru: Translations = {
},
storage: {
subtitle: 'Всё, что хранит этот инстанс',
maintenance: {
subtitle:
'Найдите дубликаты, треки с ошибкой обогащения и файлы без метаданных — и уберите осиротевшие записи.',
tabs: {
duplicates: 'Дубликаты',
broken: 'С ошибкой',
missing: 'Без метаданных',
},
cleanup: {
title: 'Очистить осиротевшие файлы',
description:
'Сверить каталог и удалить записи, у которых пропал файл на диске. Выполняется в фоне.',
button: 'Запустить очистку',
enqueued: 'Очистка поставлена в очередь',
},
duplicates: {
empty: 'Дубликатов не найдено.',
groupTitle: '{{count}} треков с одним отпечатком',
},
broken: {
empty: 'Треков с ошибкой нет.',
},
missing: {
empty: 'У всех треков есть метаданные.',
},
pagination: '{{from}}–{{to}} из {{total}}',
prev: 'Назад',
next: 'Вперёд',
},
device: 'На этом устройстве',
server: 'На сервере',
audioCache: 'Кэш аудио',