[2026-09-24] eagle: family/projects/watchlist-automation.md personal/plans/lampac-watchlist-plugin.md
This commit is contained in:
1 parent
63694c7f57
commit
81467fe14f
2 files changed
+65
-24
No files matched your search
@@ -1,6 +1,6 @@
|
||||
---
|
||||
created: '2026-05-20'
|
||||
updated: '2026-09-23'
|
||||
updated: '2026-09-24'
|
||||
status: active
|
||||
tags:
|
||||
- kraken
|
||||
@@ -207,7 +207,7 @@ curl -s --max-time 10 "http://localhost:7878/radarr/api/v3/queue?pageSize=50" \
|
||||
|
||||
| Что | Было (защита 2026-09-22) | Стало (2026-09-24) |
|
||||
|---|---|---|
|
||||
| `arr.py`: `monitored` + `searchForMovie` / `searchForMissingEpisodes` | `False` | **`True`** — коммит `ef7e7af` (push): добавление сразу ищет и качает |
|
||||
| `arr.py`: `monitored` + `searchForMovie` / `searchForMissingEpisodes` | `False` | **`True`** — коммит `ef7e7af` (push): добавление сразу ищет и качает. 🔴 **Вечером того же дня `arr.py` УДАЛЁН** (`a524f5d`) вместе с переходом `sync-down` на фид Lampa — см. «Консолидация» ниже |
|
||||
| Radarr `rssSyncInterval` | `0` | **15 мин** (`PUT /api/v3/config/indexer`, HTTP 202) |
|
||||
| Sonarr `rssSyncInterval` | `0` | **15 мин** (там же) |
|
||||
| `sync-down` в кроне | вырезан | **остался вырезан** — авто-пути из watchlist нет, добавление только руками |
|
||||
@@ -221,12 +221,16 @@ 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:** генератор каталога слит в `sync-down`.
|
||||
Было две независимых цепочки — `lampac/scripts/gen_watchlist.py` (878 строк, свой матчер
|
||||
TMDB, не знал про `resolve` и его маркеры) и `sync_down.py` (arr-путь). Теперь **один
|
||||
модуль**: `sync-down` резолвит через `resolver.resolve()` и пишет фид Lampa
|
||||
(`wwwroot/watchlist.json`, `watchlist-<cat>.json`, `cards/`, `cards.json`, `missing.json`).
|
||||
`arr.py` **удалён** (`git rm`, коммит `a524f5d`), ⬇️ больше не ставится нигде.
|
||||
|
||||
Детали, три открытия при переносе (фильтры рейтинга/ужасов в фиде НЕ нужны;
|
||||
❓ не исключает позицию из фида; спорные позиции надо брать из `all_candidates`) и
|
||||
открытые пункты — [[personal/plans/lampac-watchlist-plugin]] § «ПЕРЕПИСЫВАНИЕ».
|
||||
|
||||
### ✅ 2026-09-24 (вечер): контент удалён — Radarr/Sonarr пустые
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ related:
|
||||
- '[[family/projects/watchlist-automation]]'
|
||||
- '[[family/documents/movies-watchlist]]'
|
||||
- '[[personal/plans/lampac-watched-to-watchlist]]'
|
||||
status: unified-feed-approved-awaiting-implementation
|
||||
status: sync-down-feed-implemented-392-parity-pending
|
||||
tags:
|
||||
- lampac
|
||||
- lampa
|
||||
@@ -44,25 +44,46 @@ updated: '2026-09-24'
|
||||
Unbroken 2003→Несломленный 2014, Shogun 1968→Убийца сёгуна 1980). Лечим не годами
|
||||
в `.md`, а слиянием матчеров.
|
||||
|
||||
**План (согласован, реализация НЕ начата).**
|
||||
**Статус: ✅ РЕАЛИЗОВАНО 2026-09-24 (вечер).** Отказ от отдельного `feed.py`/CLI-шага —
|
||||
Alex уточнил требование: «это же чистая доработка sync-down?» → **`sync-down` сам пишет фид**.
|
||||
Отдельного шага `feed` в CLI и в nightly НЕ появилось.
|
||||
|
||||
| Шаг | Что |
|
||||
| Что | Как сделано |
|
||||
|---|---|
|
||||
| 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 | Доки + скилл, коммит/пуш |
|
||||
| Новый `watchlist_sync/sync_down.py` | ~380 строк вместо 195: `resolve` → `wwwroot/watchlist.json` + `watchlist-<cat>.json` + `cards/card-<movie-NNN>.json` + `cards.json` + `missing.json`; опционально ❓-синк |
|
||||
| CLI | `sync-down [--apply] [--feed-root]`; `--batch` оставлен deprecated (в фид идёт весь список) |
|
||||
| Пути | `--feed-root` → env `LAMPAC_ROOT` → `<repo>/../lampac` (fallback для Мак-чекаута). Хардкода UUID-путей в коде нет |
|
||||
| `arr.py` | 🔴 **УДАЛЁН** (`git rm`, коммит `a524f5d`) — история сохранена в гите. Бэкапы НЕ делались (решение Alex: «в истории гита останется») |
|
||||
| ⬇️ | **не ставится больше нигде.** Alex: «⬇️ больше ставить не надо, ведь закачки нет». `mark_queued` в `parser.py` оставлен для исторических строк |
|
||||
| Коммит | `a524f5d` — «sync-down: build Lampa feed instead of adding to arr; drop arr.py» |
|
||||
|
||||
**Что НЕ трогаем:** `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`).
|
||||
1. **Фильтры рейтинга/ужасов в фиде НЕ НУЖНЫ.** Я притащил в фид правила закачки
|
||||
(`rating >= 6.0`, horror-skip) — фид упал до 268 позиций из 392. Это правила
|
||||
**Radarr** («не качаем то, что не смотрим»), а каталог — не очередь закачки:
|
||||
старый генератор отдавал horror тоже (Вивариум, Субстанция, Ужасающий, Зубастики
|
||||
есть в живом фиде). В `sync_down.py` оставлен явный комментарий с запретом
|
||||
возвращать эти фильтры.
|
||||
|
||||
2. **`item.ambiguous` (❓) НЕ исключает позицию из фида.** ❓ означает «название в `.md`
|
||||
неточное, пригодился бы год», а НЕ «нерезолвлено». Резолвер для таких всё равно
|
||||
отдаёт кандидата, и старый генератор их публиковал (Альфа, Кибердеревня, Орвилл,
|
||||
Ножницы — все с постерами в живом фиде). Из фида исключают только: нет `tmdb_id`
|
||||
и `result.year_ambiguous` (🗓️ — реально два разных фильма).
|
||||
|
||||
3. **Фид должен брать лучшего кандидата, а не отказываться.** `resolve()` при
|
||||
неоднозначности возвращает `status="ambiguous"`, `candidate=None`, но топ-3 лежат
|
||||
в `all_candidates` — среди них верный. Старый генератор брал первый результат TMDB.
|
||||
Если строить фид строго по `result.status == "ok"`, теряется **54 позиции**
|
||||
(девять, Мементо, Babylon, Orville, Матрица-класс названий: Казино, Сияние, Оно,
|
||||
Отступники, Бешеные псы…). 🟡 **На момент записи дока это НЕ решено** — ждёт решения
|
||||
Alex: брать `all_candidates[0]` (полный фид 392, как раньше, но спорящие позиции
|
||||
могут показать не тот фильм) **или** пропускать спорные (фид честный, ~54 позиции
|
||||
пропадут до уточнения года в `.md`).
|
||||
|
||||
**Замеры dry-run по ходу работы:** 268 (с фильтрами) → 332 (без фильтров, `ambiguous`
|
||||
исключается) → цель 392, достигается только решением по п.3.
|
||||
|
||||
**Реперные метрики живого фида на 2026-09-24** (для сверки после переноса):
|
||||
```
|
||||
@@ -75,6 +96,22 @@ Unbroken 2003→Несломленный 2014, Shogun 1968→Убийца сёг
|
||||
(`~/Developer/watchlist-sync/`), `/tmp` — только для чтения чужих файлов и одноразовых
|
||||
выборок. Мак-репа и Кракен держатся на одном коммите (`4266e37` на момент старта).
|
||||
|
||||
**Границы (что не трогаем):** `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.py` (`_sync_question_marks`, двусторонняя — снимает протухший ❓).
|
||||
|
||||
**🟡 Незакрытое на конец сессии 2026-09-24 (для следующей сессии):**
|
||||
1. **Решение по спорным позициям (54 шт.)** — см. п.3 «Три открытия»: брать
|
||||
`all_candidates[0]` (полный фид 392) или пропускать. Ждёт ответа Alex.
|
||||
2. Возврат `sync-down` в `watchlist-nightly.sh` (строка 40 сейчас «ПРОПУЩЕН»;
|
||||
в 02:30 крутится отдельный `watchlist-catalog.sh`) + удаление `watchlist-catalog.sh`
|
||||
и строки крона `30 2 * * *`.
|
||||
3. Удаление `lampac/scripts/gen_watchlist.py` (878 строк) и `mark_missing.py` (179).
|
||||
4. Прогон `--apply` на живой фид + `docker restart lampac` (сброс кэша Catalog)
|
||||
+ приёмка в UI Lampa.
|
||||
|
||||
---
|
||||
|
||||
> Реализовано 2026-09-22. План был переписан после разведки кода модуля Catalog.
|
||||
|
||||
Reference in new issue
Block a user