From eed338bbc749796159fad96d831783ccbec3d64f Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 24 Sep 2026 18:24:02 +0600 Subject: [PATCH] =?UTF-8?q?[2026-09-24]=20watchlist:=20=D1=84=D0=B8=D0=B4?= =?UTF-8?q?=20Lampa=20=D0=BF=D0=B8=D1=88=D0=B5=D1=82=20sync-down,=20=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=BF=D0=B8=D0=BB=D0=B5=D0=BD;=20=D1=80=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D1=82=20lampac=20=D0=BD=D0=B5=20=D0=BD=D1=83=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- family/projects/watchlist-automation.md | 53 +++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/family/projects/watchlist-automation.md b/family/projects/watchlist-automation.md index 1da2e7cb..4cddd8e9 100644 --- a/family/projects/watchlist-automation.md +++ b/family/projects/watchlist-automation.md @@ -271,6 +271,59 @@ Alex: «если они ни в чем не участвуют, удали вс Фаст-патч Radarr в генераторе оставлен — при пустом Radarr молча не срабатывает, оживёт сам при ручных добавлениях. +### ✅ 2026-09-24 (вечер): отдельный генератор Lampa ВЫПИЛЕН — фид пишет sync-down + +**Требование Alex:** «не отдельный скрипт на лампу, а один sync скрипт и писал сразу +lampa feed». Раньше связка была двумя механизмами: `sync-down` (отдельный шаг) + +`lampac/scripts/gen_watchlist.py` (878 строк) по своему крону в 02:30. + +**Стало:** `watchlist_sync/sync_down.py` собирает фид сам, в ночном пайплайне на +своём прежнем месте (01:00), генератор и его обвязка удалены: + +| Было | Стало | +|---|---| +| `sync-down` → Radarr/Sonarr (`arr.py`) | `sync-down` → `wwwroot/watchlist.json` + `cards/` + `missing.json` | +| `lampac/scripts/gen_watchlist.py` (878) + `mark_missing.py` (179) | `.bak-removed-20260924-181942` | +| `~/scripts/watchlist-catalog.sh` + крон `30 2 * * *` | убран (`.bak-removed-…`), крон почищен | +| `arr.py` (Radarr/Sonarr API) | удалён из репы (в истории git) | +| маркер `⬇️` | больше не ставится — закачки нет, маркер ничего не значит | + +Коммиты: `a524f5d` (перенос), `471e9df` (ступень КП + тайбрейк), `0534952` (скоуп ❓). + +**Резолв фида — 2 ступени** (`sync_down.run`): +1. **КП-по-номеру из ссылки `.md`** (`resolver.resolve_by_kp_id`) — машинный ключ, + не зависит от переименований. Без этой ступени на названиях расходилось ~86 позиций. +2. **Матч по названию** (`resolver.resolve`). Неоднозначные → берётся кандидат с + лучшим `score`, ничьи разбивает рейтинг (Alex 2026-09-24) + ❓ в `.md`. + 🔴 Только рейтинг использовать НЕЛЬЗЯ: выбрал бы «Семь Самураев» (★8.5) вместо + «Семь» (1995, ★8.4) и «Злая наука» вместо нужного фильма. + +**Питфоллы, найденные по ходу:** +- 🔴 Фильтры рейтинга/ужасов в фиде — НЕДОПУСТИМЫ: это правила закачки Radarr, + а не каталога. С ними терялось ~120 позиций (37 ужасов). Каталог отдаёт всё. +- 🔴 `resolve_by_kp_id` не заменяет поиск: у 66 строк с ❓ ссылки на Кинопоиск + в `.md` НЕТ, они идут в слепой матч по названию. Куда показывать — уточнять год. +- 🔴 `resolve` с годом-хинтом не фильтровал КП-кандидатов: «Злая 2024» → `Cattiva` + (1991) со score 1.0. Исправлено — год отсекает КП-документы. +- 🔴 `_sync_question_marks` считал скрытым всё, кроме секции «Новинки» → ❓ не + попадал в Фильмы/Мультфильмы/Аниме. Скрывать можно только `HIDE_SECTIONS`. +- `WatchItem` нельзя класть в выходной JSON (не сериализуется) — только словари. + +**Проверено на живом:** фид 390 позиций (4 канала), lampac HTTP 200, фид 200, +карточка 200, ночной прогон целиком зелёный, vault запушен. +Бэкап фида до правки: `/tmp/feed-before-*.json`; ночного скрипта — +`watchlist-nightly.sh.bak-feed-20260924-181926`. + +🔴 **Рестарт lampac после обновления фида НЕ НУЖЕН** (уточнено 2026-09-24, вопрос Alex). +`wwwroot/` — bind-mount, скрипт пишет файл **с хоста**, внутри контейнера он виден +сразу (проверено: один и тот же inode `119669729` и размер на хосте и в `lampac`). +Алекс: «обновление фида же не потребует передёрга?» — верно, не требует. +`docker restart lampac` был унаследован от старого `catalog.sh`, который так сбрасывал +`hybridCache` каталога; цена — приложение падает на ~минуту (компиляция модулей, +HTTP `000`). Из ночного скрипта рестарт убран. Если каталог в Lampa залип +(кэш-ключ `catalog:{plugin}:{search}:{sort}:{cat}:{page}` живёт в памяти процесса) — +обновить страницу в Lampa или переключить категорию, а не ронять контейнер. + Дальше — история и cookbook той защиты. **Контекст.** Задача — Lampa на ТВ показывает каталог из `movies-watchlist.md` и играет