[2026-09-25] eagle: personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md
This commit is contained in:
1 parent
7dbfead569
commit
6b00a2986f
2 files changed
+211
-23
No files matched your search
@@ -34,24 +34,51 @@ related:
|
||||
(патч `enumerable:true` + инжект секций через перехват `Lampa.Api.partNext`).
|
||||
Полный план и статус — [[personal/plans/lampac-watchlist-plugin]].
|
||||
|
||||
### Где лежит файл (три разных места — не путать)
|
||||
### Где лежит файл — ✅ ИСПРАВЛЕНО 2026-09-25: ЭТО РЕПОЗИТОРИЙ, а не `/Users/admin/lampac-tmp/`
|
||||
|
||||
🔴 **`/Users/admin/lampac-tmp/` — рабочая папка сессии 2026-09-22, НЕ под git.**
|
||||
Живое место исходников — репозиторий **`~/Developer/lampac-scripts`** (Mac),
|
||||
залитый в Gitea `git_admin/lampac-scripts`. Именно туда кладутся `build_plugin.py`
|
||||
и `plugin-cub.js`; `lampac-tmp` — временный скрэтч, из него файлы могут исчезнуть.
|
||||
|
||||
| Слой | Путь | Примечание |
|
||||
|---|---|---|
|
||||
| Mac, исходник | `/Users/admin/lampac-tmp/plugin-cub.js` | результат `build_plugin.py` |
|
||||
| Mac, сборщик | `/Users/admin/lampac-tmp/build_plugin.py` | 🔴 `plugin-cub.js` РУКАМИ не правим |
|
||||
| Кра́кен, хост | `/srv/dev-disk-by-uuid-6194539b-.../lampac/catalog/plugin.js` | bind-mount |
|
||||
| **Mac, репо** | `~/Developer/lampac-scripts/scripts/build_plugin.py` | сборщик, 12 инвариантов |
|
||||
| **Mac, репо** | `~/Developer/lampac-scripts/scripts/plugin-cub.js` | 🔴 собранный выход, РУКАМИ не правим |
|
||||
| Mac, скрэтч | `/Users/admin/lampac-tmp/` | рабочая папка, вне git — не источник истины |
|
||||
| Кра́кен, хост | `/srv/dev-disk-by-uuid-6194539b-.../lampac/catalog/plugin.js` | bind-mount, вне git |
|
||||
| В контейнере | `/lampac/module/Catalog/plugin.js` | `:ro` по compose |
|
||||
| По HTTP | `http://192.168.1.14:9118/catalog.js` | что реально грузит ТВ |
|
||||
|
||||
**Репозиторий:** `https://git.mallexxx.duckdns.org/git_admin/lampac-scripts.git`
|
||||
(remote `origin`, ветка `main`). Локально в нём же: `scripts/gen_watchlist.py`,
|
||||
`scripts/deploy_lampac.py`, `scripts/mark_missing.py`, `tests/`.
|
||||
Коммит плагина 2026-09-25: **`5e55a47`** «секции CUB только на главной экране».
|
||||
|
||||
```bash
|
||||
cd ~/Developer/lampac-scripts
|
||||
git fetch origin && git status --short --branch # держим синхрон с Gitea
|
||||
git add scripts/build_plugin.py scripts/plugin-cub.js
|
||||
git commit -m "..." && git push origin main
|
||||
```
|
||||
|
||||
⚠️ В `lampac/` на Кра́кене git НЕТ (проверено: `fatal: not a git repository`).
|
||||
Репы на Кра́кене только три: `docker/`, `obsidian/`, `watchlist-sync/`.
|
||||
Бэкапы боевого файла — `.bak-<что>-<дата>` рядом с `plugin.js`, они закрыты
|
||||
`.gitignore` (`*.bak*`).
|
||||
|
||||
🔴 **`wwwroot/catalog.js` НЕ существует.** `wwwroot/` содержит только JSON фида
|
||||
(`watchlist.json`, `watchlist-<cat>.json`, `cards.json`, `cards/`, `missing.json`).
|
||||
Попытка `scp` оттуда падает с «No such file or directory» — это не сбой сети.
|
||||
|
||||
### Порядок деплоя (боевой конфиг — коммит ДО, правка, заливка, ПРОВЕРКА, коммит ПОСЛЕ)
|
||||
### Порядок деплоя
|
||||
|
||||
```
|
||||
коммит ДО (репо) → правка build_plugin.py → сборка → заливка → ПРОВЕРКА АЛЕКСОМ → коммит ПОСЛЕ
|
||||
```
|
||||
|
||||
```bash
|
||||
cd /Users/admin/lampac-tmp
|
||||
cd ~/Developer/lampac-scripts/scripts
|
||||
python3 build_plugin.py # инварианты: сборка падает при нарушении
|
||||
node --check plugin-cub.js # SYNTAX OK обязателен
|
||||
# бэкап боевого
|
||||
@@ -61,6 +88,11 @@ scp plugin-cub.js kraken:.../lampac/catalog/plugin.js
|
||||
ssh kraken 'docker exec lampac grep -c "<маркер>" /lampac/module/Catalog/plugin.js'
|
||||
```
|
||||
|
||||
🔴 **`plugin-cub.js` в репе — это ВЫХОД сборщика.** Правку вносим в `INJECT` внутри
|
||||
`build_plugin.py`, потом пересобираем; руками `plugin-cub.js` не редактируем, иначе
|
||||
следующая сборка затрёт правку. Инварианты в `checks{}` обязаны покрывать любую
|
||||
новую функцию — иначе регресс пройдёт молча.
|
||||
|
||||
### 🔴 Перезапуск Lampa на ТВ обязателен
|
||||
|
||||
`docker restart lampac` **НЕ сбрасывает** кэш `catalog.js` в браузере webOS — ТВ
|
||||
@@ -276,6 +308,11 @@ Radarr (матч по названию → те же версии, что выб
|
||||
`~/lampac-tmp/` — **НЕ git-репо** (свалка одноразовых пробников, 50+ файлов).
|
||||
Прод-генератор жил там без версионирования — ошибка, исправлено.
|
||||
|
||||
🔴 **2026-09-25: тем же правилом туда переехал плагин каталога** —
|
||||
`scripts/build_plugin.py` + `scripts/plugin-cub.js` (коммит `5e55a47`).
|
||||
До этого оба жили только в `lampac-tmp`. **`lampac-tmp` НЕ источник истины:**
|
||||
его содержимое может исчезнуть, исходники плагина — только в репозитории.
|
||||
|
||||
**Репозиторий:** `/Users/admin/Developer/lampac-scripts/` (gitea, private)
|
||||
**Remote (ЧИСТЫЙ URL, токен не в URL):** `https://git.mallexxx.duckdns.org/git_admin/lampac-scripts.git`
|
||||
Токен — в `~/.git-credentials` (600). Питфолл №1 из [[family/how-to/gitea-config.md]].
|
||||
@@ -285,6 +322,8 @@ Radarr (матч по названию → те же версии, что выб
|
||||
├── scripts/gen_watchlist.py (из gen_watchlist_v2.py — ПРОД-генератор)
|
||||
├── scripts/deploy_lampac.py
|
||||
├── scripts/mark_missing.py (маркер ❓, вход — missing.json)
|
||||
├── scripts/build_plugin.py (сборщик плагина каталога) ← 2026-09-25
|
||||
├── scripts/plugin-cub.js (собранный выход, не править руками) ← 2026-09-25
|
||||
└── tests/accept_step1.py, tests/accept_step1_order.py
|
||||
```
|
||||
|
||||
@@ -1648,13 +1687,24 @@ function wlAbs(url) {
|
||||
#### Сборщик `build_plugin.py`
|
||||
|
||||
```bash
|
||||
cd /Users/admin/lampac-tmp
|
||||
python3 build_plugin.py # plugin-patched.js + INJECT → plugin-cub.js (14376 Б)
|
||||
cd ~/Developer/lampac-scripts/scripts
|
||||
python3 build_plugin.py # plugin-patched.js + INJECT → plugin-cub.js
|
||||
node --check plugin-cub.js
|
||||
```
|
||||
|
||||
🔴 **2026-09-25: сборщик переехал из `/Users/admin/lampac-tmp/` в репозиторий**
|
||||
`lampac-scripts/scripts/` — вместе с собранным `plugin-cub.js`. Скрэтч-папка
|
||||
`lampac-tmp` вне git, файлы там не переживут чистку. Коммит: `5e55a47`.
|
||||
|
||||
Детерминирован: режет `[до startPlugin] + INJECT + [новый startPlugin] + '})();'`,
|
||||
проверяет инварианты (`INJECT=1`, `def=1`, `startPlugin=1`, `network.silent в INJECT=0`).
|
||||
проверяет инварианты. **Текущий набор (12):** `INJECT=1`, `partNext def=1`,
|
||||
`wlInject def=1`, `unshift (не push)=1`, `push в INJECT=0`, `startPlugin=1`,
|
||||
`нет network.silent в INJECT=0`, плюс добавленные 2026-09-25 —
|
||||
**`wlOnMain def=1`, `wlOnMain guard=1`, `wlUrl def=1`, `wlUrl верхний уровень=1`**.
|
||||
|
||||
🔴 **Правило: новая функция в INJECT = новый инвариант в `checks{}`.** Иначе
|
||||
регресс (например, потерянный фильтр по экрану) пройдёт сборку молча и всплывёт
|
||||
только у Alex в UI.
|
||||
|
||||
🔴 **Питфолл прошлого сборщика `patch_cub_inject.py`:** проверки `"X" not in s` шли
|
||||
**по уже модифицированной строке** → повторный запуск вставлял INJECT дважды → плюс лишняя
|
||||
@@ -1821,21 +1871,29 @@ docker compose down
|
||||
|
||||
### Развёртывание каталога watchlist (`deploy_lampac.py`)
|
||||
|
||||
Локальный скрипт `/Users/admin/lampac-tmp/deploy_lampac.py` — 7 шагов с бэкапами
|
||||
🔴 **2026-09-25: файл в репозитории**, не в скрэтче —
|
||||
`~/Developer/lampac-scripts/scripts/deploy_lampac.py`. 7 шагов с бэкапами
|
||||
и самопроверкой. Запуск:
|
||||
|
||||
```bash
|
||||
python3 /Users/admin/lampac-tmp/deploy_lampac.py # полный цикл
|
||||
python3 /Users/admin/lampac-tmp/deploy_lampac.py --skip-plugin # только JSON+YAML
|
||||
python3 ~/Developer/lampac-scripts/scripts/deploy_lampac.py # полный цикл
|
||||
python3 ~/Developer/lampac-scripts/scripts/deploy_lampac.py --skip-plugin # только JSON+YAML
|
||||
```
|
||||
|
||||
⚠️ Для скриптов прошлых сессий (пробники, разовые патчи) `lampac-tmp` остаётся
|
||||
упомянут в исторических разделах ниже — это скрэтч вне git, ссылки оставлены
|
||||
как есть. Источник истины для **плагина каталога и генератора** — только репозиторий.
|
||||
|
||||
Порядок: бэкап JSON в `wwwroot/.bak/` → заливка 5 JSON → `watchlist.yaml` →
|
||||
патченный `plugin.js` → volume в compose (если нет) → `docker compose up -d` →
|
||||
проверка (`/catalog`, 4 категории с подсчётом постеров и TMDB-ID, факт патча).
|
||||
|
||||
### Генератор каталога (`gen_watchlist_v2.py`)
|
||||
### Генератор каталога (`gen_watchlist.py`)
|
||||
|
||||
`/Users/admin/lampac-tmp/gen_watchlist_v2.py <watchlist.md> <out_dir>`
|
||||
⚠️ **Устарело 2026-09-24:** генератор выпилен из пайплайна — фид Lampa строит
|
||||
`watchlist-sync sync-down` (см. [[personal/tech/watchlist-sync-feed]]).
|
||||
Файл остаётся в репе как исторический: `~/Developer/lampac-scripts/scripts/gen_watchlist.py`
|
||||
(бывш. `gen_watchlist_v2.py`, скрэтч-копии в `lampac-tmp` — не источник истины).
|
||||
|
||||
Читает `.md`, резолвит каждый фильм: **сначала Radarr** (мгновенно, там уже `tmdbId`
|
||||
и постер), **затем TMDB** по названию (2 языка × movie/tv), **фолбэк** — ссылка Кинопоиска.
|
||||
|
||||
Reference in new issue
Block a user