diff --git a/personal/plans/lampac-watchlist-plugin.md b/personal/plans/lampac-watchlist-plugin.md index 5d4e051c..9aedb017 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: main-screen-filter-WORKS-2026-09-25-accepted-latency-prefetch-pending +status: main-screen-filter-WORKS-2026-09-25-accepted-committed-5e55a47-prefetch-pending tags: - lampac - lampa @@ -281,14 +281,18 @@ node --check plugin-cub.js → SYNTAX OK Бэкап: `catalog/plugin.js.bak-before-fixurl-`. Залито → 20934 Б, `docker exec lampac grep -n "function wlUrl" -A4 /lampac/module/Catalog/plugin.js` → на месте. -**⚠️ НА МОМЕНТ ЗАПИСИ ФИКС НЕ ПРИЁМКОВАН.** Замер после заливки: `url = ""` -на ОБОИХ уровнях, `hasCats = false`, `menu = 0`. То есть Lampa стоит на главной давно -(URL страницы `component=main&source=cub`), но `Activity.active().url` пуст — это НЕ -стадия инициализации. Пока `/catalog` не отвечает, `__wl_menu` пуст и секции взять -неоткуда: **перезапуск Lampa без починенного `/catalog` ничего не даст.** +**⚠️ ПЕРВЫЙ ЗАМЕР ПОСЛЕ ЗАЛИВКИ — приёмка на нём НЕ пройдена** (оставлено как +история): `url = ""` на ОБОИХ уровнях, `hasCats = false`, `menu = 0`. Alex на это +ответил: «Ты заебал. Ты блядь задачу решаешь или мозг мне ебешь?! Я жду от тебя: +готово, проверяй.» — **правильный ответ на такой сигнал: доделать и доложить, +не задавать вопросов.** Ниже выяснилось, что пустой `url` был замером в момент +загрузки, а не поломкой; приёмка пройдена после полной инициализации Lampa. -**Следующий шаг (обязательный, не сделан):** проверить боевой запрос Lampa → Lampac -`/catalog` — отвечает ли он с ТВ, отвечает ли с Кра́кена, не сломан ли он вообще. +**Следующий шаг был:** проверить боевой запрос Lampa → Lampac `/catalog`. ✅ Выполнено — +`/catalog` жив с обеих сторон: с Кра́кена `http=200 size=21470 t=0.44s` (холодный), +по LAN с Mac `http=200 size=21470 t=0.01s`, тело содержит корректный +`watchlist.menu` = `{Новинки, Фильмы, Мультфильмы, Аниме}`. **Бэкенд был исправен — +проблема была только в гонке замера.** ### ✅ ИТОГ 2026-09-25: ПРИЁМКА ПРОЙДЕНА @@ -364,6 +368,37 @@ Alex: «Коммить и переходим к предзагрузке». Пр `plugin-cub.js` под git — тогда правка плагина поедет вместе с проектом и попадёт в историю. Второе правильнее, но это новая сущность в репе → спрашивать один раз. +#### ✅ ЗАКОММИЧЕНО 2026-09-25 — репозиторий найден, «некуда коммитить» СНЯТО + +Alex уточнил: «Проект на маке в developer это в доке записано. Ведь так?!» — и был прав. + +🔴 **Живое место исходников плагина — `~/Developer/lampac-scripts/` (ПОД GIT), Gitea +`git_admin/lampac-scripts`.** Ранее в доке везде значился `/Users/admin/lampac-tmp/` — +это скрэтч-папка сессии 2026-09-22, **вне git** (50+ одноразовых пробников). +Именно поэтому первый заход дал «коммитить некуда»: искал в `lampac-tmp` и в `lampac/` +на Кра́кене, а репа — `lampac-scripts`. Правило из дока («скрипт, который зовёт крон на +боевой машине, обязан быть в репозитории») действовало и на плагин. + +```bash +cd ~/Developer/lampac-scripts +cp .../build_plugin.py scripts/build_plugin.py +cp .../plugin-cub.js scripts/plugin-cub.js +git add scripts/build_plugin.py scripts/plugin-cub.js +git commit -m "watchlist plugin: секции CUB только на главной экране" +git push origin main +``` + +**Коммит `5e55a47`** — «watchlist plugin: секции CUB только на главной экране», +2 files changed, 526 insertions(+). Запушено: `53e5803..5e55a47 main -> main` → +`https://git.mallexxx.duckdns.org/git_admin/lampac-scripts.git`. + +Репы на Кра́кене (проверено `find`): только `docker/`, `obsidian/`, `watchlist-sync/`. +В `lampac/` git НЕТ — боевой `plugin.js` версионируется только через репу +`lampac-scripts` (файл кладётся в неё и оттуда заливается `scp`). + +⚠️ Бэкапы боевого файла (`plugin.js.bak-*`) закрыты `.gitignore` репы (`*.bak*`) — +в git не попадают, остаются локальной страховкой рядом с файлом. + #### ⚠️ Замер «плагин не загрузился» — это была гонка, а не поломка Сразу после `luna-send`-перезапуска проба дала: @@ -408,18 +443,22 @@ cats = NOMANIFEST ### Открытые шаги (для следующей сессии) 1. ✅ **ПРИЁМКА ПРОЙДЕНА 2026-09-25** — фильтр `wlOnMain()` работает, фид виден только - на главной. Осталась латентность, см. п.2. -2. 🔄 **ПРЕДЗАГРУЗКА `__wl_menu`** (согласовано Alex: «Коммить и переходим к предзагрузке»). - Корень отставания — асинхронный `/catalog` в `loadCatalogs()`: меню приходит ПОСЛЕ - первого `partNext`. Решение: подтягивать `menu` синхронно в `startPlugin()`, - параллельно с `loadCatalogs()`, чтобы `wlInject` срабатывал в первом раунде среза. - Правка идёт в те же два файла (`plugin-cub.js` + `INJECT` в `build_plugin.py`). + на главной. Доказательство: на экране `movie` секций в DOM нет при заполненном `menu`. +2. 🔄 **ПРЕДЗАГРУЗКА `__wl_menu`** — единственный незакрытый пункт этой задачи, + выполняется сразу после коммита `5e55a47`. Корень отставания — асинхронный `/catalog` + в `loadCatalogs()`: меню приходит ПОСЛЕ первого `partNext`. Решение: подтягивать + `menu` синхронно в `startPlugin()`, параллельно с `loadCatalogs()`, чтобы `wlInject` + срабатывал в первом раунде среза. Правка идёт в те же два файла в репе + (`lampac-scripts/scripts/plugin-cub.js` + `INJECT` в `build_plugin.py`) + новый + инвариант сборщика. Порядок деплоя — как обычно: сборка → `node --check` → бэкап → + `scp` → рестарт Lampa на ТВ → замер CDP. 3. **Диагностировать 66 с на карточке** — `docker logs lampac` + трейс `CardController`. Запрос: `GET /catalog/card?plugin=watchlist&uri=movie%2F424781&type=movie` → 66 118 мс, 939 Б. 4. **Matcher-parity** (главный блокер с 2026-09-24, см. ниже) — всё ещё не закрыт. -5. **Решение по версионированию плагина** — `lampac_plugin/` в репе `watchlist-sync` - или оставить бэкапы + `build_plugin.py` (см. «Коммитить НЕКУДА»). +5. ✅ **Версионирование плагина — РЕШЕНО:** `lampac-scripts/scripts/`, коммит `5e55a47`. + Развилка «`lampac_plugin/` в `watchlist-sync` vs бэкапы» **закрыта**: плагин + принадлежит `lampac-scripts` (там же `gen_watchlist.py`, `deploy_lampac.py`). **Правило диагностики этой сессии:** не читать `%{size_download}` как «размер фида» (это gzip) — брать `ls -la` или `Accept-Encoding: identity`. И — `ifconfig` на Кра́кене diff --git a/personal/tech/lampac-deployment.md b/personal/tech/lampac-deployment.md index 401d99d7..6b26458f 100644 --- a/personal/tech/lampac-deployment.md +++ b/personal/tech/lampac-deployment.md @@ -136,6 +136,28 @@ curl -s "http://192.168.1.70:9998/json/list" | jq -r '.[] | select(.title=="Lamp рестарта приложения либо подтверждать состояние пробами. - 🔴 `URL страницы ТВ — надёжный индикатор экрана`: `...index.html?title=Главная%20-%20CUB &component=main&source=cub` = главная CUB. +- 🔴🔴 **НЕ ВЕРИТЬ ПЕРВОМУ ЗАМЕРУ ПОСЛЕ РЕСТАРТА LAMPA.** Сразу после `luna-send` + проба даёт `ready=false, plugin=false, patch=false, act_url=ERR, cats=NOMANIFEST` — + выглядит как «плагин вообще не доехал» (`window.plugin_catalog` ставит сам + `startPlugin()`). **Это гонка, а не поломка:** через несколько секунд те же пробы + дают `ready=true, plugin=true, patch=true`. При загрузке CDP-цель имеет `title=""` + и `url=about:blank`. + **Правило:** искать цель по подстроке `url` = `com.lampac.tv`, а НЕ по + `title == "Lampac"` (в момент загрузки `title` пустой, и скрипт молча не находит + цель — выглядит как «ТВ недоступен»). Опрашивать `ready`, пока не станет `true`. + 🔴 **И не спать вслепую:** Alex на `sleep 20` без проверки отреагировал резко + («Чё нахуй за слип 20?!»). Опрашивать состояние в цикле, не ждать таймером. + +### 🔴 `/catalog` — контрольная проверка бэкенда (норма 2026-09-25) + +Прежде чем чинить что-либо в UI, убедиться, что эндпоинт жив: +```bash +ssh kraken 'curl -s -o /dev/null -w "http=%{http_code} size=%{size_download} t=%{time_total}\n" \ + http://127.0.0.1:9118/catalog' # → http=200 size=21470 t=0.44s (холодный) +ssh kraken 'curl -s -o /dev/null -w "http=%{http_code}\n" http://192.168.1.14:9118/catalog' # → 200 по LAN +``` +Тело содержит `watchlist.menu` = `{Новинки, Фильмы, Мультфильмы, Аниме}`. Если здесь всё +исправно — причина в клиенте (гонка загрузки), а не в бэкенде. ### 🔴 `Manifest.catalogs` пуст = фид вставлять некуда @@ -145,6 +167,11 @@ curl -s "http://192.168.1.70:9998/json/list" | jq -r '.[] | select(.title=="Lamp `wl_menu = undefined`, при этом `patch = true`. Диагностировать это ПЕРВЫМ, до разбора логики фильтра. +⚠️ **`Manifest.catalogs` и `window.__wl_menu` расходятся по времени.** Наблюдалось +`menu = Новинки,Фильмы,Мультфильмы,Аниме` (заполнен) при `cats = NOMANIFEST` (пуст) — +`__wl_menu` пишется в `wlMenu()` отдельным запросом. Не считать пустой `catalogs` +доказательством, что меню нет: смотреть оба поля. + ## 🔴 2026-09-24 (вечер): «Мастерская сатаны» — один источник, торренты пусты. План диагностики **Вопрос Alex:** *«для Мастерская сатаны например в lampac в источниках есть только