diff --git a/api/openapi.yaml b/api/openapi.yaml index d6cba98..88b60e4 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -2928,6 +2928,10 @@ components: type: string nullable: true description: Название целевого хранилища; null, если хранилище не выбрано или удалено + target_storage_path: + type: string + nullable: true + description: Полный путь назначения для админской очереди — локальный путь API или server:/export/path для NFS. Для ожидающих файлов рассчитывается по текущему шаблону. status_reason: type: string nullable: true diff --git a/apps/web/e2e/upload-review.spec.ts b/apps/web/e2e/upload-review.spec.ts index aa3fefa..0fb7379 100644 --- a/apps/web/e2e/upload-review.spec.ts +++ b/apps/web/e2e/upload-review.spec.ts @@ -13,7 +13,7 @@ async function setup(page: Page, scenario: 'queue' | 'template' | 'mine') { const source = structuredClone(mobileFixtures['/api/v1/admin/sources'].items[0]); const file = structuredClone(mobileFixtures['/api/v1/admin/uploads'].items[0]); const files = [ - { ...file, id: 'visible', original_name: 'visible.flac', target_source_name: source.name, target_rel_path: 'Artist/Album/01 - Song.flac' }, + { ...file, id: 'visible', original_name: 'visible.flac', target_source_name: source.name, target_rel_path: 'Artist/Album/01 - Song.flac', target_storage_path: 'nas:/music/Artist/Album/01 - Song.flac' }, { ...file, id: 'approved', original_name: 'approved.flac', status: 'approved' }, { ...file, id: 'hidden', original_name: 'hidden.flac', status: 'processing' }, { ...file, id: 'withdrawn', original_name: 'withdrawn.flac', metadata: null, status: 'withdrawn' }, @@ -34,6 +34,10 @@ async function setup(page: Page, scenario: 'queue' | 'template' | 'mine') { return json(missing); } if (scenario === 'template') { + if (url.pathname === '/api/v1/admin/uploads') { + const path = document.documentElement.dataset.savedTemplate ? 'Artist/Album/01. Song.flac' : 'Artist/Album/Song.flac'; + return json({ items: [{ ...files[0], target_rel_path: path, target_storage_path: `nas:/music/${path}` }], next_cursor: null }); + } if (url.pathname.endsWith('/write-template/suggest')) return json({ template: '{albumartist}/{album}/{track:02}. {title}.{ext}', matched: 180, total: 200, examples: ['Кино/Группа крови/01. Группа крови.flac'] }); if (url.pathname.endsWith('/write-template/check')) return json({ ok: false, total: 50, round_trip: 0, same_path: 45, mismatches: [] }); if (url.pathname === `/api/v1/admin/sources/${source.id}` && req.method === 'PATCH') { @@ -71,8 +75,19 @@ async function setup(page: Page, scenario: 'queue' | 'template' | 'mine') { test('queue shows the storage and path, and recalculates after fixing placement', async ({ page }, info) => { await setup(page, 'queue'); + await expect(page.getByText('Artist/Album/01 - Song.flac', { exact: true })).toBeHidden(); + await page.getByRole('button', { name: 'Развернуть пачку', exact: true }).click(); await expect(page.getByText('Artist/Album/01 - Song.flac', { exact: true })).toBeVisible(); + await expect(page.getByText('nas:/music/Artist/Album/01 - Song.flac', { exact: true })).toBeVisible(); await expect(page.getByText('Хранилище не выбрано', { exact: true })).toBeVisible(); + await page.getByRole('checkbox', { name: 'Выбрать всю пачку', exact: true }).check(); + await page.getByRole('button', { name: 'Свернуть пачку', exact: true }).click(); + await expect(page.getByText('Artist/Album/01 - Song.flac', { exact: true })).toBeHidden(); + await expect(page.getByRole('button', { name: 'Развернуть пачку', exact: true })).toHaveAttribute('aria-expanded', 'false'); + await expect(page.getByRole('checkbox', { name: 'Выбрать всю пачку', exact: true })).toBeChecked(); + await page.getByRole('button', { name: 'Развернуть пачку', exact: true }).press('Enter'); + await expect(page.getByText('Artist/Album/01 - Song.flac', { exact: true })).toBeVisible(); + await page.getByRole('checkbox', { name: 'Выбрать всю пачку', exact: true }).uncheck(); await page.getByRole('button', { name: 'Выбрать хранилище', exact: true }).click(); const dialog = page.getByRole('dialog'); await dialog.getByLabel('Исполнитель', { exact: true }).fill('Artist'); @@ -131,3 +146,25 @@ test('keeps withdrawn proposals in their own filter', async ({ page }) => { await expect(page.getByText('visible.flac', { exact: true })).toBeVisible(); await expect(page.getByText('withdrawn.flac', { exact: true })).toHaveCount(0); }); + +test('queue shows the current full destination after saving a changed source template', async ({ page }) => { + await setup(page, 'template'); + const sourcePath = new URL(page.url()).pathname; + const navigate = async (path: string) => page.evaluate((path) => { + history.pushState({}, '', path); + window.dispatchEvent(new PopStateEvent('popstate')); + }, path); + await navigate('/admin/uploads'); + await page.getByRole('button', { name: 'Развернуть пачку', exact: true }).click(); + await expect(page.getByText('nas:/music/Artist/Album/Song.flac', { exact: true })).toBeVisible(); + await navigate(sourcePath); + await page.getByRole('textbox', { name: 'Шаблон пути', exact: true }).fill('{albumartist}/{album}/{track:02}. {title}.{ext}'); + const section = page.getByRole('heading', { name: 'Приём загрузок и шаблон пути' }).locator('..'); + await section.getByRole('checkbox').check(); + await section.getByRole('button', { name: 'Сохранить', exact: true }).click(); + await expect(page.locator('html')).toHaveAttribute('data-saved-template', '{albumartist}/{album}/{track:02}. {title}.{ext}'); + await navigate('/admin/uploads'); + await page.getByRole('button', { name: 'Развернуть пачку', exact: true }).click(); + await expect(page.getByText('nas:/music/Artist/Album/01. Song.flac', { exact: true })).toBeVisible(); + await expect(page.getByText('Artist/Album/Song.flac', { exact: true })).toHaveCount(0); +}); diff --git a/apps/web/src/features/server-management/management.module.css b/apps/web/src/features/server-management/management.module.css index dd13fc8..b497c74 100644 --- a/apps/web/src/features/server-management/management.module.css +++ b/apps/web/src/features/server-management/management.module.css @@ -1,4 +1,4 @@ -.page { max-width: 1050px; margin: 0 auto; display: flex; flex-direction: column; gap: 24px; } +.page { width: 100%; min-width: 0; margin: 0 auto; display: flex; flex-direction: column; gap: 24px; } .header, .cardHead { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 16px; } .header h1 { margin: 6px 0; font-family: var(--font-display); font-size: 30px; } .header p, .note { color: var(--text2); font-size: 13px; line-height: 1.6; margin: 0; } diff --git a/apps/web/src/features/uploads/QueueRows.tsx b/apps/web/src/features/uploads/QueueRows.tsx index 6741102..bc239eb 100644 --- a/apps/web/src/features/uploads/QueueRows.tsx +++ b/apps/web/src/features/uploads/QueueRows.tsx @@ -1,5 +1,6 @@ import { formatBytes, formatDateTime, formatDuration } from '../../shared/lib/format'; -import { editIcon, refreshIcon } from '../../shared/ui/icons'; +import { chevronRightIcon, editIcon, refreshIcon } from '../../shared/ui/icons'; +import { useId, useState } from 'react'; import { needsFormatAttention } from './files'; import { UploadStatusBadge, useReasonText, type UploadFile } from './common'; import { useTranslation } from 'react-i18next'; @@ -24,6 +25,8 @@ export function BatchCard({ onRetry: (id: string) => void; }) { const { t, i18n } = useTranslation('admin'); + const [collapsed, setCollapsed] = useState(true); + const contentId = useId(); const first = files[0]!; const ids = files.map((f) => f.id); const all = ids.every((id) => selected.has(id)); @@ -31,31 +34,36 @@ export function BatchCard({ return (
+ {selectable && ( onToggle(ids, e.target.checked)} /> )} {first.author.username} {formatDateTime(first.created_at, i18n.language)} {t('uploads.batch_size', { count: files.length, size: formatBytes(size, i18n.language) })} - {first.batch_comment && «{first.batch_comment}»} {selectable && ( )} + {first.batch_comment && «{first.batch_comment}»} +
+ - {files.map((f) => ( - onToggle([f.id], on)} - onEdit={() => onEdit(f)} - onRetry={() => onRetry(f.id)} - /> - ))}
); } @@ -155,6 +163,10 @@ function QueueRow({ <> {f.target_rel_path} {t('uploads.target_path_hint')} + {f.target_storage_path && <> + {t('uploads.target_full_path')} + {f.target_storage_path} + } ) : ( <> diff --git a/apps/web/src/pages/admin/PatternsPage.tsx b/apps/web/src/pages/admin/PatternsPage.tsx index 35a1ad9..5efeca5 100644 --- a/apps/web/src/pages/admin/PatternsPage.tsx +++ b/apps/web/src/pages/admin/PatternsPage.tsx @@ -83,7 +83,7 @@ export function PatternsPage({ id }: { id: string }) { }); return ( -
+

{t('patterns.title', { name: source.data?.name ?? '…' })}

diff --git a/apps/web/src/pages/admin/WriteTemplateSection.tsx b/apps/web/src/pages/admin/WriteTemplateSection.tsx index b5c5670..26ed2a5 100644 --- a/apps/web/src/pages/admin/WriteTemplateSection.tsx +++ b/apps/web/src/pages/admin/WriteTemplateSection.tsx @@ -72,6 +72,7 @@ export function WriteTemplateSection({ source }: { source: Source }) { onSuccess: async (src) => { queryClient.setQueryData(['source', id], src); await queryClient.invalidateQueries({ queryKey: ['sources'] }); + await queryClient.invalidateQueries({ queryKey: ['admin-uploads'] }); }, }); diff --git a/apps/web/src/pages/page.module.css b/apps/web/src/pages/page.module.css index b4bd118..7c0dbc4 100644 --- a/apps/web/src/pages/page.module.css +++ b/apps/web/src/pages/page.module.css @@ -1,5 +1,6 @@ .page { - max-width: 1100px; + width: 100%; + min-width: 0; margin: 0 auto; display: flex; flex-direction: column; diff --git a/apps/web/src/pages/uploads/uploads.module.css b/apps/web/src/pages/uploads/uploads.module.css index 66043f2..64c941a 100644 --- a/apps/web/src/pages/uploads/uploads.module.css +++ b/apps/web/src/pages/uploads/uploads.module.css @@ -179,6 +179,9 @@ color: var(--text); } +.batchToggle { min-width: 44px; min-height: 44px; padding: 8px; } +.batchExpanded { transform: rotate(90deg); } + .comment { flex-basis: 100%; color: var(--text); diff --git a/docs/uploads.md b/docs/uploads.md index 58e45bb..cd71aac 100644 --- a/docs/uploads.md +++ b/docs/uploads.md @@ -154,10 +154,14 @@ Экран «Очередь на добавление»: - Группировка по пачке загрузки / по альбому; фильтры: статус, автор, `possible_duplicate`. + Пачки по умолчанию свёрнуты; кнопка в заголовке раскрывает файлы, выбор всей пачки доступен и без раскрытия. - Для каждого файла: прослушивание (стрим из staging), метаданные с возможностью правки, обложка, качество (формат / битрейт / sample rate), флаги (возможный дубль — со ссылкой на похожий трек), **итоговый путь в хранилище** - с названием хранилища и путём относительно его корня. После сохранения метаданных или выбора хранилища - путь пересчитывается сервером. Если рассчитать его нельзя, показаны причина и действие для исправления. + с названием хранилища, путём относительно его корня и полным адресом назначения (локальный путь API + или `server:/export/path` для NFS). Для ожидающих рассмотрения, одобренных и ошибочных импортов + предпросмотр рассчитывается при чтении очереди по текущему шаблону — тем же планировщиком, что и импорт. + Сохранение шаблона обновляет кеш очереди. Уже импортированные файлы сохраняют фактический путь. + Если рассчитать путь нельзя, показаны причина и действие для исправления вместо старого пути. - Действия: одобрить / отклонить (с причиной — видна автору), массовые действия для выбранных, правка «на весь альбом» (исполнитель, альбом, год, обложка одной операцией). - Если админ изменил метаданные — они **записываются в теги файла** при импорте (`ffmpeg -map 0 -c copy -metadata …` diff --git a/packages/api-client/src/generated/schema.ts b/packages/api-client/src/generated/schema.ts index c9ba649..a1a6cb7 100644 --- a/packages/api-client/src/generated/schema.ts +++ b/packages/api-client/src/generated/schema.ts @@ -2318,6 +2318,8 @@ export interface components { target_rel_path: string | null; /** @description Название целевого хранилища; null, если хранилище не выбрано или удалено */ target_source_name?: string | null; + /** @description Полный путь назначения для админской очереди — локальный путь API или server:/export/path для NFS. Для ожидающих файлов рассчитывается по текущему шаблону. */ + target_storage_path?: string | null; status_reason: string | null; /** Format: date-time */ reviewed_at: string | null; diff --git a/packages/i18n/locales/en/admin.json b/packages/i18n/locales/en/admin.json index 1aa6ac2..36229ea 100644 --- a/packages/i18n/locales/en/admin.json +++ b/packages/i18n/locales/en/admin.json @@ -292,6 +292,9 @@ "filter_imported": "Added", "filter_declined": "Not accepted", "filter_withdrawn": "Withdrawn", + "target_full_path": "Full destination path", + "expand_batch": "Expand batch", + "collapse_batch": "Collapse batch", "col_file": "Track", "col_status": "Status", "col_size": "Size", diff --git a/packages/i18n/locales/ru/admin.json b/packages/i18n/locales/ru/admin.json index ec76887..f7d01b6 100644 --- a/packages/i18n/locales/ru/admin.json +++ b/packages/i18n/locales/ru/admin.json @@ -292,6 +292,9 @@ "filter_imported": "Добавлены", "filter_declined": "Не приняты", "filter_withdrawn": "Отозванные", + "target_full_path": "Полный путь назначения", + "expand_batch": "Развернуть пачку", + "collapse_batch": "Свернуть пачку", "col_file": "Трек", "col_status": "Статус", "col_size": "Размер", diff --git a/services/api/internal/api/gen/api.gen.go b/services/api/internal/api/gen/api.gen.go index d7ea4de..a90307f 100644 --- a/services/api/internal/api/gen/api.gen.go +++ b/services/api/internal/api/gen/api.gen.go @@ -1751,6 +1751,9 @@ type UploadFile struct { // TargetSourceName Название целевого хранилища; null, если хранилище не выбрано или удалено TargetSourceName *string `json:"target_source_name"` + // TargetStoragePath Полный путь назначения для админской очереди — локальный путь API или server:/export/path для NFS. Для ожидающих файлов рассчитывается по текущему шаблону. + TargetStoragePath *string `json:"target_storage_path"` + // TusUrl Только автору и пока файл в статусе uploading TusUrl *string `json:"tus_url"` UpdatedAt time.Time `json:"updated_at"` @@ -14463,385 +14466,386 @@ func (sh *strictHandler) GetReadyz(w http.ResponseWriter, r *http.Request) { // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "7s27/18AAAD//zpCzgyQ6AEA", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/services/api/internal/uploads/handler.go b/services/api/internal/uploads/handler.go index b90be33..a6de1a4 100644 --- a/services/api/internal/uploads/handler.go +++ b/services/api/internal/uploads/handler.go @@ -35,8 +35,9 @@ func (h *Handler) fileDTO(ctx context.Context, f File) gen.UploadFile { MetadataEdited: f.MetadataEdited, MatchedArtistId: f.MatchedArtistID, MatchedAlbumId: f.MatchedAlbumID, DuplicateOfTrackId: f.DuplicateOfTrackID, PossibleDuplicate: f.PossibleDuplicate, QualityUpgrade: f.QualityUpgrade, TargetSourceId: f.TargetSourceID, TargetRelPath: f.TargetRelPath, StatusReason: f.StatusReason, - TargetSourceName: f.TargetSourceName, - ReviewedAt: f.ReviewedAt, CreatedAt: f.CreatedAt, UpdatedAt: f.UpdatedAt, + TargetSourceName: f.TargetSourceName, + TargetStoragePath: f.TargetStoragePath, + ReviewedAt: f.ReviewedAt, CreatedAt: f.CreatedAt, UpdatedAt: f.UpdatedAt, } if out.Tags == nil { out.Tags = map[string]string{} diff --git a/services/api/internal/uploads/model.go b/services/api/internal/uploads/model.go index fd789ac..3f9f180 100644 --- a/services/api/internal/uploads/model.go +++ b/services/api/internal/uploads/model.go @@ -141,6 +141,7 @@ type File struct { QualityUpgrade bool TargetSourceID *uuid.UUID TargetSourceName *string + TargetStoragePath *string TargetRelPath *string StatusReason *string ReviewedBy *uuid.UUID diff --git a/services/api/internal/uploads/placement.go b/services/api/internal/uploads/placement.go index d582f7d..0face37 100644 --- a/services/api/internal/uploads/placement.go +++ b/services/api/internal/uploads/placement.go @@ -3,6 +3,8 @@ package uploads import ( "context" "errors" + "path/filepath" + "strings" "github.com/google/uuid" @@ -47,6 +49,41 @@ type placement struct { root string } +// previewPlacement uses the same current configuration as importFile. Finalized +// files keep their recorded destination; reading the queue never changes a decision. +func (s *PlacementPlanner) previewPlacement(ctx context.Context, f *File) { + f.TargetStoragePath = nil + if f.Meta != nil && (f.Status == StatusPendingReview || f.Status == StatusImportFailed || f.Status == StatusApproved) { + pl := s.plan(ctx, *f, *f.Meta, f.TargetSourceID) + f.TargetSourceID, f.TargetRelPath = pl.SourceID, pl.RelPath + f.TargetSourceName = nil + if pl.SourceID != nil { + f.TargetSourceName = &pl.src.Name + } + if f.Status == StatusPendingReview || pl.Reason != "" { + f.StatusReason = nullable(pl.Reason) + } + f.MatchedArtistID, f.MatchedAlbumID = pl.ArtistID, pl.AlbumID + } + if f.TargetSourceID == nil || f.TargetRelPath == nil { + return + } + src, err := s.lib.GetSource(ctx, *f.TargetSourceID) + if err != nil { + return + } + f.TargetSourceName = &src.Name + if src.Type == library.SourceNFS { + if src.NFSServer != nil && src.NFSExport != nil { + full := *src.NFSServer + ":" + strings.TrimRight(*src.NFSExport, "/") + "/" + *f.TargetRelPath + f.TargetStoragePath = &full + } + } else if root, err := s.roots.Root(src); err == nil { + full := filepath.Join(root, filepath.FromSlash(*f.TargetRelPath)) + f.TargetStoragePath = &full + } +} + // pickSource — хранилище: выбранное админом → по умолчанию → единственное принимающее загрузки. func (s *PlacementPlanner) pickSource(ctx context.Context, chosen *uuid.UUID) (library.Source, string) { id := chosen diff --git a/services/api/internal/uploads/placement_test.go b/services/api/internal/uploads/placement_test.go new file mode 100644 index 0000000..385de10 --- /dev/null +++ b/services/api/internal/uploads/placement_test.go @@ -0,0 +1,77 @@ +package uploads + +import ( + "context" + "path/filepath" + "testing" + + "github.com/google/uuid" + "github.com/stretchr/testify/require" + + "pipu/api/internal/library" +) + +type previewCatalog struct{ source library.Source } + +func (c *previewCatalog) GetSource(context.Context, uuid.UUID) (library.Source, error) { + return c.source, nil +} +func (c *previewCatalog) ListSources(context.Context) ([]library.Source, error) { + return []library.Source{c.source}, nil +} +func (c *previewCatalog) Patterns(context.Context, uuid.UUID) ([]library.PatternRow, error) { + return nil, nil +} + +type previewStore struct{} + +func (previewStore) Settings(context.Context) (Settings, error) { return Settings{}, nil } +func (previewStore) MatchCatalog(context.Context, string, string) (*uuid.UUID, *uuid.UUID, int, error) { + return nil, nil, 0, nil +} +func (previewStore) BatchMaxDisc(context.Context, uuid.UUID, string) (int, error) { return 1, nil } + +type previewRoot string + +func (r previewRoot) Root(library.Source) (string, error) { return string(r), nil } + +func TestPreviewUsesCurrentImportTemplate(t *testing.T) { + ctx := context.Background() + root := t.TempDir() + catalog := &previewCatalog{source: library.Source{ID: uuid.New(), Name: "Base", Type: library.SourceLocal, + AcceptsUploads: true, WriteTemplate: nullable("{albumartist}/{album}/{title}.{ext}")}} + planner := &PlacementPlanner{store: previewStore{}, lib: catalog, roots: previewRoot(root)} + track := 3 + f := File{Status: StatusPendingReview, OriginalName: "song.flac", Meta: &Meta{ + Artist: "Artist", AlbumArtist: "Artist", Album: "Album", Title: "Song", Track: &track}, + TargetSourceID: &catalog.source.ID, TargetRelPath: nullable("stale/path.flac"), StatusReason: nullable(CodeNoTarget)} + planner.previewPlacement(ctx, &f) + require.Equal(t, "Artist/Album/Song.flac", *f.TargetRelPath) + require.Equal(t, filepath.Join(root, "Artist", "Album", "Song.flac"), *f.TargetStoragePath) + require.Nil(t, f.StatusReason) + + catalog.source.WriteTemplate = nullable("{albumartist}/{album}/{track:02} - {title}.{ext}") + planner.previewPlacement(ctx, &f) + planned := planner.plan(ctx, f, *f.Meta, f.TargetSourceID) + require.Equal(t, "Artist/Album/03 - Song.flac", *f.TargetRelPath) + require.Equal(t, planned.RelPath, f.TargetRelPath, "preview and import must use the same path") + + catalog.source.Type = library.SourceNFS + catalog.source.NFSServer, catalog.source.NFSExport = nullable("nas"), nullable("/music/") + planner.previewPlacement(ctx, &f) + require.Equal(t, "nas:/music/Artist/Album/03 - Song.flac", *f.TargetStoragePath) + + f.Status = StatusImported + catalog.source.WriteTemplate = nullable("changed/{title}.{ext}") + planner.previewPlacement(ctx, &f) + require.Equal(t, "Artist/Album/03 - Song.flac", *f.TargetRelPath, "imported files retain their actual destination") + + f.Status = StatusPendingReview + catalog.source.WriteTemplate = nil + planner.previewPlacement(ctx, &f) + require.Nil(t, f.TargetRelPath, "invalid configuration must not show the stale path") + require.Nil(t, f.TargetStoragePath) + require.Equal(t, CodeTemplate, *f.StatusReason) + // Reading a preview does not write to the store or change the review status. + require.Equal(t, StatusPendingReview, f.Status) +} diff --git a/services/api/internal/uploads/service.go b/services/api/internal/uploads/service.go index cea6f57..03c2d33 100644 --- a/services/api/internal/uploads/service.go +++ b/services/api/internal/uploads/service.go @@ -268,7 +268,14 @@ func (s *Service) ListAll(ctx context.Context, fl ListFilter) ([]File, string, e if _, err := principal(ctx, auth.PermReviewUploads); err != nil { return nil, "", err } - return s.list(ctx, fl) + files, next, err := s.list(ctx, fl) + if err != nil { + return nil, "", err + } + for i := range files { + s.previewPlacement(ctx, &files[i]) + } + return files, next, nil } func (s *Service) list(ctx context.Context, fl ListFilter) ([]File, string, error) { @@ -339,7 +346,11 @@ func (s *Service) Update(ctx context.Context, id uuid.UUID, in UpdateInput) (Fil if err := s.store.UpdateMetadata(ctx, id, m, edited, pl); err != nil { return File{}, notFound(err) } - return s.store.File(ctx, id) + updated, err := s.store.File(ctx, id) + if err == nil { + s.previewPlacement(ctx, &updated) + } + return updated, err } func normalizeMeta(m Meta) Meta {