[2026-09-22] eagle: personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md
This commit is contained in:
1 parent
c4932a84f4
commit
0191154384
2 files changed
+195
-1
No files matched your search
@@ -1445,3 +1445,121 @@ CUB и «Мой список» — **два независимых источн
|
||||
|
||||
Lampa на ТВ кэширует манифест и ответы. После правок **надо полностью
|
||||
выгрузить приложение** (не свернуть), иначе клиент держит старый кэш.
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Анатомия CUB-источника — что нужно, чтобы карточка открылась (разобрано 2026-09-22)
|
||||
|
||||
Разбор `app.min.js` (2.1 МБ; Лампа грузится с сервера, файл живёт в
|
||||
`/lampac/wwwroot/lampa-main/app.min.js`). Копия локально:
|
||||
|
||||
```bash
|
||||
ssh kraken "sudo docker cp lampac:/lampac/wwwroot/lampa-main/app.min.js /tmp/app-min.js"
|
||||
scp -q kraken:/tmp/app-min.js /tmp/app-min.js
|
||||
```
|
||||
|
||||
### Источники регистрируются как `sources = { tmdb: TMDB, cub: CUB }`
|
||||
|
||||
```js
|
||||
var CUB = { main, menu, full: full$1, list, category, clear, person,
|
||||
seasons, menuCategory, discovery, reactionsGet, reactionsAdd,
|
||||
metadataGet, discussGet, extensions };
|
||||
```
|
||||
|
||||
### `CUB.full()` (строка ~34240) — эталон карточки
|
||||
|
||||
```js
|
||||
function full$1(params, oncomplite, onerror) {
|
||||
var status = new Status(9);
|
||||
if (Utils$1.dcma(params.method, params.id)) return onerror();
|
||||
get$7('3/' + params.method + '/' + params.id
|
||||
+ '?api_key=' + TMDB$1.key()
|
||||
+ '&append_to_response=content_ratings,release_dates,external_ids,'
|
||||
+ 'keywords,alternative_titles,images'
|
||||
+ '&language=' + Storage.field('tmdb_lang'), params, function (json) {
|
||||
if (json.status_code) return status.stop(), onerror();
|
||||
json.source = 'cub'; // ← 🔴 CUB проставляет source САМ
|
||||
...
|
||||
status.append('movie', json);
|
||||
}, ...);
|
||||
}
|
||||
```
|
||||
|
||||
**Вывод:** `json.source` — обязательное поле. CUB ставит его сам; наш плагин
|
||||
делает то же (`plugin.js:42`: `json.source = params.source`).
|
||||
|
||||
### Как Explorer открывает карточку
|
||||
|
||||
`Explorer$1` (строка ~39403) читает `this.object.movie || this.object.card || {}`.
|
||||
Данные приезжают из `Activity.push({ component: 'full', id, method, card, source })`.
|
||||
|
||||
Три места, где пушится `full`:
|
||||
|
||||
| Строка | Контекст | `source` |
|
||||
|---|---|---|
|
||||
| **44291** | кнопка «Смотреть» в фиде | `element.data.source \|\| 'tmdb'` |
|
||||
| **40247** | кнопка «Назад» | `params.movie.source` |
|
||||
| **18668** | уведомление | `element.card.source \|\| (ru/uk/be ? 'cub' : '')` |
|
||||
|
||||
🔴 **Фолбэк `|| 'tmdb'`** — если у элемента списка нет поля `source`, Lampa уйдёт
|
||||
в **tmdb**, а не в наш каталог. Проверить, добавляет ли плагин `source` в элементы
|
||||
`catalog/list` (в ответе `/catalog/list` этого поля **нет**).
|
||||
|
||||
### Что читает `full` из ответа карточки (`plugin.js:42-43`)
|
||||
|
||||
```js
|
||||
json.source = params.source;
|
||||
if (json.seasons && json.seasons.length) { ...tv/{tmdb_id}/season/{N}... }
|
||||
if (json.tmdb_id) { ... cub.reactionsGet({id: json.tmdb_id,
|
||||
method: json.original_name ? 'tv' : 'movie'}) ... }
|
||||
if (json.credits) status.data['persons'] = json.credits;
|
||||
if (json.recommendations) status.data['recomend'] = addSource(...);
|
||||
if (json.similar) status.data['simular'] = addSource(...);
|
||||
if (json.videos) status.data['videos'] = addSource(...);
|
||||
status.append('movie', json);
|
||||
```
|
||||
|
||||
→ **Обязательные поля:** `tmdb_id` (**число**), `original_name` или
|
||||
`original_title` (определяет tv/movie), `img`, `overview`.
|
||||
`seasons`/`credits`/`recommendations`/`similar`/`videos` — опциональны.
|
||||
|
||||
### ТВ-диагностика при «здесь пусто»
|
||||
|
||||
| Что | Как проверить |
|
||||
|---|---|
|
||||
| Есть ли соединения ТВ → Lampac | `ssh kraken "sudo ss -tn \| grep 9118"` |
|
||||
| **Ноль соединений** | Lampa на ТВ **не общается с Lampac** — не запущена либо источник не активен |
|
||||
| Захват запросов ТВ | `ssh kraken "sudo timeout 40 tcpdump -i any -n -A 'host 192.168.1.70 and port 9118'"` |
|
||||
| `tcpdump` на Кра́кене | **не был установлен** → поставлен `sudo apt-get install -y tcpdump` (4.99.3) |
|
||||
| Front app на ТВ | `script -q -c "luna-send -n 1 -f luna://com.webos.applicationManager/getForegroundAppInfo {}" /tmp/fg.txt` → вернул `com.lampac.tv` |
|
||||
| `lampac_url` на ТВ | `loader.js`: `localStorage['lampac_url']`, дефолт `http://192.168.1.14:9118` ✅ |
|
||||
| Кэш манифеста | `loader.js`: `cache_version = floor(Date.now()/9e5)` — смена сервера в течение ~15 мин не подхватится |
|
||||
| Служба devtools | `com.webos.service.devtools` **НЕ существует** на webOS 5.4.2 Lite |
|
||||
|
||||
### 🔴 ТРЕБОВАНИЕ Alex: секции ВНУТРИ CUB, БЕЗ ручного переключения
|
||||
|
||||
**Дословно:** «надо блядь добавить в CUB список новые секции а не ручное блядь переключение!»
|
||||
|
||||
Текущий `plugin.js` подменяет разделы через:
|
||||
|
||||
```js
|
||||
Lampa.Listener.follow('menu', function (e) {
|
||||
if (e.type=='action' && (e.action=='tv'||'cartoon'||'anime'||'movie'||'relise')) {
|
||||
var catalog = Api.getCatalog();
|
||||
if (!catalog) return; // ← 🔴 молчит, если активен НЕ наш источник
|
||||
...
|
||||
e.abort();
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
**Почему не работает для CUB:** `Api.getCatalog()` читает
|
||||
`Lampa.Manifest.catalogs[<текущий источник>]`. При выбранном источнике **CUB**
|
||||
нашего каталога там нет → `return` → открывается родной раздел CUB.
|
||||
|
||||
**Что делать вместо этого (задача следующей сессии):**
|
||||
дорисовывать секции в **корень CUB** — не перехватывать `menu`, а патчить рендер
|
||||
главной (строки ~44260-44310: `feed` / `category_full`) либо добавлять ряды через
|
||||
`Lampa.Listener.follow('activity')`. Цель: Alex открывает **обычный CUB** и **сверху
|
||||
видит наши секции** с реальными элементами (постеры, рейтинги) — как в исходной
|
||||
формулировке из [[personal/plans/lampac-watchlist-plugin]].
|
||||
Reference in new issue
Block a user