diff --git a/family/how-to/lampac-torrents.md b/family/how-to/lampac-torrents.md new file mode 100644 index 00000000..c461360d --- /dev/null +++ b/family/how-to/lampac-torrents.md @@ -0,0 +1,152 @@ +# Torrents в Lampa — как оно работает и как чинить + +**Обновлено:** 2026-09-22 +**Связано:** [[personal/tech/lampac-torrserver]], [[personal/tech/lampac-deployment]], [[family/how-to/tv-lampac-plugin]] +**Статус:** ✅ работает. Приёмка Alex: «Во! теперь появились торренты. запустил F1..» + +--- + +## TL;DR + +``` +Пункт «Торренты» пуст / 500 / 503 +→ проверь PidTor.redapi = http://jac.red (НЕ локальный!) +→ очисти cache/fdb/ +→ docker restart lampac +``` + +**Одна причина большинства поломок:** `redapi` указывает на локальный JacRed, который отдаёт формат **без поля `info`** → PidTor падает → 500/503. + +--- + +## Архитектура + +``` +Lampa (ТВ) → «Торренты» → PidTor (модуль lampac) + ↓ redapi + jac.red (ВНЕШНИЙ, 144.31.3.10) + ↓ MagnetUri + info{} + TorrServer (встроен в lampac, порт 9085 внутр.) + ↓ + качает на HDD Кра́кена +``` + +🔴 **Поиск раздач идёт на ВНЕШНИЙ `jac.red`.** TorrServer только качает. Локальный JacRed есть, но **несовместим по формату**. + +### Что нужно в `config-module/init.conf` + +```json +"PidTor": { + "enable": true, + "redapi": "http://jac.red", + "min_sid": 15 +} +``` + +⚠️ Файл именно `config-module/init.conf`. Правки в `config/init.conf` **не применяются и не дают ошибки** — просто ничего не меняется. + +--- + +## Диагностика по коду ответа + +| Код | Время | Значение | Что делать | +|---|---|---|---| +| **503** | 0.001–0.002s + `X-Invoke-Cache: HIT` | Ответ **из кэша**. Реальная причина скрыта | Очистить `cache/fdb/` | +| **500** | 0.1–1s | Честная ошибка. Обычно NPE на `info` | Смотреть `redapi` | +| **200** | — | Работает | — | + +🔴 **503 = кэш, 500 = реальная ошибка.** Кэш `extend: 2700` = 45 минут, переживает `docker restart` (лежит на диске в `cache/fdb/`). Заголовок `X-Invoke-Cache: HIT` + время ~0.0015s — верный признак. + +--- + +## 🔴 Главная ловушка: два разных JacRed + +``` +ВНЕШНИЙ jac.red — поля ответа: + [..., 'ffprobe', 'info', 'languages'] ← info ЕСТЬ + info = {"quality":480, "voices":["Дубляж"], + "sizeName":"2.02 GB", "relasted":2025} + +ЛОКАЛЬНЫЙ JacRed (127.0.0.1:9118) — поля ответа: + ['Category','Details','MagnetUri','Peers','PublishDate', + 'Seeders','Size','Title','Tracker'] + ↑ info НЕТ → NPE +``` + +**PidTor падает здесь** (`PidTor/Controller.cs:97`): + +```csharp +string mediainfo = torrent.info.sizeName ?? string.Empty; +// ^^^^^^^^^^^^^^ info == null → NullReferenceException → HTTP 500 +``` + +Локальный JacRed **быстрее** (0.12s против 0.35s), поэтому соблазн переключить есть. **Не переключать.** Скорость не стоит поломки. + +--- + +## Проверка работоспособности + +### 1. PidTor по фильму (то, чем ходит клиент) + +``` +эндпоинт: http://192.168.1.14:9118/lite/pidtor?title=<Название>&year=<Год> +ожидаем: HTTP 200, непустой ответ +``` + +Проверять **тем же набором параметров**, что посылает клиент — ключ кэша включает `title:original_title:year:language:serial`. `F1` без года → 200, с годом → другой ключ. + +### 2. Прямой источник (JacRed) + +``` +{PidTor.redapi}/api/v2.0/indexers/all/results?title=<Название>&year=<Год> +``` + +⚠️ Именно маршрут `/api/v2.0/indexers/all/results` — **тот, которым ходит PidTor**. `/api/v1.0/torrents` тоже работает, но это другой эндпоинт; проверка через него ничего не доказывает. + +### 3. Список раздач TorrServer + +```bash +curl -s -X POST http://127.0.0.1:9118/ts/torrents \ + -H 'Content-Type: application/json' -d '{"action":"list"}' +``` + +🔴 **Только такой вызов.** `-d '[]'`, `-d '{}'`, без тела → **400**. `GET /ts/torrents` → **404**. Порт 9085 снаружи недоступен, только `/ts/` через 9118. + +### 4. Приёмка + +**Запустить фильм в плеере.** «API отвечает 200» ≠ «работает». Приёмка только в UI. + +--- + +## Питфоллы + +1. 🔴 **503 — это кэш, а не ошибка.** Сначала очистить `cache/fdb/`, потом делать выводы. Иначе час diagnostic по закэшированному отказу. +2. 🔴 **`enabled: false` у всех 86 модулей — это НОРМА.** Служебное поле (расписание). Смотреть только `enable`. +3. 🔴 **Лог lampac не показывает исключения** PidTor — `docker logs` пуст. Читать исходник (`Controller.cs`, `Model.cs`). +4. 🔴 **`docker exec lampac python3` не работает** — python3 нет в образе. Парсить конфиги скриптом снаружи через `docker cp`. +5. 🔴 **Конфиг — в `config-module/init.conf`**, не в `config/init.conf`. +6. 🔴 **Кириллица в inline-ssh командах → BLOCKED** (tirith `confusable_text`). Только скриптом-файлом. +7. 🔴 **Порт 9085 наружу закрыт** — работать через `/ts/` на 9118. + +--- + +## Урок + +Единственная причина поломки — **поменял рабочий параметр по соображению «локальный быстрее», не проверив формат ответа**. + +Правильный порядок при подозрении на внешнюю зависимость: + +``` +1. Сравнить ФОРМАТ ответа (набор полей JSON), не только код и время +2. Отсутствие поля = потенциальный NPE в потребителе +3. Только потом менять источник +``` + +Дешевле сравнить два JSON, чем ломать модуль и разбирать час. + +--- + +## Связанные + +- [[personal/tech/lampac-torrserver]] — детальная диагностика, маршруты `/ts/` +- [[personal/tech/lampac-deployment]] — деплой, плагин каталога diff --git a/personal/plans/watchlist-tmdb-missing-marker.md b/personal/plans/watchlist-tmdb-missing-marker.md index aae980a2..ee22a9a9 100644 --- a/personal/plans/watchlist-tmdb-missing-marker.md +++ b/personal/plans/watchlist-tmdb-missing-marker.md @@ -11,7 +11,10 @@ стороны), `watchlist-sync` **`396acc3`**. **Открытые задачи (в работе / ждут Alex)** → [[#🔜 Открытые задачи (2026-09-22, вечер)]] ⚠️ Единственная незакрытая: **категории в ленте прыгают при перезагрузке** (п. 3) -⚠️ TorrServer/PidTor — **починен** ([[personal/plans/lampac-pidtor-503-fix]]) +✅ TorrServer/PidTor — **починен И ПРИНЯТ В UI** ([[personal/plans/lampac-pidtor-503-fix]]): +Alex запустил F1 в плеере, торренты появились. +✅ Год «Волшебный участок: Фильм» — **разобран, не баг**: фильм `In Production`, +`release_date` пуст у самого TMDB. Оставлено `null` осознанно. **Связано:** [[personal/plans/lampac-watchlist-plugin]], [[personal/plans/lampac-disable-1xbet-ads]], [[personal/plans/lampac-pidtor-503-fix]], [[family/projects/watchlist-automation]], [[family/projects/watchlist-sync]], [[personal/tech/lampac-deployment]], [[personal/tech/lampac-torrserver]] --- @@ -192,12 +195,26 @@ Alex: *«там только пункт "смотреть онлайн" рабо его JacRed отдаёт формат БЕЗ поля info → PidTor/Controller.cs:97 torrent.info.sizeName → NPE → 500 → кэш 503 ФИКС → redapi возвращён на http://jac.red. Все 6 тестовых фильмов → HTTP 200 ✅ +ПРИЁМКА → ✅ Alex в UI: «Во! теперь появились торренты. запустил F1..» ``` 🔴 **Alex гасить онлайн ЗАПРЕТИЛ:** *«Я БЛЯДЬ НЕ ПРОСИЛ ГАСИТЬ ОНЛАЙН, ЕБЛАН! Я СКАЗАЛ ЧИНИТЬ torrserver!»* — задача была диагностировать TorrServer. `online: false` НЕ добавлялся. +**Закрыто по этому пункту:** + +``` +· min_sid: мой 3 убран → стоковое 15 +· кэш cache/fdb/ очищен (бэкап /tmp/fdb-backup-20260922-191929) +· конфиг: init.conf.bak-pidtor-20260922-191505 +· тестовая раздача probe — ушла сама при рестарте (раздачи живут в памяти) +· рабочий вызов списка раздач: + curl -X POST http://127.0.0.1:9118/ts/torrents \ + -H 'Content-Type: application/json' -d '{"action":"list"}' + ([[personal/tech/lampac-torrserver]]) +``` + Разборы: [[personal/plans/lampac-pidtor-503-fix]] (причина + фикс), [[personal/tech/lampac-torrserver]] (устройство цепочки), [[personal/plans/lampac-disable-1xbet-ads]] (выключатель рекламы, если Alex @@ -205,6 +222,13 @@ Alex: *«там только пункт "смотреть онлайн" рабо ### 5. Мелочи +- 🔴 **«Волшебный участок: Фильм» — `year: null`. РАЗОБРАНО, НЕ БАГ (2026-09-22).** + Единственная позиция из 376 без года. Причина: TMDB ID `1272100`, + `status='In Production'`, `release_date=''` — **года не существует**, + фильм не вышел. Постера тоже нет (`poster=False`). Решение — **оставить `null`**: + выдуманный год хуже пустоты; когда выйдет — TMDB отдаст дату, генератор подхватит. + КП как fallback не подходит: `search-by-keyword` отдаёт **400 Bad Request**. + Полный разбор: [[personal/tech/lampac-torrserver#🔴 «Волшебный участок: Фильм» — `year: null`. НЕ БАГ, данных нет в источнике]] - `Астрал. Могильный ритуал 2` — маркер `🗓️` не снимается автоматически, позиция названа по-старому имени; резолв идёт по `kp_id` (работает), но снятие маркера `🗓️` — работа `resolve --recheck` в nightly, не генератора. diff --git a/personal/tech/lampac-deployment.md b/personal/tech/lampac-deployment.md index a70c8da7..77a2d8c2 100644 --- a/personal/tech/lampac-deployment.md +++ b/personal/tech/lampac-deployment.md @@ -646,13 +646,21 @@ FlixCDN · Gencit · HDVB · Kinobase · Kinogo · Kinoteatrkg · Kinotochka · LeProduction · Mirage · Phantom · PizdatoeHD · RuDub · RutubeMovie · Spectre · VeoVeo · Vibix · VideoDB · Videoseed · VkMovie · Zetflix · ZetflixDB` -### Почему «Торренты» пусто — ✅ РАЗОБРАНО ПОЛНОСТЬЮ (2026-09-22) +### Почему «Торренты» пусто — ✅ РАЗОБРАНО ПОЛНОСТЬЮ И ПОЧИНЕНО (2026-09-22) -**Вывод: TorrServer и вся торрент-цепочка ИСПРАВНЫ. Чинить нечего.** +**Вывод: причина — `redapi`, а не TorrServer. ИСПРАВЛЕНО, ПРИНЯТО В UI.** + +``` +ПРИЧИНА → PidTor.redapi указывал на ЛОКАЛЬНЫЙ JacRed lampac, + который отдаёт формат БЕЗ поля info + → PidTor/Controller.cs:97 torrent.info.sizeName → NPE → 500 → кэш 503 +ФИКС → redapi возвращён на http://jac.red (отдаёт полный формат) +ПРИЁМКА → ✅ Alex в UI: «Во! теперь появились торренты. запустил F1..» +``` Первая версия объяснения («нет раздач — нет сидов») была **неполной**. Полная диагностика ниже доказала, что раздачи находятся. Отдельный док: -[[personal/tech/lampac-torrserver]]. +[[personal/tech/lampac-torrserver]], разбор фикса: [[personal/plans/lampac-pidtor-503-fix]]. #### TorrServer жив и качает @@ -701,12 +709,27 @@ http://127.0.0.1:9118/ts/download/ -> скачивание 🔴 **Метод запроса ВАЖЕН — и `400` вместо `404` = маршрут существует:** ``` -POST /ts/torrents с телом [] -> [] ✅ список раздач -POST /ts/torrents с телом {} -> 400 (неверный формат тела) -GET /ts/torrents -> 404 (метода нет) -GET /ts/settings -> 403 (нужна авторизация ts:tspass) +POST /ts/torrents -d '{"action":"list"}' -> 200, [] ✅ ТОЛЬКО ТАК +POST /ts/torrents с телом [] -> 400 +POST /ts/torrents без тела -> 400 +POST /ts/torrents с телом {} -> 400 +GET /ts/torrents -> 404 (метода нет) +GET /ts/torrents/list -> 404 +GET /ts/settings -> 403 (нужна авторизация ts:tspass) ``` +🔴 **Исправлено 2026-09-22:** ранняя запись говорила, что `[]` даёт список. +**Это неверно** — проверено перебором: `[]`, `{}` и пустое тело → **400**. +Рабочий вызов ровно один: + +```bash +curl -s -X POST http://127.0.0.1:9118/ts/torrents \ + -H 'Content-Type: application/json' -d '{"action":"list"}' +``` + +⚠️ **Раздачи живут в памяти процесса TorrServer** — `docker restart lampac` их +выгружает (тестовая `probe` исчезла сама). Файл `data/ts/` при этом не трогается. + #### 🔴🔴 РЕАЛЬНАЯ причина пустого списка у Alex: `redapi` (найдено 2026-09-22) **Не `min_sid`, не TorrServer.** Причина — `redapi` в секции `PidTor`: diff --git a/personal/tech/lampac-torrserver.md b/personal/tech/lampac-torrserver.md index 8aa42add..6bf83431 100644 --- a/personal/tech/lampac-torrserver.md +++ b/personal/tech/lampac-torrserver.md @@ -1,13 +1,26 @@ # TorrServer на Кра́кене — диагностика -**Дата:** 2026-09-22 -**Вывод:** ✅ **TorrServer исправен.** «Торренты» пусто было по причине +**Дата:** 2026-09-22 · **ОБНОВЛЕНО 2026-09-22 (вечер): подтверждено Alex в UI** +**Вывод:** ✅ **TorrServer исправен. ЗАДАЧА ЗАКРЫТА.** «Торренты» пусто было по причине 🔴 **`redapi` указывал на локальный lampac**, чей JacRed отдаёт формат БЕЗ поля `info` → PidTor падал на `torrent.info.sizeName` → NPE → 500 → кэшировался как 503. **ИСПРАВЛЕНО**: `redapi` возвращён на `http://jac.red`. +**Приёмка Alex:** «Во! теперь появились торренты. запустил F1..» — ✅ видно в UI. Диагноз и фикс — [[personal/plans/lampac-pidtor-503-fix]]. **Связано:** [[personal/tech/lampac-deployment]], [[personal/plans/lampac-pidtor-503-fix]], -[[personal/plans/lampac-disable-1xbet-ads]] +[[personal/plans/lampac-disable-1xbet-ads]], [[personal/plans/watchlist-tmdb-missing-marker]] + +--- + +## ✅ Статус закрытия (2026-09-22 вечер) + +| Пункт | Статус | +|---|---| +| PidTor 500/503 | ✅ исправлено, `redapi=http://jac.red` | +| Приёмка в UI | ✅ Alex запустил F1 в плеере | +| Тестовая раздача `probe` | ✅ убрана сама (сброс при рестарте) | +| `min_sid` | ✅ `min_sid: 3` убран → сток `15` | +| Минус год у «Волшебный участок: Фильм» | ⏳ оставлено пусто (см. ниже) | --- @@ -316,4 +329,86 @@ docker start lampac ``` ⚠️ После чистки 503 сменится на **500** — это признак, что кэш больше не маскирует -настоящую ошибку. Дальше искать причину 500 (пункт 2 выше), а не радоваться. +настоящую причину. Дальше искать причину 500 (пункт 2 выше), а не радоваться. + +--- + +## 🔴 «Волшебный участок: Фильм» — `year: null`. НЕ БАГ, данных нет в источнике + +**Дата разбора:** 2026-09-22 · **Статус:** ⏳ оставлено пусто (решение Alex ожидается) + +### Сырьё + +`watchlist.json` (единственная позиция без года из 376): + +```json +{ + "name": "Волшебный участок: Фильм", + "original": "Волшебный участок: Фильм", + "year": null, <- год отсутствует + "rating": 0.0, + "image": "", <- 🔴 постера ТОЖЕ нет + "href": "https://www.themoviedb.org/movie/1272100" +} +``` + +### Что реально отдаёт TMDB по ID 1272100 + +```bash +curl "https://api.themoviedb.org/3/movie/1272100?api_key=$TMDB_KEY&language=ru-RU" +``` + +``` +ru-RU: title='Волшебный участок: Фильм' original_title='Волшебный участок: Фильм' +en-US: title='The Magic District. The Movie' +release_date = '' <- ПУСТО +status = 'In Production' <- 🔴 ФИЛЬМ ЕЩЁ НЕ ВЫШЕЛ +poster_path = None / poster=False <- постера нет +runtime = 0 imdb_id = None vote_average = 0.0 +``` + +TMDB поиск по названию подтверждает: ровно один результат, `id=1272100`. + +### Вывод: генератор работает правильно + +`release_date` пуст **у самого TMDB**, потому что фильм в производстве. +Генератор честно пишет `null`. Это не дефект `tmdb_details()`. + +Кинопоиск как fallback **не подходит**: запрос +`kinopoiskapiunofficial.tech/api/v2.1/films/search-by-keyword?keyword=Волшебный участок` +вернул **HTTP 400 Bad Request** (баг API на `:keyword`-маршруте). Плюс +КП-карточки фильма может ещё не существовать — сериал есть, фильм в производстве. + +### Решение: НЕ ВЫДУМЫВАТЬ год + +| Вариант | Оценка | +|---|---| +| **Оставить `null` (рекомендовано)** | ✅ не выдумываем данные; когда фильм выйдет — TMDB отдаст `release_date`, генератор подхватит сам | +| Заполнить год вручную | ❌ премьера неизвестна → выдуманный год хуже пустоты | +| Год из КП как fallback | ❌ КП отдаёт 400; ~30-40 мин работы, риск сломать резолв | + +**Косметическая опция (если Alex захочет, ~15 мин):** выводить `"скоро"` +вместо пустого года при `status == "In Production"`. + +**Правило «фильм есть → добавлять» соблюдено:** позиция в каталоге, карточка +откроется, торренты найдутся когда фильм выйдет. + +### Питфолл: где лежат ключи TMDB/KP + +``` +🔴 .env в $H/lampac/ НЕТ — ключи в $H/watchlist-sync/.env + (TMDB_KEY, KP_KEY). Генератор читает через load_env() — 5 мест поиска. +``` + +### Питфолл: пути на Кра́кене + +``` +🔴 HDD lampac = /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f + НЕ ...6194539b-ec7d-4b5e-9cb2-2a4e0b0a3a1a (этот UUID не существует) + watchlist.json = $H/lampac/wwwroot/watchlist.json (376 записей) + боевой .md = $H/obsidian/family/documents/movies-watchlist.md + скрипты = $H/lampac/scripts/{gen_watchlist.py,mark_missing.py} +``` + +⚠️ `find /srv -name watchlist.json` — единственный надёжный способ уточнить путь; +UUID в памяти/доках может быть устаревшим или обрезанным.