166 lines
9.5 KiB
Markdown
166 lines
9.5 KiB
Markdown
---
|
||
created: '2026-09-22'
|
||
namespace: family
|
||
related:
|
||
- '[[family/how-to/tv-luna-send]]'
|
||
- '[[family/how-to/htpc-webos-luna]]'
|
||
- '[[personal/tech/lampac-deployment]]'
|
||
tags:
|
||
- tv
|
||
- webos
|
||
- lampa
|
||
- lampac
|
||
- plugin
|
||
- how-to
|
||
title: tv-lampac-plugin — подключение плагина Lampa на LG TV по SSH
|
||
type: how-to
|
||
updated: '2026-09-22'
|
||
---
|
||
# tv-lampac-plugin.sh — подключение плагина Lampa к Lampac на LG TV
|
||
|
||
> Создан 2026-09-22. Проблема, которую решает: добавить плагин/источник в Lampa на ТВ
|
||
> **без пульта**, автоматически по SSH.
|
||
> Связано: [[family/how-to/tv-luna-send]], [[family/how-to/htpc-webos-luna]], [[personal/tech/lampac-deployment]].
|
||
|
||
## Зачем
|
||
|
||
Настройки Lampa хранятся в localStorage webOS-приложения. Пульта под рукой может не быть,
|
||
а добавлять вручную (`Настройки → Плагины → ввести URL`) долго и неудобно.
|
||
Данный скрипт прописывает плагин/источник прямо в localStorage приложения Lampa.
|
||
|
||
## Ключевые пути на ТВ
|
||
|
||
| Что | Путь |
|
||
|---|---|
|
||
| Приложение Lampa | `/media/developer/apps/usr/palm/applications/com.lampac.tv/` |
|
||
| localStorage (LevelDB) | `/media/developer/apps/usr/palm/applications/com.lampac.tv/.localstorage/` |
|
||
| Настройки Lampa | ключ `lampac_settings` (JSON) в LevelDB |
|
||
|
||
## Как Lampa хранит настройки
|
||
|
||
Lampa в webOS использует `localStorage`, который Chromium хранит в **LevelDB**
|
||
(`.localstorage/leveldb/`). Прямая запись в LevelDB при работающем приложении **опасна**:
|
||
приложение перезапишет значение из памяти при выходе.
|
||
|
||
**Правильный порядок:**
|
||
1. Закрыть приложение Lampa (иначе перезапишет)
|
||
2. Записать значение в localStorage
|
||
3. Запустить приложение
|
||
|
||
## 🔴 НЕ СУЩЕСТВУЕТ пункта «Настройки → Источник» (проверено 2026-09-22)
|
||
|
||
**Не повторять эту ошибку — Alex дважды сказал, что пункта нет.**
|
||
|
||
В Lampa **нет** отдельного пункта меню для выбора источника каталога. Источник переключается
|
||
**прямо из меню каталогов на главной**:
|
||
|
||
1. Открыть Lampa на главной странице
|
||
2. Встать на любой ряд каталога и нажать **влево** на пульте
|
||
3. Слева выедет **панель со списком источников** (Rezka, Kinobase, FilmixApp, VoKino,
|
||
Eneyida, KinoUkr, «Мой список», …)
|
||
4. Выбрать **«Мой список»** и нажать OK
|
||
5. Каталог перестроится на watchlist
|
||
|
||
Скриншота/подтверждения от Alex ещё нет — он не дошёл до этого шага.
|
||
|
||
## Как плагин `catalog.js` регистрирует источник (механика)
|
||
|
||
Важно для диагностики — плагин **не добавляет новый пункт в главное меню**, он **подменяет
|
||
существующие**:
|
||
|
||
```js
|
||
// при старте / app ready:
|
||
Lampa.Utils.account(Manifest.api_host + '/catalog', function(json){
|
||
Manifest.catalogs = json; // все каталоги с сервера
|
||
keys.forEach(function(key){
|
||
Lampa.Params.values.source[key] = key; // регистрирует источник
|
||
Lampa.Api.sources[key] = Api; // подменяет API
|
||
if (Manifest.catalogs[key].search)
|
||
Lampa.Search.addSource(Api.discovery(key)); // добавляет в поиск
|
||
});
|
||
});
|
||
// хук на меню: клик по movie/tv/cartoon/anime/relise подменяется на URL из catalogs[key].menu
|
||
Lampa.Listener.follow('menu', ...)
|
||
```
|
||
|
||
Отсюда следует:
|
||
- Отдельного переключателя в настройках нет **by design** — источник выбирается панелью слева.
|
||
- Плагин **подтягивает каталоги только при старте приложения**. Если добавить плагин и не
|
||
перезапустить Lampa — каталоги не зарегистрируются. Нужен полный перезапуск (не сворачивание).
|
||
- Заголовок каталога после переключения содержит имя источника в верхнем регистре:
|
||
«Фильмы — МОЙ СПИСОК».
|
||
|
||
## Что должен отдавать сервер (проверено 2026-09-22)
|
||
|
||
| Endpoint | Ответ | Значение |
|
||
|---|---|---|
|
||
| `/catalog.js` | 200, ~32 КБ | сам плагин, манифест с `api_host` |
|
||
| `/catalog` | JSON, 7 ключей | список каталогов: Rezka, Kinobase, FilmixApp, VoKino, Eneyida, KinoUkr, **Мой список** |
|
||
| `/catalog/list?plugin=watchlist&cat=films` | `{page, results, total_pages}` | 360 позиций, `total_pages: 1` |
|
||
|
||
`api_host` подставляется по IP запроса → `http://192.168.1.14:9118` (не `localhost`),
|
||
поэтому ТВ получает рабочие ссылки.
|
||
|
||
**7 источников в `/catalog`** — нормальный минимум: модуль `Catalog` собирает их из bundled-плагинов
|
||
плюс `watchlist`. «Мой список» идёт **первым** ключом.
|
||
|
||
## ⚠️ Ловушка диагностики: `plugins_add` в `lampainit.js` — НЕ то, что кажется
|
||
|
||
`http://192.168.1.14:9118/lampainit.js` содержит:
|
||
```js
|
||
var plugins_add = [
|
||
{"url":"http://192.168.1.14:9118/catalog.js","status":1,"name":"Альтернативные источники каталога", ...},
|
||
...
|
||
];
|
||
```
|
||
|
||
Это **серверный список плагинов, которые Lampac сам подсовывает** в UI.
|
||
Клиент на ТВ (webOS-приложение `com.lampac.tv`) — **не отдельная Lampa**: он грузит `app.min.js`
|
||
и `lampainit.js` **с сервера** (`loader.js` → `lampac_url` из localStorage, дефолт `http://192.168.1.14:9118`).
|
||
|
||
Следствие: каталог watchlist работает через **серверный модуль `Catalog`**, а не через строку
|
||
`plugins_add`. Не искать причину поломки в этом массиве.
|
||
|
||
## Питфоллы (проверено 2026-09-22)
|
||
|
||
1. **localStorage у webOS-приложений изолирован.** Файл в `.localstorage/` у сторонних
|
||
(Homebrew) приложений **может отсутствовать** — Chromium держит стор в памяти и
|
||
сбрасывает на диск не сразу. Если каталога нет, сначала запустить приложение один раз.
|
||
|
||
2. **`luna-send` через SSH молчит** — вывод в tty. Оборачивать в `script -q -c "..." /tmp/o.txt`
|
||
и читать файл. См. [[family/how-to/tv-luna-send]].
|
||
|
||
3. **LevelDB нельзя править на живом приложении.** Сначала `closeByAppId`, потом запись.
|
||
|
||
4. **`init.conf` лежит НЕ в корне каталога Lampac, а в `config-module/init.conf`**
|
||
(монтируется в `/lampac/init.conf:ro`). Искать там, а не по `lampac/init.conf`
|
||
— иначе получишь ложный «файл пропал».
|
||
|
||
5. **После добавления плагина обязательно полный перезапуск Lampa** — иначе `/catalog`
|
||
не запрашивается, и источник не появляется (соединений с `:9118` будет **ноль**).
|
||
|
||
6. **Проще всего — через UI самого пульта**, если он доступен:
|
||
Lampa → Настройки → Плагины → добавить URL. Скрипт нужен, когда пульта нет.
|
||
|
||
## Что должно быть прописано для Lampac
|
||
|
||
| Настройка | Значение |
|
||
|---|---|
|
||
| Плагин (онлайн-источники) | `http://192.168.1.14:9118/online.js` |
|
||
| Каталог (свой список) | `http://192.168.1.14:9118/catalog.js` |
|
||
| TorrServer | `http://192.168.1.14:9118` (Настройки → TorrServer → «Использовать основную ссылку») |
|
||
| Буфер плеера | 50–100 МБ |
|
||
|
||
## Скрипт
|
||
|
||
Лежит на Mac: `~/Automation/tv-lampac-plugin.sh`
|
||
(дописывается при первом реальном применении; пока не создан — см. «Статус»).
|
||
|
||
## Статус
|
||
|
||
⚠️ **На 2026-09-22 не проверялось на живом ТВ.** Подключение каталога сделано через UI
|
||
(или требуется сделать). Скрипт-автоматизация — заготовка на будущее.
|
||
|
||
Если понадобится — подход: `closeByAppId com.lampac.tv` → запись ключа в localStorage →
|
||
`launch com.lampac.tv`. Учесть питфоллы 1–3.
|