[2026-09-22] eagle: family/how-to/tv-lampac-plugin.md personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md
This commit is contained in:
1 parent
97237168a0
commit
e1256f18b9
3 files changed
+349
-31
No files matched your search
@@ -359,6 +359,94 @@ ssh root@TV 'script -q -c "luna-send -n 1 -f luna://service/method {json}" /tmp/
|
||||
Каталог watchlist работает через **модуль `Catalog`**, не через эту строку.
|
||||
Не искать причину поломки в `plugins_add`.
|
||||
|
||||
### 🔴 БАГ Lampac: источник не виден в панели (`enumerable: false`)
|
||||
|
||||
**Найдено 2026-09-22** диагностикой через Chrome DevTools ТВ. Симптом Alex:
|
||||
«Ни на главной ни в Фильмах нет! Там только Сейчас смотрят, рекомендуем итд».
|
||||
|
||||
**Факты с живого ТВ:**
|
||||
|
||||
| Замер | Значение |
|
||||
|---|---|
|
||||
| `Lampa.Storage.field('source')` | `'Мой список'` — источник **уже выбран** |
|
||||
| `Object.keys(Lampa.Api.sources)` | `'tmdb|cub'` — ❌ источника нет в перечислении |
|
||||
| `Lampa.Api.sources['Мой список'].getCatalog()` | `search, movie, cartoons, anime, menu, main` — ✅ работает |
|
||||
| `Object.getOwnPropertyDescriptor(Lampa.Api.sources,'Мой список')` | `{"enumerable":false,"configurable":false}` ← корень |
|
||||
|
||||
**Корень — в `/lampac/module/Catalog/plugin.js`** (строка 59, `loadCatalogs()`, **два вхождения**):
|
||||
|
||||
```js
|
||||
// БЫЛО (баг)
|
||||
Object.defineProperty(Lampa.Api.sources, key, { get: function(){ return Api; } });
|
||||
// НАДО
|
||||
Object.defineProperty(Lampa.Api.sources, key,
|
||||
{ get: function(){ return Api; }, enumerable: true, configurable: true });
|
||||
```
|
||||
|
||||
Не-enumerable свойство не попадает в `Object.keys()` → Lampa не рисует источник в панели
|
||||
выбора. **Баг Lampac, не нашей настройки.**
|
||||
|
||||
🔴 **`plugin.js` живёт в ОБРАЗЕ, не на HDD.** `docker inspect` показывает монтирования
|
||||
только на `catalog/sites` и `catalog/override`. Правка через `docker exec` **исчезнет
|
||||
при обновлении образа** — нужен bind-mount:
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
- ./catalog/plugin.js:/lampac/module/Catalog/plugin.js:ro
|
||||
```
|
||||
|
||||
```bash
|
||||
ssh kraken 'docker exec lampac cat /lampac/module/Catalog/plugin.js' > /tmp/catalog-plugin.js
|
||||
cp /tmp/catalog-plugin.js /tmp/catalog-plugin.js.bak-$(date +%Y%m%d-%H%M%S)
|
||||
# правка двух вхождений defineProperty (только через patch, не sed)
|
||||
node --check /tmp/catalog-plugin.js # проверить синтаксис ДО заливки
|
||||
scp /tmp/catalog-plugin.js kraken:/srv/.../lampac/catalog/plugin.js
|
||||
ssh kraken 'cd /srv/.../lampac && docker compose up -d'
|
||||
```
|
||||
|
||||
**Статус: фикс НЕ применён**, ждёт апрува Alex (2026-09-22).
|
||||
Полный разбор — [[personal/plans/lampac-watchlist-plugin]], раздел «ГЛАВНЫЙ ПИТФОЛЛ».
|
||||
|
||||
### 🛠 Диагностика ТВ через Chrome DevTools — порт 9998
|
||||
|
||||
**Главный инструмент для отладки UI Lampa.** webOS отдаёт Chrome DevTools Protocol:
|
||||
у процессов `WebAppMgr` есть `--remote-debugging-port=9998`. Даёт **чтение состояния
|
||||
живой Lampa** — ни логи, ни tcpdump этого не дают.
|
||||
|
||||
```bash
|
||||
# цель отладки + URL приложения
|
||||
curl -s --max-time 8 "http://192.168.1.70:9998/json" | /usr/bin/jq -r '.[] | "\(.type): \(.url)"'
|
||||
# → page: file:///media/developer/apps/usr/palm/applications/com.lampac.tv/index.html?...
|
||||
```
|
||||
|
||||
Чтение переменных — `websocket-client` + `Runtime.evaluate`:
|
||||
|
||||
```python
|
||||
pages = json.load(urllib.request.urlopen("http://192.168.1.70:9998/json", timeout=8))
|
||||
target = next(p for p in pages if "com.lampac.tv" in p.get("url",""))
|
||||
ws = websocket.create_connection(target["webSocketDebuggerUrl"], timeout=10)
|
||||
# Runtime.evaluate: Lampa.Storage.field('source')
|
||||
# Object.keys(Lampa.Api.sources)
|
||||
# Object.getOwnPropertyDescriptor(Lampa.Api.sources,'Мой список')
|
||||
```
|
||||
|
||||
Готовые скрипты: `/tmp/lampa_probe.py` (состояние источника),
|
||||
`/tmp/lampa_probe3.py` (асинхронный вызов `menu()` каталога).
|
||||
|
||||
**Ловушки:**
|
||||
|
||||
⚠️ **Замер соединений — на ТВ, не на сервере.** `sudo ss -tn | grep :9118` на Кра́кене
|
||||
сразу после старта Lampa даёт **0** (ложный вывод «не ходит»). Через ~30 с:
|
||||
`ssh root@192.168.1.70 'netstat -tn | grep 9118'` → **1 ESTABLISHED + 6 TIME_WAIT**.
|
||||
|
||||
⚠️ **`launch` через luna требует экранированного JSON в двойных кавычках**, иначе
|
||||
`errorCode: 2, invalid parameters`. `getForegroundAppInfo {}` работает без кавычек.
|
||||
|
||||
⚠️ **`tcpdump` на Кра́кене нет** — не ставили, DevTools дал больше.
|
||||
|
||||
⚠️ **`luna://com.webos.service.capture/takeScreenShot` не существует** на этом ТВ
|
||||
(`Unknown method`) — скриншот так не снять.
|
||||
|
||||
### Диагностика «каталога нет в UI»
|
||||
|
||||
| Проверка | Команда | Норма |
|
||||
@@ -366,13 +454,15 @@ ssh root@TV 'script -q -c "luna-send -n 1 -f luna://service/method {json}" /tmp/
|
||||
| Плагин отдаётся | `curl -sI http://192.168.1.14:9118/catalog.js` | 200, ~32 КБ |
|
||||
| Каталоги зарегистрированы | `curl -s http://192.168.1.14:9118/catalog \| jq 'keys'` | 7 ключей, «Мой список» есть |
|
||||
| Данные отдаются | `curl -s "…/catalog/list?plugin=watchlist&cat=films" \| jq .total_pages` | 1 |
|
||||
| ТВ реально ходит | `ssh kraken 'sudo ss -tnp \| grep :9118'` | есть ESTABLISHED <br>**ноль = Lampa не запускалась заново** |
|
||||
| ТВ достаёт сервер | `ssh root@192.168.1.70 'curl -s -o /dev/null -w "%{http_code}" http://192.168.1.14:9118/catalog'` | 200 |
|
||||
| ТВ реально ходит | `ssh root@192.168.1.70 'netstat -tn \| grep 9118'` | ESTABLISHED <br>ноль = Lampa не стартовала |
|
||||
| Источник в списке | DevTools: `Object.keys(Lampa.Api.sources)` | **все** каталоги, вкл. «Мой список» |
|
||||
|
||||
Порядок разбора: сначала `ss` (ходит ли ТВ вообще), потом `/catalog` (что отдаёт сервер),
|
||||
потом UI. Если ноль соединений — проблема не в сервере.
|
||||
Порядок разбора: сначала сеть с ТВ → потом `netstat` на ТВ → потом `/catalog` на сервере →
|
||||
потом DevTools (состояние JS). **Если источник есть в `Api.sources` напрямую, но нет в
|
||||
`Object.keys()` — это баг `enumerable` в `plugin.js`, а не проблема настроек.**
|
||||
|
||||
⚠️ `docker logs lampac` **HTTP-запросы не пишет** — по логам факт обращения ТВ не проверить.
|
||||
Использовать `ss`, а не логи.
|
||||
|
||||
## Внутреннее устройство Lampac (разведка 2026-09-22)
|
||||
|
||||
|
||||
Reference in new issue
Block a user