Схема каталогу
Каталог зберігає один запис фільму на TMDB ID; локальні файли відокремлені від тимчасової робочої області пакета. Один результат пошуку або успішний вибір з кількох кандидатів запускає завантаження повних даних TMDB та збереження каталогу. Неоднозначні, пропущені й помилкові результати не створюють записів.
| Таблиця | Дані |
|---|---|
movies |
TMDB ID (первинний ключ), назви, дата й похідний рік випуску, опис, тривалість, шляхи постера/фону, IMDb ID, рейтинг, голоси, час отримання метаданих UTC і час першого додавання. |
people |
TMDB ID людини (первинний ключ) та ім’я. |
credit_roles |
Actor, Director, Producer, Executive Producer, Co-Producer. |
movie_credits |
Фільм, людина, роль, ім’я персонажа, порядок у списку акторів. |
tmdb_movie_genres |
Спільні TMDB ID та назви жанрів. |
movie_genres |
Унікальні пари фільму і жанру. |
movie_files |
Шляхи локальних файлів, прив’язані до фільму. |
movie_artwork |
Шляхи локальних постерів і фонів та їхній медіатип. |
Поле мови в каталозі відсутнє. Необов’язкові дані, яких немає, записуються як SQL NULL. release_year обчислюється з release_date, тому значення не можуть суперечити одне одному. Рейтинг і голоси відповідають значенням TMDB станом на fetched_at.
added_at фіксує перше додавання й сортує нещодавні записи; оновлення метаданих його не змінює. Для наявних рядків початкове значення встановлюється з fetched_at.
Люди спільні для фільмів і ролей. Та сама людина може бути актором, режисером і продюсером одного фільму; різні персонажі зберігаються як окремі титри. Позиції ідентифікують записи в межах фільму, а billing_order зберігає порядок акторів TMDB. Повні дублікати титрів згортаються перед збереженням.
Шляхи файлів мають ключ SHA-256, що підтримує довгі шляхи з урахуванням регістру без обрізаного унікального індексу. Повторна обробка того самого шляху оновлює зв’язок із фільмом; різні шляхи можуть належати одному фільму. Зв’язки не залежать від робочої області та зберігаються після її очищення. movie_files.path — остаточний шлях відео; movies.poster_path і movies.backdrop_path — віддалені шляхи TMDB; movie_artwork.path — завантажені локальні файли.
Каталог призначення береться з пакета, без додаткового кореня чи компонента movies. Під ним з’являється Title (Year) і файл Title (Year).ext за правилами іменування. Назва й рік — із вибраного фільму TMDB. Якщо дата випуску відсутня, потрібне втручання, а не вигаданий рік. Зображення мають назви на кшталт poster-<TMDB-image-name>.jpg та backdrop-<TMDB-image-name>.jpg.
Джерело й призначення повинні бути на одній файловій системі. Підготовка переміщення створює жорсткі посилання без копіювання або хешування відео. Початкове ім’я видаляється лише після фіксації транзакції каталогу. Шлях робочої області змінюється на шлях призначення в тій самій транзакції. Окрема контрольна точка завершення дозволяє повторити операцію після фіксації чи видалення джерела без повторного завантаження метаданих. Приховане посилання .r3el-<file-id>.video позначає перервану підготовку й видаляється після переміщення. Файл .tmdb-id указує, якому фільму належить папка. Чужі файли чи конфліктні TMDB ID спричиняють видиму помилку і ніколи не перезаписуються. Невдалі завантаження й записи до БД зберігають джерело; тимчасові посилання й зображення можуть залишатися для повтору.
Службовий обліковий запис потребує прав читання й запису для файлу джерела та обох батьківських каталогів. Сервіс Control має ProtectSystem=full: вибрані каталоги даних доступні для запису, системні — лише для читання.
Транзакція збереження оновлює фільм, людей, жанри, титри, зв’язок файлу, контрольну точку та подію. Помилка відкочує всі зміни. Оновлення фільму замінює його зв’язки жанрів і титрів, але зберігає інші файлові посилання.
Завершені збіги робочої області мають контрольну точку каталогу й не завантажують метадані знову при повторній обробці. Раніше розв’язані збіги без точки зберігаються під час наступної обробки. Помилка метаданих залишає вибраний збіг, відображає проблему й дозволяє повтор без нового пошуку.
scripts/install-services.sh застосовує r3el.activity.CatalogueSchema під час встановлення й оновлення. Створення схеми ідемпотентне та запускається явно, а не при відкритті підключення. Оновлення зберігає попередні записи; автоматичного історичного заповнення немає.
Ієрархія серіалів
Телевізійний імпорт використовує tv_series, tv_seasons, tv_episodes, tv_episode_files, а також tv_artwork, tv_series_genres, tmdb_tv_genres, tv_series_credits і tv_episode_credits. Таблиці people і credit_roles спільні з фільмами.
Номер сезону унікальний для серіалу, номер епізоду — для сезону. Сезон 0 позначає спеціальні випуски. Ключі шляхів епізодів також SHA-256. Контрольні точки каталогу й імпорту вкладень фіксуються однією транзакцією до видалення джерела. Дивіться імпорт серіалів.
Елементи робочої області мають media_type; вкладення — season_number, episode_number та import_result. Пакет зберігає tv_destination_directory як сусідню папку tv до призначення фільмів. Збіг серіалу має маркер episodes_mapped, що фіксується з призначеннями епізодів після окремого діалогу. Сама ідентифікація серіалу цей маркер не встановлює.