From 63694c7f570eb2f3a6d7edce5676bdfa8d8da0c8 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 24 Sep 2026 16:57:52 +0600 Subject: [PATCH] [2026-09-24] eagle: family/projects/watchlist-automation.md personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md --- family/projects/watchlist-automation.md | 7 +++ personal/plans/lampac-watchlist-plugin.md | 52 ++++++++++++++++++++++- personal/tech/lampac-deployment.md | 37 +++++++++++++++- 3 files changed, 93 insertions(+), 3 deletions(-) diff --git a/family/projects/watchlist-automation.md b/family/projects/watchlist-automation.md index e67c463c..e8158486 100644 --- a/family/projects/watchlist-automation.md +++ b/family/projects/watchlist-automation.md @@ -221,6 +221,13 @@ curl -s --max-time 10 "http://localhost:7878/radarr/api/v3/queue?pageSize=50" \ (частичный молча возвращает старое). Через host-config тупик: валидатор требует непустой `allowedHosts` при `authenticationRequired != Enabled` и не принимает звёздочку. +**🔴 Дальше — консолидация (план согласован 2026-09-24, не реализован):** отдельный +генератор каталога `lampac/scripts/gen_watchlist.py` признан вторым независимым матчером +TMDB — он не знает про `resolve` и его маркеры, из-за чего после удаления arr каталог +разъехался с `.md` на 3 позициях (Олдбой/Unbroken/Shogun). Слияние логики в модуль +проекта `watchlist_sync/feed.py` + CLI-шаг `feed` — см. +[[personal/plans/lampac-watchlist-plugin]] § «2026-09-24 (вечер): ПЕРЕПИСЫВАНИЕ». + ### ✅ 2026-09-24 (вечер): контент удалён — Radarr/Sonarr пустые Alex: «если они ни в чем не участвуют, удали все фильмы/сериалы». Проверка перед удалением: diff --git a/personal/plans/lampac-watchlist-plugin.md b/personal/plans/lampac-watchlist-plugin.md index 22aee12c..66669193 100644 --- a/personal/plans/lampac-watchlist-plugin.md +++ b/personal/plans/lampac-watchlist-plugin.md @@ -8,7 +8,7 @@ related: - '[[family/projects/watchlist-automation]]' - '[[family/documents/movies-watchlist]]' - '[[personal/plans/lampac-watched-to-watchlist]]' -status: cub-sections-working-awaiting-tv-restart-deploy +status: unified-feed-approved-awaiting-implementation tags: - lampac - lampa @@ -22,13 +22,61 @@ tags: - torrserver - tmdb - card-parse + - feed title: Watchlist в UI Lampa — каталог из списка type: plan -updated: '2026-09-22' +updated: '2026-09-24' --- # Watchlist в UI Lampa — каталог из списка +## 🔴 2026-09-24 (вечер): ПЕРЕПИСЫВАНИЕ — один sync-скрипт вместо отдельного генератора + +**Требование Alex:** «перепиши по нормальному чтобы не отдельный скрипт на лампу был +а один sync скрипт и писал сразу lampa feed… обнови синк скрипт чтобы писал фид вместо +добавления закачек в arr, а отдельный lampac script удали». + +**Причина (найдено в этой сессии).** `gen_watchlist.py` (Lampac, 878 строк) — ВТОРОЙ, +независимый матчер TMDB: он не читает ни `.resolve_cache.json`, ни маркеры ✅/🗓️/❓. +Годами его связывал с резолвером Radarr неявно (матч по названию → те же версии фильмов, +что выбрал `resolve`). После удаления контента из arr 2026-09-24 мост исчез, и каталог +впервые матчил вслепую → 3 карточки сменили фильм (Олдбой 2003→2013 ремейк, +Unbroken 2003→Несломленный 2014, Shogun 1968→Убийца сёгуна 1980). Лечим не годами +в `.md`, а слиянием матчеров. + +**План (согласован, реализация НЕ начата).** + +| Шаг | Что | +|---|---| +| 1 | Логику `gen_watchlist.py` перенести в модуль проекта: `watchlist_sync/feed.py`, функция `run()` как у остальных | +| 2 | Новый CLI-шаг `feed`; в nightly — ПОСЛЕ `resolve` (маркеры уже стоят), ПЕРЕД `sync-up` | +| 3 | Пути — через `.env`-ключ `LAMPAC_ROOT=/srv/.../lampac` (не хардкод); модуль сам собирает `wwwroot/watchlist.json`, `wwwroot/cards/`, `cache/` | +| 4 | Проверка на копии фида: ожидание **392 позиции / 390 постеров / missing 30** — точь-в-точь как текущий живой | +| 5 | Живой прогон + `docker restart lampac` (сброс кэша Catalog) | +| 6 | Выпилить: `lampac/scripts/gen_watchlist.py` + `mark_missing.py` → `*.bak-20260924`; `~/scripts/watchlist-catalog.sh` + строка крон `30 2 * * *` | +| 7 | Доки + скилл, коммит/пуш | + +**Что НЕ трогаем:** `catalog/sites/watchlist.yaml` (контракт Lampac — `plugin: watchlist`, +категории, `card_parse`/`card_args` с `format`-выражениями), `catalog/plugin.js` +(инжект секций в CUB через `Api.partNext`), структура `cards/card-movie-NNN.json`. +Механика `missing.json` → маркер ❓ уже живёт в проекте и работает. + +**`sync-down` остаётся вырезанным из крона** — добавлений в arr из watchlist нет; +`arr.py` не трогаем (автозакачка вернулась для РУЧНЫХ добавлений, коммит `ef7e7af`). + +**Реперные метрики живого фида на 2026-09-24** (для сверки после переноса): +``` +каналы: new 32 / films 346 / cartoons 7 / anime 7 → карточек 392 +источники: Radarr 0, TMDB 371, автопоиск по названию 17, + по номеру из ссылки 4, без TMDB 30, постеров 390 +``` + +🟡 **Рабочее правило (Alex):** код писать сразу в проекте на Маке +(`~/Developer/watchlist-sync/`), `/tmp` — только для чтения чужих файлов и одноразовых +выборок. Мак-репа и Кракен держатся на одном коммите (`4266e37` на момент старта). + +--- + > Реализовано 2026-09-22. План был переписан после разведки кода модуля Catalog. > Базовое развёртывание — [[personal/plans/lampac-kraken]] (шаги 1–6 закрыты). > diff --git a/personal/tech/lampac-deployment.md b/personal/tech/lampac-deployment.md index 15f39208..2bc09f5e 100644 --- a/personal/tech/lampac-deployment.md +++ b/personal/tech/lampac-deployment.md @@ -1,7 +1,7 @@ --- title: Lampac — развёртывание и эксплуатация (Кра́кен) created: '2026-09-22' -updated: '2026-09-22' +updated: '2026-09-24' type: tech namespace: personal tags: @@ -27,6 +27,41 @@ related: > Технический справочник. Развёрнуто 2026-09-22. План и статус шагов — [[personal/plans/lampac-kraken]]. +## 🔴 2026-09-24: генератор каталога признан вторым матчером — уходит в проект + +`lampac/scripts/gen_watchlist.py` (878 строк) + `mark_missing.py` (179) — **отдельные +скрипты вне `watchlist-sync`**. Разбор кода в этой сессии: + +- резолв **трёхуровневый**: Radarr по названию → TMDB `/search/{movie,tv}` (кэш + `cache/.lampac_tmdb_cache.json`) → КП по номеру из ссылки в `.md` + (`kp_id_from_url`, приоритет выше поиска по названию) → КП по названию с порогом + `KP_SIM_THRESHOLD = 0.75` и проверкой год ±1 / совпадения `media_type`; +- детали карточек — `cache/.lampac_tmdb_details.json` (описание, жанры, актёры, runtime, + ru-title + year; требование Alex «отображать как в tmdb/kp»); +- пишет: `wwwroot/watchlist.json` (channels), `wwwroot/watchlist-{films,new,cartoons,anime}.json`, + `wwwroot/cards.json` + `wwwroot/cards/card--.json` (файл на фильм, обёртка + `{"card": {...}}`), `wwwroot/missing.json` (для маркера ❓); +- позиции без TMDB-ID в фид **не отдаются** (требование «чего нет для просмотра — того + нет в списке»), уходят в `missing.json`; +- `load_env()` ищет `.env` в жёстком списке путей (Кракен-пути + Mac-путь) — хрупко. + +**Проблема:** скрипт не читает `.resolve_cache.json` и не знает маркеров ✅/🗓️/❓ — +это ВТОРОЙ независимый матчер того же списка. Ранее связывался с `resolve` неявно через +Radarr (матч по названию → те же версии, что выбрал резолвер). После удаления контента +из arr (2026-09-24) мост исчез → 3 карточки сменили фильм. + +**Решение (план согласован, не реализован):** логика переезжает в проект как +`watchlist_sync/feed.py` + CLI-шаг `feed`, пути через `.env`-ключ `LAMPAC_ROOT`, шаг +встаёт в nightly между `resolve` и `sync-up`; `gen_watchlist.py` / `mark_missing.py` / +`watchlist-catalog.sh` (крон 02:30) — в `.bak`. Детали и порядок шагов — +[[personal/plans/lampac-watchlist-plugin]] § «2026-09-24 (вечер): ПЕРЕПИСЫВАНИЕ». + +⚠️ **НЕ трогать при переносе:** `catalog/sites/watchlist.yaml` (`plugin: watchlist` — +обязателен, кириллица в ключе вырезается регуляркой `ModInit`; первая категория +игнорирует `format` и берёт `list.uri`; `card_args` требуют `format` для числовых типов, +иначе `tmdb_id` приедет строкой и карточка в Lampa будет «здесь пусто»), +`catalog/plugin.js` (инжект секций в CUB через `Api.partNext`), структуру `cards/`. + ## Что это `lampac-nextgen/lampac` (MIT, .NET 10) — серверный бэкенд для Lampa. Один контейнер, порт **9118**.