Слияние: режиссёр в карточке загрузки (T2)
# Conflicts: # docs/backlog/README.md
This commit is contained in:
@@ -256,15 +256,17 @@ NOT проваливать команду ревью. Это согласует
|
||||
|
||||
В едином блоке выбора источника экран ревью SHALL показывать для **выбранного
|
||||
(активного)** источника две части: **инфо** — тип (read-only, movie/series),
|
||||
название, оригинальное название, год, режиссёра (из подтверждённого матча/
|
||||
кандидата, когда доступен; иначе пусто/прочерк, не ломая вёрстку), для сериала —
|
||||
сводку сезонов (один сезон, диапазон/список для многосезонного пака или
|
||||
«Спецвыпуски»); и **предпросмотр раскладки** — целевые пути хардлинков этого
|
||||
источника. Обе части SHALL относиться именно к активному источнику и SHALL
|
||||
обновляться при смене выбора. Отрисовка блока (показ инфо и предпросмотра) MUST
|
||||
NOT создавать хардлинки: раскладка создаётся только явным действием «Применить».
|
||||
Совпадение целевых путей предпросмотра с результатом применения регулируется
|
||||
требованием «Превью раскладки через единую логику именования» (`web-ui`).
|
||||
название, оригинальное название, год, режиссёра эффективного источника,
|
||||
разрешённого слоями (`override`/подтверждённый матч+кандидат → сохранённый при
|
||||
приёме контекст раздачи, `parsed_context`; когда режиссёр недоступен ни в одном
|
||||
слое — пусто/прочерк, не ломая вёрстку), для сериала — сводку сезонов (один
|
||||
сезон, диапазон/список для многосезонного пака или «Спецвыпуски»); и
|
||||
**предпросмотр раскладки** — целевые пути хардлинков этого источника. Обе части
|
||||
SHALL относиться именно к активному источнику и SHALL обновляться при смене
|
||||
выбора. Отрисовка блока (показ инфо и предпросмотра) MUST NOT создавать
|
||||
хардлинки: раскладка создаётся только явным действием «Применить». Совпадение
|
||||
целевых путей предпросмотра с результатом применения регулируется требованием
|
||||
«Превью раскладки через единую логику именования» (`web-ui`).
|
||||
|
||||
#### Scenario: Инфо и предпросмотр относятся к активному источнику
|
||||
|
||||
@@ -286,8 +288,15 @@ NOT создавать хардлинки: раскладка создаётся
|
||||
- **GIVEN** активный источник — подтверждённый матч, несущий режиссёра
|
||||
- **WHEN** отображается инфо-часть выбранного источника
|
||||
- **THEN** в ней показан режиссёр этого источника
|
||||
- **AND** при отсутствии режиссёра место остаётся пустым (или прочерком), не
|
||||
ломая вёрстку
|
||||
- **AND** при отсутствии режиссёра во всех слоях место остаётся пустым (или
|
||||
прочерком), не ломая вёрстку
|
||||
|
||||
#### Scenario: Режиссёр берётся из контекста, когда матч его не даёт
|
||||
|
||||
- **GIVEN** активный источник без режиссёра в плане, но с режиссёром в
|
||||
сохранённом контексте (`parsed_context`)
|
||||
- **WHEN** отображается инфо-часть выбранного источника
|
||||
- **THEN** в ней показан режиссёр из контекста (нижний слой разрешения)
|
||||
|
||||
### Requirement: Разделение труда транспортов в ревью
|
||||
|
||||
|
||||
@@ -511,7 +511,6 @@ htmx-поллингом (см. конвенцию веб-UI): по перехо
|
||||
(бейдж, имя, живой прогресс)
|
||||
- **AND** поллинг фазы `catched` завершается
|
||||
|
||||
|
||||
### Requirement: Загрузка .torrent-файла на форме добавления
|
||||
|
||||
Форма добавления загрузки веб-UI SHALL позволять выбрать локальный
|
||||
@@ -541,3 +540,41 @@ htmx-путь (список обновляется/происходит реди
|
||||
- **GIVEN** пользователь оставил файловое поле пустым и ввёл magnet/текст
|
||||
- **WHEN** форма отправлена
|
||||
- **THEN** выполняется приём по тексту источника, как прежде
|
||||
|
||||
### Requirement: Режиссёр в блоке распознавания страницы загрузки
|
||||
|
||||
Страница просмотра `/download/{id}` в блоке «Распознано как» SHALL показывать
|
||||
режиссёра эффективного источника, разрешённого теми же слоями, что и
|
||||
отображаемое имя раздачи (`display_name`): первый непустой слой `override` →
|
||||
`recognition`+матч → сохранённый при приёме контекст (`parsed_context`).
|
||||
Разрешение режиссёра для поля блока и для отображаемого имени SHALL идти **единой
|
||||
логикой** (общий источник разрешения), а не расходящимися путями — прежняя
|
||||
захардкоженная в поле заглушка-прочерк при непустом режиссёре в заголовке
|
||||
устраняется. Показанное значение SHALL проходить ту же очистку (санитайзинг
|
||||
управляющих символов/пробелов), что и режиссёр внутри отображаемого имени, чтобы
|
||||
присутствие/отсутствие режиссёра в поле и в заголовке определялось одинаково.
|
||||
Когда режиссёр недоступен ни в одном слое, поле SHALL показывать прочерк, не
|
||||
ломая вёрстку.
|
||||
|
||||
#### Scenario: Режиссёр из распознавания показан в блоке
|
||||
|
||||
- **GIVEN** загрузка, чей эффективный план несёт режиссёра (из матча метабазы или
|
||||
закреплённого источника)
|
||||
- **WHEN** клиент открывает `GET /download/{id}`
|
||||
- **THEN** в блоке «Распознано как» в поле «Режиссёр» показан этот режиссёр
|
||||
|
||||
#### Scenario: Режиссёр из контекста при распознавании без матча
|
||||
|
||||
- **GIVEN** загрузка без режиссёра в плане, но с режиссёром в сохранённом
|
||||
контексте (`parsed_context`)
|
||||
- **WHEN** клиент открывает `GET /download/{id}`
|
||||
- **THEN** в поле «Режиссёр» показан режиссёр из контекста
|
||||
- **AND** он разрешён тем же нижним слоем контекста, что и режиссёр в
|
||||
отображаемом имени раздачи (единая логика, не расходящиеся пути)
|
||||
|
||||
#### Scenario: Режиссёр неизвестен — прочерк
|
||||
|
||||
- **GIVEN** загрузка, для которой режиссёр не разрешается ни одним слоем
|
||||
- **WHEN** клиент открывает `GET /download/{id}`
|
||||
- **THEN** поле «Режиссёр» показывает прочерк, а вёрстка блока не ломается
|
||||
|
||||
|
||||
Reference in New Issue
Block a user