fix(uploads): serve private previews through API and show batch cover status
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m30s
ci / ts / ts (packages + web) (push) Canceled after 4m13s
ci / module boundaries / boundaries (push) Successful in 8s
ci / api / api (push) Successful in 56s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m1s
ci / db / db (push) Successful in 1m7s

This commit is contained in:
mrleo1nid committed 2026-10-29 11:34:55 +03:00
1 parent 37e33c656b
commit 7d62531c02
15 files changed
+530 -407

No files matched your search

+3
View File
@@ -2928,6 +2928,9 @@ components:
type: string
nullable: true
description: Название целевого хранилища; null, если хранилище не выбрано или удалено
batch_has_cover:
type: boolean
description: У пачки есть общая обложка для записи в загружаемые треки
target_storage_path:
type: string
nullable: true
+37 -7
View File
@@ -1,5 +1,15 @@
import { expect, test, type Page } from '@playwright/test';
function previewWav() {
const dataSize = 8000 * 2 * 2;
const wav = Buffer.alloc(44 + dataSize);
wav.write('RIFF', 0); wav.writeUInt32LE(36 + dataSize, 4); wav.write('WAVEfmt ', 8);
wav.writeUInt32LE(16, 16); wav.writeUInt16LE(1, 20); wav.writeUInt16LE(1, 22);
wav.writeUInt32LE(8000, 24); wav.writeUInt32LE(16000, 28); wav.writeUInt16LE(2, 32); wav.writeUInt16LE(16, 34);
wav.write('data', 36); wav.writeUInt32LE(dataSize, 40);
return wav;
}
async function setup(page: Page, scenario: 'queue' | 'template' | 'mine') {
await page.addInitScript(() => localStorage.setItem('pipu.locale', 'ru'));
await page.goto('/login');
@@ -11,7 +21,7 @@ async function setup(page: Page, scenario: 'queue' | 'template' | 'mine') {
const modulePath = '/src/test/mobileFixtures.ts';
const { mobileFixtures } = await import(modulePath);
const source = structuredClone(mobileFixtures['/api/v1/admin/sources'].items[0]);
const file = structuredClone(mobileFixtures['/api/v1/admin/uploads'].items[0]);
const file = { ...structuredClone(mobileFixtures['/api/v1/admin/uploads'].items[0]), batch_has_cover: true };
const files = [
{ ...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', stream_url: `/api/v1/admin/uploads/files/${file.id}/stream?exp=9999999999&sig=test` },
{ ...file, id: 'approved', original_name: 'approved.flac', status: 'approved' },
@@ -75,6 +85,7 @@ 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('Есть обложка', { exact: true })).toBeVisible();
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();
@@ -170,12 +181,7 @@ test('queue shows the current full destination after saving a changed source tem
});
test('queue preview loads duration before play and plays signed audio', async ({ page }) => {
const dataSize = 8000 * 2 * 2;
const wav = Buffer.alloc(44 + dataSize);
wav.write('RIFF', 0); wav.writeUInt32LE(36 + dataSize, 4); wav.write('WAVEfmt ', 8);
wav.writeUInt32LE(16, 16); wav.writeUInt16LE(1, 20); wav.writeUInt16LE(1, 22);
wav.writeUInt32LE(8000, 24); wav.writeUInt32LE(16000, 28); wav.writeUInt16LE(2, 32); wav.writeUInt16LE(16, 34);
wav.write('data', 36); wav.writeUInt32LE(dataSize, 40);
const wav = previewWav();
await page.route('**/api/v1/admin/uploads/files/*/stream?*', (route) => route.fulfill({ contentType: 'audio/wav', body: wav }));
await setup(page, 'queue');
await page.getByRole('button', { name: 'Развернуть пачку', exact: true }).click();
@@ -186,3 +192,27 @@ test('queue preview loads duration before play and plays signed audio', async ({
await expect.poll(() => audio.evaluate((el: HTMLAudioElement) => el.currentTime)).toBeGreaterThan(0);
expect(await audio.evaluate((el: HTMLAudioElement) => el.error)).toBeNull();
});
test('queue preview explains HTTP failures and recovers on retry', async ({ page }) => {
let available = false;
// The E2E bridge mocks window.fetch; media diagnostics must reach the same
// intercepted HTTP route as the native audio element.
await page.addInitScript(() => Object.assign(window, { previewNativeFetch: window.fetch.bind(window) }));
await page.route('**/api/v1/admin/uploads/files/*/stream?*', (route) => available
? route.fulfill({ contentType: 'audio/wav', body: previewWav() })
: route.fulfill({ status: 403, contentType: 'text/plain', body: 'Forbidden' }));
await setup(page, 'queue');
await page.evaluate(() => {
const original = window.fetch;
const native = (window as unknown as { previewNativeFetch: typeof fetch }).previewNativeFetch;
window.fetch = (input, init) => new URL(new Request(input, init).url).pathname.endsWith('/stream')
? native(input, init) : original(input, init);
});
await page.getByRole('button', { name: 'Развернуть пачку', exact: true }).click();
const preview = page.locator('audio').first().locator('..');
await expect(preview.getByRole('alert')).toHaveText('Не удалось загрузить аудио: HTTP 403.');
available = true;
await preview.getByRole('button', { name: 'Повторить', exact: true }).click();
await expect.poll(() => preview.locator('audio').evaluate((el: HTMLAudioElement) => el.duration)).toBe(2);
await expect(preview.getByRole('alert')).toHaveCount(0);
});
@@ -0,0 +1,49 @@
import { useQueryClient } from '@tanstack/react-query';
import { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { refreshIcon } from '../../shared/ui/icons';
import { Button } from '../../shared/ui/ui';
import u from '../../pages/uploads/uploads.module.css';
export function AudioPreview({ url, name, active }: { url: string; name: string; active: boolean }) {
const { t } = useTranslation('admin');
const queryClient = useQueryClient();
const audio = useRef<HTMLAudioElement>(null);
const [error, setError] = useState<number | null>(null);
const [httpStatus, setHttpStatus] = useState<number | null>(null);
useEffect(() => { setError(null); setHttpStatus(null); }, [url]);
useEffect(() => {
if (error === null) return;
const controller = new AbortController();
// A media error alone cannot distinguish an HTTP failure from an unsupported codec.
// Probe one byte using the same signed URL, then release the response immediately.
void fetch(url, { headers: { Range: 'bytes=0-0' }, cache: 'no-store', signal: controller.signal })
.then(async (response) => {
await response.body?.cancel();
if (!controller.signal.aborted) setHttpStatus(response.ok ? null : response.status);
})
.catch(() => { /* The native media error remains visible for network failures. */ });
return () => controller.abort();
}, [url, error]);
const retry = () => {
setError(null);
setHttpStatus(null);
void queryClient.invalidateQueries({ queryKey: ['admin-uploads'] });
audio.current?.load();
};
return <div className={u.preview}>
<audio ref={audio} controls preload={active ? 'metadata' : 'none'} src={url}
aria-label={t('uploads.listen', { name })}
onLoadedMetadata={() => { setError(null); setHttpStatus(null); }}
onError={(event) => setError(event.currentTarget.error?.code ?? 0)} />
{error !== null && <div className={u.previewError}>
<span role="alert" className={u.bad}>{httpStatus !== null
? t('uploads.preview_http_error', { status: httpStatus })
: t(error === 3 || error === 4 ? 'uploads.preview_decode_error' : 'uploads.preview_error')}</span>
<Button variant="ghost" icon={refreshIcon} onClick={retry}>{t('uploads.retry')}</Button>
</div>}
</div>;
}
+8 -1
View File
@@ -2,6 +2,7 @@ import { formatBytes, formatDateTime, formatDuration } from '../../shared/lib/fo
import { chevronRightIcon, editIcon, refreshIcon } from '../../shared/ui/icons';
import { useId, useState } from 'react';
import { needsFormatAttention } from './files';
import { AudioPreview } from './AudioPreview';
import { UploadStatusBadge, useReasonText, type UploadFile } from './common';
import { useTranslation } from 'react-i18next';
import { Button, cx, Icon } from '../../shared/ui/ui';
@@ -43,6 +44,9 @@ export function BatchCard({
<b>{first.author.username}</b>
<span>{formatDateTime(first.created_at, i18n.language)}</span>
<span>{t('uploads.batch_size', { count: files.length, size: formatBytes(size, i18n.language) })}</span>
<span className={cx(s.badge, first.batch_has_cover ? u.tone_info : u.tone_muted)}>
{t(first.batch_has_cover ? 'uploads.batch_cover_present' : 'uploads.batch_cover_absent')}
</span>
<span style={{ flex: 1 }} />
{selectable && (
<Button variant="ghost" onClick={() => onEditBatch(first.batch_id)}>
@@ -56,6 +60,7 @@ export function BatchCard({
<QueueRow
key={f.id}
file={f}
active={!collapsed}
selectable={selectable}
checked={selected.has(f.id)}
onCheck={(on) => onToggle([f.id], on)}
@@ -70,6 +75,7 @@ export function BatchCard({
function QueueRow({
file: f,
active,
selectable,
checked,
onCheck,
@@ -77,6 +83,7 @@ function QueueRow({
onRetry,
}: {
file: UploadFile;
active: boolean;
selectable: boolean;
checked: boolean;
onCheck: (on: boolean) => void;
@@ -142,7 +149,7 @@ function QueueRow({
</div>
<div className={u.rowActions}>
{f.stream_url && (
<audio controls preload="metadata" src={f.stream_url} aria-label={t('uploads.listen', { name: f.original_name })} />
<AudioPreview url={f.stream_url} name={f.original_name} active={active} />
)}
{editable && (
<Button variant="ghost" aria-label={t('uploads.edit', { name: f.original_name })} onClick={onEdit}>
@@ -221,6 +221,10 @@
align-items: center;
}
.preview { width: 300px; max-width: 100%; min-width: 0; }
.preview audio { display: block; width: 100%; }
.previewError { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; margin-top: 6px; font-size: 12px; }
.bulk {
position: sticky;
bottom: 12px;
+5
View File
@@ -155,6 +155,7 @@
Экран «Очередь на добавление»:
- Группировка по пачке загрузки / по альбому; фильтры: статус, автор, `possible_duplicate`.
Пачки по умолчанию свёрнуты; кнопка в заголовке раскрывает файлы, выбор всей пачки доступен и без раскрытия.
В заголовке указано наличие общей обложки пачки: «Есть обложка» / «Без обложки».
- Для каждого файла: прослушивание (стрим из staging), метаданные с возможностью правки, обложка, качество
(формат / битрейт / sample rate), флаги (возможный дубль — со ссылкой на похожий трек), **итоговый путь в хранилище**
с названием хранилища и путём относительно его корня. Полный адрес назначения (локальный путь API
@@ -162,6 +163,10 @@
предпросмотр рассчитывается при чтении очереди по текущему шаблону — тем же планировщиком, что и импорт.
Сохранение шаблона обновляет кеш очереди. Уже импортированные файлы сохраняют фактический путь.
Если рассчитать путь нельзя, показаны причина и действие для исправления вместо старого пути.
- Прослушивание staging выдаёт сам API с поддержкой Range: приватные файлы tus (`0640`, каталоги `0750`)
недоступны пользователю nginx. Выдача не зависит от `X_ACCEL`; права существующих файлов менять не нужно.
Метаданные аудио загружаются после раскрытия пачки; при сбое показана ошибка (включая HTTP-статус, если доступен)
и кнопка повторной попытки с обновлением подписанных ссылок.
- Действия: одобрить / отклонить (с причиной — видна автору), массовые действия для выбранных, правка «на весь альбом»
(исполнитель, альбом, год, обложка одной операцией).
- Если админ изменил метаданные — они **записываются в теги файла** при импорте (`ffmpeg -map 0 -c copy -metadata …`
@@ -2318,6 +2318,8 @@ export interface components {
target_rel_path: string | null;
/** @description Название целевого хранилища; null, если хранилище не выбрано или удалено */
target_source_name?: string | null;
/** @description У пачки есть общая обложка для записи в загружаемые треки */
batch_has_cover?: boolean;
/** @description Полный путь назначения для админской очереди — локальный путь API или server:/export/path для NFS. Для ожидающих файлов рассчитывается по текущему шаблону. */
target_storage_path?: string | null;
status_reason: string | null;
+5
View File
@@ -294,6 +294,11 @@
"filter_withdrawn": "Withdrawn",
"expand_batch": "Expand batch",
"collapse_batch": "Collapse batch",
"batch_cover_present": "Cover attached",
"batch_cover_absent": "No cover",
"preview_http_error": "Could not load audio: HTTP {{status}}.",
"preview_decode_error": "The browser could not read the audio: check file access and format support.",
"preview_error": "Could not load audio. Check your connection and retry.",
"col_file": "Track",
"col_status": "Status",
"col_size": "Size",
+5
View File
@@ -294,6 +294,11 @@
"filter_withdrawn": "Отозванные",
"expand_batch": "Развернуть пачку",
"collapse_batch": "Свернуть пачку",
"batch_cover_present": "Есть обложка",
"batch_cover_absent": "Без обложки",
"preview_http_error": "Не удалось загрузить аудио: HTTP {{status}}.",
"preview_decode_error": "Браузер не смог прочитать аудио: проверьте доступ к файлу и поддержку формата.",
"preview_error": "Не удалось загрузить аудио. Проверьте соединение и повторите попытку.",
"col_file": "Трек",
"col_status": "Статус",
"col_size": "Размер",
+1 -1
View File
@@ -187,7 +187,7 @@ func newApp(ctx context.Context, cfg config.API, pool *pgxpool.Pool, rdb *redis.
Wave: wh,
App: appupdate.NewHandler(appupdate.Config{GiteaURL: cfg.GiteaURL, Repo: cfg.GiteaRepo, Token: cfg.GiteaToken,
Dir: cfg.UpdatesDir, MinSupported: cfg.MinAndroidVersionCode}, log),
Uploads: uploads.NewHandler(upSvc, signer, cfg.XAccel),
Uploads: uploads.NewHandler(upSvc, signer),
TUS: uploads.NewTUS(uploads.NewStore(pool), cfg.UploadsDir, upSvc.Complete, log),
}), nil
}
+384 -380
View File
@@ -1709,6 +1709,9 @@ type UploadBatchRequest struct {
type UploadFile struct {
Author UserRef `json:"author"`
BatchComment *string `json:"batch_comment"`
// BatchHasCover У пачки есть общая обложка для записи в загружаемые треки
BatchHasCover *bool `json:"batch_has_cover,omitempty"`
BatchId openapi_types.UUID `json:"batch_id"`
BitDepth *int `json:"bit_depth"`
Bitrate *int `json:"bitrate"`
@@ -14466,386 +14469,387 @@ func (sh *strictHandler) GetReadyz(w http.ResponseWriter, r *http.Request) {
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file
+4 -3
View File
@@ -17,16 +17,17 @@ import (
type Handler struct {
svc *Service
signer *sign.Signer
xAccel bool
}
// NewHandler создаёт обработчик. signer подписывает ссылки прослушивания из staging.
func NewHandler(svc *Service, signer *sign.Signer, xAccel bool) *Handler {
return &Handler{svc: svc, signer: signer, xAccel: xAccel}
func NewHandler(svc *Service, signer *sign.Signer) *Handler {
return &Handler{svc: svc, signer: signer}
}
func (h *Handler) fileDTO(ctx context.Context, f File) gen.UploadFile {
hasCover := f.CoverPath != nil && *f.CoverPath != ""
out := gen.UploadFile{
BatchHasCover: &hasCover,
Id: f.ID, BatchId: f.BatchID, BatchComment: f.BatchComment,
Author: gen.UserRef{Id: f.AuthorID, Username: f.AuthorName},
Status: gen.UploadStatus(f.Status), OriginalName: f.OriginalName, ClientRelPath: f.ClientRelPath,
+3 -11
View File
@@ -4,7 +4,6 @@ import (
"context"
"net/http"
"os"
"path/filepath"
"strconv"
"time"
@@ -15,23 +14,17 @@ import (
"pipu/api/internal/platform/httpx"
)
// uploadStream — отдача файла staging с Range (сам api или X-Accel-Redirect).
// uploadStream serves private staging files through the API with Range support.
// Nginx runs as another user and cannot read tus files (0750 directories, 0640 files).
type uploadStream struct {
req *http.Request
file string
format string
accel string
xAccel bool
}
func (s uploadStream) VisitStreamUploadResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", contentType(s.format))
w.Header().Set("Cache-Control", "private, max-age=600")
if s.xAccel && s.accel != "" {
w.Header().Set("X-Accel-Redirect", s.accel)
w.WriteHeader(http.StatusOK)
return nil
}
f, err := os.Open(s.file)
if err != nil {
return err
@@ -69,8 +62,7 @@ func (h *Handler) StreamUpload(ctx context.Context, req gen.StreamUploadRequestO
format = *f.Format
}
return uploadStream{
req: httpx.RequestFrom(ctx), file: f.Abs, format: format, xAccel: h.xAccel,
accel: "/_internal/uploads/" + filepath.ToSlash(f.StagingPath),
req: httpx.RequestFrom(ctx), file: f.Abs, format: format,
}, nil
}
+6 -4
View File
@@ -17,7 +17,7 @@ import (
"pipu/api/internal/platform/sign"
)
func TestUploadStreamRangeAndAccel(t *testing.T) {
func TestPrivateUploadStreamIsServedByAPIWithRange(t *testing.T) {
file := filepath.Join(t.TempDir(), "audio")
require.NoError(t, os.WriteFile(file, []byte("fLaC0123456789"), 0600))
req := httptest.NewRequest(http.MethodGet, "/audio", nil)
@@ -28,18 +28,20 @@ func TestUploadStreamRangeAndAccel(t *testing.T) {
require.Equal(t, "audio/flac", rec.Header().Get("Content-Type"))
require.Equal(t, "bytes 4-7/14", rec.Header().Get("Content-Range"))
require.Equal(t, "0123", rec.Body.String())
require.Empty(t, rec.Header().Get("X-Accel-Redirect"))
rec = httptest.NewRecorder()
require.NoError(t, (uploadStream{format: "flac", xAccel: true, accel: "/_internal/uploads/batch/file"}).VisitStreamUploadResponse(rec))
require.NoError(t, (uploadStream{req: httptest.NewRequest(http.MethodGet, "/audio", nil), file: file, format: "flac"}).VisitStreamUploadResponse(rec))
require.Equal(t, http.StatusOK, rec.Code)
require.Equal(t, "/_internal/uploads/batch/file", rec.Header().Get("X-Accel-Redirect"))
require.Empty(t, rec.Header().Get("X-Accel-Redirect"))
require.Equal(t, "fLaC0123456789", rec.Body.String())
require.Equal(t, "audio/flac", rec.Header().Get("Content-Type"))
}
func TestUploadStreamRejectsInvalidAndExpiredLinksBeforeReadingStaging(t *testing.T) {
signer, err := sign.New("")
require.NoError(t, err)
h := NewHandler(nil, signer, false)
h := NewHandler(nil, signer)
id := uuid.New()
for _, expired := range []bool{false, true} {
exp := time.Now().Add(time.Hour).Unix()
@@ -23,6 +23,20 @@ import (
type failingReader struct{ err error }
func TestBatchCoverPresenceInFileDTO(t *testing.T) {
h := NewHandler(nil, nil)
for _, tc := range []struct {
path *string
want bool
}{
{nil, false}, {nullable(""), false}, {nullable("covers/album.jpg"), true},
} {
got := h.fileDTO(context.Background(), File{CoverPath: tc.path})
require.NotNil(t, got.BatchHasCover)
require.Equal(t, tc.want, *got.BatchHasCover)
}
}
func (r failingReader) Read([]byte) (int, error) { return 0, r.err }
func TestTusInterruptedWriteCanResume(t *testing.T) {