Implement movie import functionality and enhance media processing
Added new endpoints for matching and importing movies, allowing for automated processing of film files from the inbox. Introduced logic to parse file names into titles and years, and integrated metadata matching to streamline the import process. Updated the MediaOptions to include a configuration for automatic movie creation from recognized files. Enhanced the InboxScanner to attempt movie attachment upon asset registration, improving user experience and efficiency. Updated documentation to reflect these new features and their usage.
This commit is contained in:
@@ -203,6 +203,45 @@ Inbox-сканер — второй `BackgroundService`: замечает нов
|
||||
`MediaAsset` в `Pending` и ставит в очередь. Из inbox файлы попадают в библиотеку как отдельные
|
||||
ассеты; привязка к шоу/сериям — уже действие админа в UI.
|
||||
|
||||
## Разбор фильмов
|
||||
|
||||
Сериал грузится пачкой файлов **в одно шоу** — этим занят ручной разбор `manual/`. У полнометражек
|
||||
наоборот: файл — это отдельное шоу, и вручную заводить сорок штук никто не станет. Отсюда отдельный
|
||||
разбор, у которого три входа и один общий код.
|
||||
|
||||
**Разбор имени** (`MovieNameParser`) даёт название и год. Порядок: сначала отрезается хвост релиза
|
||||
по первому техническому маркеру (rip, кодек, разрешение, `by_...`), и только в остатке ищется год —
|
||||
иначе «Edward Scissorhands by_IVAN@1990» дал бы название с ником релизера, а год из ника сошёл бы
|
||||
за год выпуска. Год в начале имени годом не считается: «2012.2009.BDRip» — это фильм «2012» девятого
|
||||
года. Первое слово маркером не считается («Extended Family» существует), а `web` и `rip` из списка
|
||||
маркеров исключены — «Charlotte's Web» дороже лишнего хвоста. Папка релиза разбирается по имени
|
||||
папки: оно чище, чем `video.mkv` внутри, а файлом берётся самый большой (остальное — сэмплы).
|
||||
|
||||
**Подбор** (`MovieMatcher`) ищет по названию среди полнометражек источника и решает, уверенное ли
|
||||
это совпадение: нормализованное название сошлось дословно, год сошёлся с точностью до года (год
|
||||
проката и год производства расходятся) и такой кандидат ровно один. Правило то же, что у массового
|
||||
обогащения из 6.x, и по той же причине: чужой постер и чужой рейтинг у фильма в эфире хуже, чем их
|
||||
отсутствие. Статусы строки — «совпадение точное», «проверьте», «не найдено», «уже в библиотеке»
|
||||
(по идентификатору источника).
|
||||
|
||||
**Три входа, одно правило:**
|
||||
|
||||
- **Кнопка, файлы из `manual/`.** Таблица разбора: строку правят руками (транслитные имена вроде
|
||||
`Shou.Trumana` источник не находит — впишите название и перезапросите одну строку), затем импорт
|
||||
заводит шоу, применяет метаданные и отправляет файл в очередь.
|
||||
- **Кнопка, файлы с диска.** Имена разбираются **до** загрузки: узнать, что половина строк не
|
||||
распозналась, после заливки десятков гигабайт — слишком поздно. Подтверждённые файлы грузятся
|
||||
по одному, и каждый заводится сразу после своего аплоада.
|
||||
- **Автоматика inbox.** Сканер после регистрации ассета пробует опознать фильм и заводит шоу
|
||||
**только при уверенном совпадении** (`Media__InboxAutoMovies`, по умолчанию включено). Всё
|
||||
неуверенное молча остаётся ассетом без шоу и попадает в ту же таблицу разбора — автоматика
|
||||
обязана молчать там, где таблица показала бы жёлтым.
|
||||
|
||||
Шоу импорт создаёт, а **шоу-контент — никогда**: файл приносит загрузка, и придуманное источником
|
||||
название не должно превращаться в запись библиотеки без файла. Франшизы отдельным шагом не
|
||||
собираются: `FranchiseExternalId` проставляется вместе с метаданными, а коллекции предлагает
|
||||
существующий `CollectionSuggestionBuilder` — там виден состав, и спин-оффы TMDb отсекает человек.
|
||||
|
||||
## Слои и API
|
||||
|
||||
**Application** — порты `IMediaStorage` (резолв путей, запись, удаление, свободное место),
|
||||
@@ -231,6 +270,7 @@ Storage__StaleUploadHours=24
|
||||
Media__FfmpegPath=/usr/bin/ffmpeg
|
||||
Media__FfprobePath=/usr/bin/ffprobe
|
||||
Media__MaxUploadBytes=21474836480
|
||||
Media__InboxAutoMovies=true
|
||||
Scheduler__HorizonDays=7
|
||||
Scheduler__RetentionDays=90
|
||||
Scheduler__TickMinutes=30
|
||||
|
||||
Reference in New Issue
Block a user