Files
obsidian-vault/family/how-to/tv-lampac-plugin.md
T

166 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.