задачи: переписана disc-image-releases под проверенное поведение Jellyfin
- BDMV раскладывается каталогом, VIDEO_TS и .iso уходят в review: DVD-каталог Jellyfin распознаёт, но не проигрывает - добавлены «Затрагивает» и критерии приёмки, задача проходит tasks.py ready
This commit is contained in:
@@ -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`.
|
||||
|
||||
Reference in New Issue
Block a user