diff --git a/tasks/BACKLOG.md b/tasks/BACKLOG.md index 64b09ed..944dd41 100644 --- a/tasks/BACKLOG.md +++ b/tasks/BACKLOG.md @@ -16,7 +16,7 @@ - [🔬 Форма ответа поиска TheTVDB и семантика параметра language](items/tvdb-search-response-live-check.md) — форма ответа поиска TheTVDB принята по swagger 4.7.10 и живым прогоном не подтверждена — при иной форме разбор молча уходит в фолбэк, гейт зелёный, локализованное название не работает - [✨ Узаконить confidence-гейт авто-раскладки в спеке и сделать его выключаемым (дефолт 0.7)](items/auto-link-confidence-gate.md) — Решено (B): гейт оставляем как доп. проверку на ревью — выключаемый порог, дефолт 0.85→0.7, записать в спеку - [✨ Пересчитывать абсолютную нумерацию аниме в SxxEyy](items/anime-absolute-numbering.md) — аниме со сквозной нумерацией (#137) не раскладывается в SxxEyy, который ждёт Jellyfin — нужен пересчёт абсолютной нумерации -- [✨ Раскладывать раздачу-копию диска (VIDEO_TS/BDMV) каталогом целиком](items/disc-image-releases.md) — раздача-образ диска (VIDEO_TS/BDMV) сейчас разбирается пофайлово вместо раскладки каталога целиком — редкий, но реальный случай +- [✨ Раскладывать раздачу-копию Blu-ray (BDMV) каталогом целиком](items/disc-image-releases.md) — раздача-образ Blu-ray разбирается пофайлово и едет в библиотеку россыпью .m2ts, а Jellyfin умеет такой каталог целиком - [✨ Принимать ссылку на .torrent и скачивать файл самим (нужен SSRF-гард)](items/torrent-url-fetch.md) — magnet и .torrent-файл приняты; остался фетч .torrent по URL (нужен SSRF-гард) - [✨ Докладывать недостающие эпизоды merge-раскладкой при повторной заливке](items/merge-incremental-redownload.md) — повторная заливка сериала целиком должна доложить недостающие эпизоды merge-раскладкой, не трогая существующие ссылки — блокирует типовой сценарий свежих сериалов - [✨ Слать живые обновления через SSE вместо htmx-поллинга](items/sse-live-updates.md) — живые обновления на htmx-поллинге дают задержку и холостые запросы — SSE убрал бы то и другое (поллинг работает, поэтому улучшение, не блокер) diff --git a/tasks/items/disc-image-releases.md b/tasks/items/disc-image-releases.md index e25b3f8..f949742 100644 --- a/tasks/items/disc-image-releases.md +++ b/tasks/items/disc-image-releases.md @@ -1,10 +1,73 @@ -# ✨ Раскладывать раздачу-копию диска (VIDEO_TS/BDMV) каталогом целиком +# ✨ Раскладывать раздачу-копию Blu-ray (BDMV) каталогом целиком - **Тип:** feature - **Категория:** Ядро продукта -- **Зачем:** раздача-образ диска (VIDEO_TS/BDMV) сейчас разбирается пофайлово вместо раскладки каталога целиком — редкий, но реальный случай +- **Зачем:** раздача-образ Blu-ray разбирается пофайлово и едет в библиотеку россыпью .m2ts, а Jellyfin умеет такой каталог целиком - **Теги:** goal:complex-releases -Иногда для очень редких фильмов скачивается не один видеофайл, а полная копия диска — структура VIDEO_TS/ (DVD) или BDMV/ (BluRay). Сейчас распознавание и раскладка заточены под пофайловый разбор, а тут «фильм» — это каталог целиком. Jellyfin такие раскладки поддерживает (папка фильма с вложенным VIDEO_TS/BDMV). Нужно: распознать, что раздача — образ диска (по наличию VIDEO_TS/BDMV), не разбирать её по отдельным VOB/m2ts как серии, разложить весь каталог хардлинками в папку фильма (Название (Год)/VIDEO_TS/…). Крайний, но реальный случай; частота низкая. +Иногда для очень редкого фильма качается не один видеофайл, а полная копия +диска — каталог `BDMV/` (Blu-ray) или `VIDEO_TS/` (DVD). Раскладка сегодня +сопоставляет источник цели пофайлово, поэтому такая раздача едет в библиотеку +россыпью: каждый `.m2ts` из `BDMV/STREAM/` претендует на отдельный фильм или +серию. Станет наблюдаемо иначе: раздача с `BDMV/` в корне попадает в библиотеку +одним элементом и играется, а раздача с `VIDEO_TS/` или единственным `.iso` +уходит в ревью с названной причиной, а не раскладывается вслепую. -Связано: specs/recognition.md (роли файлов), specs/jellyfin-layout.md (раскладка фильма), пакеты recognize, layout. +Что выяснено про Jellyfin (проверено 2026-08-10 по документации, исходникам +резолвера и трекеру; развёрнута версия 10.11): + +- **BDMV работает.** Сканер распознаёт папку с вложенным `BDMV` как один элемент + (`MovieResolver` → `VideoType.BluRay`), прямое воспроизведение идёт. Каталог + `BDMV` обязан быть **непосредственным ребёнком** папки фильма — то есть форма + `Название (Год) [tmdbid-…]/BDMV/…`, которую мы и печатаем сейчас. +- **VIDEO_TS не играет.** Элемент в библиотеке появляется, воспроизведение + падает или виснет много лет подряд (баг в `DvdLib`); заведённые о нём задачи + закрыты как устаревшие, в заметках 10.10 и 10.11 починки нет. Поэтому DVD + раскладывать не будем: элемент, который не запускается, хуже честного ревью. +- **ISO вне поддержки** по прямому заявлению документации Jellyfin. +- Ограничения, действующие и на рабочий BDMV: несколько версий, разбиение на + части и внешние дорожки с субтитрами в дисковом каталоге не поддерживаются, а + извлечение картиночных субтитров на лету из него сломано. + +## Затрагивает + +- `layout.Plan` и `layout.PlanFile` — публичные типы пакета: план сегодня это + перечень файлов с ролями, дерево каталога-образа им не выражается; +- `layout.Role` и `layout.Kind` — роль файла образа и вид целевой ссылки; +- таблица `file_link` и её миграция — если для образа заводится свой вид ссылки; +- построение целевого пути в `layout` — имя цели для файла образа задаётся его + относительным путём внутри `BDMV/`, а не печатается из названия и года; +- требование «Сопоставление источник → цель хардлинками» спеки `file-layout` — + оно сейчас говорит «для каждого распознанного файла (не каталога)»; +- требование «Роли файлов на краях раздачи» спеки `recognition` — `.m2ts` внутри + `BDMV/` не серии и не мусор; +- переход в `review` с новой причиной (`spec recognition`) — для `VIDEO_TS` и + `.iso`; +- промпт распознавания, если признак образа снимается до обращения к LLM. + +## Критерии приёмки + +- раздача с каталогом `BDMV` в корне раскладывается зеркалом дерева: каждый файл + под `BDMV/` получает хардлинк, а сам `BDMV` оказывается непосредственным + ребёнком папки фильма — оракул: тест раскладки на фикстуре дерева раздачи; +- ни один `.m2ts` из `BDMV/STREAM/` не попадает в план отдельным фильмом или + серией — оракул: тест построения плана; +- раздача с каталогом `VIDEO_TS` в корне и раздача, где весь видеоматериал это + `.iso`, уходят в `review` с причиной, называющей формат — оракул: тест + перехода состояния плюс текст причины в карточке; +- каждая цель дерева проходит существующую проверку «строго под библиотекой» — + оракул: тест на раздачу, где относительное имя файла содержит `..`. + +Двигает «Завершение» цели в части «образ диска раскладывается без ручного +вмешательства либо честно уходит в ревью с названной причиной». + +## Рамки + +Исходная раздача не трогается — только чтение и `link(2)`. Ремукс, распаковка +`.iso` и любое перекодирование в задачу не входят. Воспроизведение проверяется +человеком вручную на umbar: гейт против живого Jellyfin не ходит. Поддержка +внешних субтитров к дисковому каталогу не делается — её нет у самого Jellyfin. + +Связано: `openspec/specs/recognition/spec.md` (роли файлов, переход в ревью), +`openspec/specs/file-layout/spec.md` (целевые имена фильма, сопоставление +хардлинками), пакеты `recognize`, `layout`.