[2026-09-22] eagle: family/how-to/tv-lampac-plugin.md personal/plans/lampac-kraken.md personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md
This commit is contained in:
1 parent
3e4ebf70aa
commit
0edc4fe42f
4 files changed
+443
-86
No files matched your search
@@ -0,0 +1,84 @@
|
||||
---
|
||||
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)
|
||||
|
||||
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. **Проще всего — через 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.
|
||||
@@ -49,9 +49,13 @@ related:
|
||||
## Что разворачиваем
|
||||
|
||||
`lampac-nextgen/lampac` (MIT, .NET 10), порт **9118**.
|
||||
Внутри: TorrServer (subprocess) + JacRed (Jackett-совместимый индексатор) + LampaWeb + TmdbProxy + DLNA.
|
||||
Внутри: TorrServer (subprocess) + JacRed (Jackett-совместимый индексатор) + LampaWeb + TmdbProxy + DLNA
|
||||
+ **Catalog** (каталоги; включён нами — см. шаг 7).
|
||||
|
||||
**Плагины для Lampa:**
|
||||
- `http://<lampac>:9118/online.js` — онлайн-источники (70+)
|
||||
- `http://<lampac>:9118/catalog.js` — каталог «Мой список» (watchlist)
|
||||
|
||||
**Плагин для Lampa:** `http://<lampac>:9118/online.js`
|
||||
**UI для LG:** `/lg.ipk` отдаёт сам Lampac.
|
||||
|
||||
## Целевой хост
|
||||
@@ -134,14 +138,21 @@ curl -fsS "http://localhost:9118/version?type=hash"
|
||||
- буфер плеера: **50–100 МБ**
|
||||
- качество по скорости: до 10 Мбит → 720p; 10–25 → 1080p
|
||||
|
||||
### 7. 🔜 Следующий шаг после плана — ПЛАГИН БИБЛИОТЕКИ
|
||||
### 7. 🔜 Шаг 7 плана — ВЫПОЛНЕН (серверная часть)
|
||||
|
||||
После того как Lampac поднят и Lampa с ним работает — **следующим шагом ставим плагин библиотеки**,
|
||||
чтобы ТВ видел фильмы, а не только публичные раздачи.
|
||||
**Статус: сделано 2026-09-22.** Отдельный план — [[personal/plans/lampac-watchlist-plugin]].
|
||||
|
||||
- Источник библиотеки: медиафайлы на диске Кра́кена
|
||||
- Механизм: плагин Lampa, который ходит к библиотеке как к источнику воспроизведения
|
||||
- Детали механизма — **отдельный план** после приёмки шагов 1–6
|
||||
Итог: `movies-watchlist.md` отдаётся каталогом Lampa через модуль `Catalog`:
|
||||
|
||||
- Плагин на ТВ: `http://192.168.1.14:9118/catalog.js` → источник **«Мой список»**
|
||||
- 4 категории: Фильмы 360 · Новинки 34 · Мультфильмы 3 · Аниме 7
|
||||
- Автообновление: cron `30 2 * * *` → `~/scripts/watchlist-catalog.sh`
|
||||
|
||||
⚠️ **Исходная формулировка шага 7 была неточной** («плагин, который ходит к библиотеке
|
||||
как к источнику воспроизведения»). Уточнено Alex: задача — **отображение списка**, не плейбэк.
|
||||
Механизм — встроенный модуль `Catalog`, свой плагин не писался.
|
||||
|
||||
**Осталось:** Alex добавляет плагин на ТВ пультом (1 минута, см. план).
|
||||
|
||||
## Журнал сессии 2026-09-22 (вторая часть)
|
||||
|
||||
@@ -241,47 +252,85 @@ curl -fsS "http://localhost:9118/version?type=hash"
|
||||
**Отключить выбор источника:** Lampa → Настройки → Плагины → выключить `online.js`.
|
||||
Останутся только торренты.
|
||||
|
||||
### Следующий шаг
|
||||
### Следующий шаг — ✅ ВЫПОЛНЕН 2026-09-22
|
||||
|
||||
Шаг 7 плана — **плагин библиотеки** (watchlist в UI Lampa).
|
||||
Детали — отдельный план `personal/plans/lampac-watchlist-plugin.md`.
|
||||
Отдельно решается: [[family/how-to/tv-luna-send]] и [[family/how-to/htpc-webos-luna]].
|
||||
Шаг 7 (watchlist в UI Lampa) **сделан**. Полный план и все питфоллы —
|
||||
[[personal/plans/lampac-watchlist-plugin]]. Кратко:
|
||||
|
||||
### Где что лежит (шаги 1–2, финально)
|
||||
- Включён встроенный модуль **`Catalog`** (`SkipModules` без него + `catalog: true`)
|
||||
- Написан генератор `gen_watchlist.py`: `movies-watchlist.md` → JSON
|
||||
- `init.conf`, `sites/`, `wwwroot/` смонтированы на HDD — правки переживают пересоздание
|
||||
- Cron `30 2 * * *` → `~/scripts/watchlist-catalog.sh`
|
||||
- Отдача: 4 категории — Фильмы 360 · Новинки 34 · Мультфильмы 3 · Аниме 7
|
||||
|
||||
⚠️ **Смонтирован `config-module/init.conf` — это исправляет шаг «init.conf без volume»**,
|
||||
который раньше числился в открытых задачах.
|
||||
|
||||
Осталось на Alex: добавить на ТВ плагин `http://192.168.1.14:9118/catalog.js` (пультом).
|
||||
|
||||
Сопутствующие доки: [[family/how-to/tv-luna-send]], [[family/how-to/htpc-webos-luna]],
|
||||
[[family/how-to/tv-lampac-plugin]].
|
||||
|
||||
### Где что лежит (финально)
|
||||
|
||||
```
|
||||
Кра́кен: /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac/
|
||||
├── docker-compose.yml # lampac + встроенный TorrServer, порт 9118
|
||||
├── config/ # → /lampac/config
|
||||
├── cache/ # → /lampac/cache (кэш TorrServer)
|
||||
└── data/ # → /lampac/data (БД JacRed)
|
||||
├── docker-compose.yml # lampac + встроенный TorrServer, порт 9118
|
||||
├── config/ # → /lampac/config
|
||||
├── cache/ # → /lampac/cache (кэш TorrServer)
|
||||
├── data/ # → /lampac/data (БД JacRed)
|
||||
├── config-module/init.conf # → /lampac/init.conf:ro (включает Catalog)
|
||||
├── catalog/sites/ # → /lampac/module/Catalog/sites
|
||||
├── catalog/override/ # → /lampac/module/Catalog/override
|
||||
├── wwwroot/ # → /lampac/wwwroot (JSON-каталог)
|
||||
└── scripts/gen_watchlist.py # генератор .md → JSON
|
||||
```
|
||||
|
||||
Содержимое `docker-compose.yml`:
|
||||
```yaml
|
||||
services:
|
||||
lampac:
|
||||
image: ghcr.io/lampac-nextgen/lampac:latest
|
||||
container_name: lampac
|
||||
platform: linux/arm64
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9118:9118"
|
||||
environment:
|
||||
- TZ=Asia/Bishkek
|
||||
- LANG=ru_RU.UTF-8
|
||||
volumes:
|
||||
- ./config:/lampac/config
|
||||
- ./cache:/lampac/cache
|
||||
- ./data:/lampac/data
|
||||
```
|
||||
Полный актуальный compose — в [[personal/tech/lampac-deployment]] (раздел docker-compose).
|
||||
Здесь не дублирую: файл меняется, а копия в двух местах гарантированно рассинхронизируется.
|
||||
|
||||
Управление: `cd /srv/.../lampac && docker compose {up -d,logs -f,restart,down}`.
|
||||
Правка compose — без `sudo` (каталог `kraken:kraken`), но создание каталогов — через `sudo mkdir`.
|
||||
|
||||
## Журнал сессии 2026-09-22
|
||||
## Журнал сессии 2026-09-22 (третья часть) — каталог watchlist
|
||||
|
||||
**Итог: правки плана выполнены, шаги 1–6 НЕ начаты.**
|
||||
**Шаг 7 выполнен. Все шаги 1–7 базового плана закрыты (кроме шага 3 — лимит кэша).**
|
||||
|
||||
Работа велась по отдельному плану [[personal/plans/lampac-watchlist-plugin]].
|
||||
Ключевое, что касается этого документа:
|
||||
|
||||
**Изменён `docker-compose.yml`** — добавлено 4 монтирования (7 всего):
|
||||
|
||||
| Монтирование | Зачем |
|
||||
|---|---|
|
||||
| `./config-module/init.conf:/lampac/init.conf:ro` | включает модуль Catalog |
|
||||
| `./catalog/sites:/lampac/module/Catalog/sites` | описания каталогов |
|
||||
| `./catalog/override:/lampac/module/Catalog/override` | переопределения |
|
||||
| `./wwwroot:/lampac/wwwroot` | JSON-каталог отдаётся статикой |
|
||||
|
||||
**Создан `config-module/init.conf`** — минимальный, перекрывает `base.conf`:
|
||||
`SkipModules` без `Catalog` + `LampaWeb.initPlugins.catalog: true`.
|
||||
|
||||
🔴 **Питфолл `SkipModules`:** наш `init.conf` **перекрывает** `base.conf`, а не сливается с ним.
|
||||
Поэтому список `SkipModules` надо повторять **целиком** — иначе модули из base вернутся к дефолту.
|
||||
|
||||
### Ошибки сессии
|
||||
|
||||
1. 🔴 **Придумал вопрос «что играть по клику»** (развилка A/B/C про источник воспроизведения).
|
||||
Alex: «я чё тебе сказал в постановке задачи». Задача была — **отображение**, не плейбэк.
|
||||
**Урок:** в постановке было сказано буквально; развилки сверх неё — выдумка.
|
||||
2. 🔴 **Полез разбирать `luna-send` наугад**, не прочитав доки по ТВ. Они уже были:
|
||||
[[family/how-to/tv-luna-send]], [[family/how-to/htpc-webos-luna]] — там прямо описан
|
||||
питфолл «пишет в tty, нужен `script -q -c`». Alex: «Доки по тв читал?!».
|
||||
**Урок:** перед работой с хостом — искать док в vault, а не экспериментировать.
|
||||
|
||||
### Что осталось
|
||||
|
||||
1. **Лимит кэша TorrServer** (шаг 3) — дефолт. Единственный незакрытый шаг. Критичность низкая.
|
||||
2. **Alex добавляет плагин на ТВ** пультом — `catalog.js`.
|
||||
3. **Проверка полосы на торрент-источнике** — не сделана.
|
||||
|
||||
## Журнал сессии 2026-09-22
|
||||
|
||||
### Что сделано
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ related:
|
||||
- '[[family/projects/watchlist-sync]]'
|
||||
- '[[family/projects/watchlist-automation]]'
|
||||
- '[[family/documents/movies-watchlist]]'
|
||||
status: proposed
|
||||
status: active
|
||||
tags:
|
||||
- lampac
|
||||
- lampa
|
||||
@@ -21,16 +21,26 @@ type: plan
|
||||
updated: '2026-09-22'
|
||||
---
|
||||
|
||||
# Watchlist в UI Lampa — каталог из списка (план)
|
||||
# Watchlist в UI Lampa — каталог из списка
|
||||
|
||||
> Составлен 2026-09-22, переписан после разведки кода Catalog. Ждёт подтверждения Alex.
|
||||
> Реализовано 2026-09-22. План был переписан после разведки кода модуля Catalog.
|
||||
> Базовое развёртывание — [[personal/plans/lampac-kraken]] (шаги 1–6 закрыты).
|
||||
>
|
||||
> **Итог одной строкой:** Lampac отдаёт `movies-watchlist.md` как каталог Lampa
|
||||
> через модуль `Catalog` → 4 категории (360/34/3/7 позиций), автообновление кроном 02:30.
|
||||
> Работает на стороне сервера; на ТВ остаётся добавить плагин
|
||||
> `http://192.168.1.14:9118/catalog.js` (см. «Что осталось на Alex»).
|
||||
|
||||
## Задача
|
||||
|
||||
Показывать список фильмов Alex (`family/documents/movies-watchlist.md`) **в UI Lampa на ТВ** — каталогом.
|
||||
Не локальный плейбэк. Формулировка Alex: «отображение фильмов из списка».
|
||||
|
||||
⚠️ **Что НЕ спрашивать повторно.** Задача — **отображение**, не воспроизведение.
|
||||
Список — это перечень, а не источник видео. Вопрос «а что играть по клику?» —
|
||||
**выдумка сверх постановки**, Alex на него реагировал раздражением («я чё тебе сказал в постановке задачи»).
|
||||
Штатное воспроизведение Lampa (торренты/онлайн) работает само, отдельно решать нечего.
|
||||
|
||||
## ✅ Затык снят: чем это делается
|
||||
|
||||
В образе Lampac уже есть модуль **`Catalog`** — YAML-каталоги → плагин Lampa `/catalog.js`.
|
||||
@@ -139,35 +149,179 @@ Lampa на ТВ: плагин http://192.168.1.14:9118/catalog.js
|
||||
|
||||
**Склоняюсь к (1)** — генерировать `wwwroot/watchlist.json`, Lampac отдаёт его сам, без новых сущностей.
|
||||
|
||||
## Что показывать в каталоге
|
||||
## Обновление каталога — реализовано
|
||||
|
||||
Секции берём из самого файла: `## Фильмы`, `## Мультфильмы`, `## Аниме` → три категории меню.
|
||||
Поля: `name` (название), `year`, `href` (ссылка на Кинопоиск — уже есть в файле как `[название](https://www.kinopoisk.ru/film/NNN/)`),
|
||||
`image` — постер (можно взять через TMDB-кэш Lampac, `tmdbproxy`).
|
||||
Скрипт `~/scripts/watchlist-catalog.sh` (root:root, ставить только `sudo install -m 755`):
|
||||
|
||||
⚠️ **`href` в файле — ссылка Кинопоиска**, а Lampa ждёт карточку. Отрисовку карточки решает `card_parse`
|
||||
(в vokino он ходит по `{host}/view/{uri}`). Для нашего случая возможен режим **только список, без карточки** —
|
||||
проверить на этапе реализации.
|
||||
1. `python3 $LAMPAC/scripts/gen_watchlist.py <watchlist.md> $LAMPAC/wwwroot/watchlist.json`
|
||||
2. `docker restart lampac` — **обязательно**, сбрасывает кэш Catalog (см. питфолл 3)
|
||||
|
||||
## Обновление каталога
|
||||
Cron: `30 2 * * *` → лог `~/logs/watchlist-catalog.log`.
|
||||
Время выбрано после `watchlist-nightly` (01:00) и `watchlist-cleanup` (02:00).
|
||||
|
||||
- Генератор дёргать **после** `watchlist-nightly.sh` (уже кроном 01:00 на Кра́кене) — догенерировать JSON
|
||||
- ⚠️ `watchlist-nightly.sh` в `~/scripts/` — **root:root**, правка только `sudo install -m 755`
|
||||
- Партия данных меняется (`⬇️`, `[x]`, 👍→перенос) — JSON пересобирать после каждого прогона
|
||||
Бэкап crontab перед установкой: `~/crontab-backup-20260922-112915.txt`.
|
||||
|
||||
## Шаги (черновик, уточняется на этапе реализации)
|
||||
⚠️ **`watchlist-catalog.sh` сделан отдельной задачей, а не врезан в `watchlist-nightly.sh`.**
|
||||
Причина: `nightly` — рабочий боевой скрипт, его падение остановило бы весь пайплайн списка.
|
||||
Отдельный cron падает изолированно.
|
||||
|
||||
1. Включить модуль Catalog: `SkipModules` + `catalog: true`, закрепить `init.conf` volume.
|
||||
2. Смонтировать `module/Catalog/` (или только `sites/` + `override/`) на HDD — чтобы каталоги не терялись.
|
||||
3. Написать генератор `movies-watchlist.md` → JSON (переиспользовать `parser.py` из watchlist-sync).
|
||||
4. Положить JSON туда, откуда Lampac отдаёт статику.
|
||||
5. Написать `sites/watchlist.yaml` по образцу `vokino.yaml`.
|
||||
6. Подключить на ТВ: Lampa → Настройки → Плагины → `http://192.168.1.14:9118/catalog.js`.
|
||||
7. **Приёмка:** категории видны в UI Lampa на ТВ, названия совпадают со списком.
|
||||
## Что осталось на Alex (единственное незакрытое)
|
||||
|
||||
Добавить плагин на ТВ — **пультом**, 1 минута:
|
||||
|
||||
1. Lampa → **Настройки → Плагины** → добавить URL `http://192.168.1.14:9118/catalog.js`
|
||||
2. Lampa → **Настройки → Источник** → выбрать **«Мой список»**
|
||||
|
||||
Приёмка = категории видны в UI Lampa, названия совпадают с `movies-watchlist.md`.
|
||||
|
||||
Автоматизация этого шага по SSH **не проверялась** — см. [[family/how-to/tv-lampac-plugin]]
|
||||
(там заготовка подхода и питфоллы localStorage).
|
||||
|
||||
## Известные ограничения
|
||||
|
||||
| Ограничение | Детали |
|
||||
|---|---|
|
||||
| **Постеров нет** | `image` пустой. Опционально — тянуть через TMDB-кэш Lampac (`tmdbproxy`) |
|
||||
| **Карточки нет** | Только список названий. `card_parse` не настроен — Lampa может показывать пустую карточку |
|
||||
| **`🗓️` upcoming показываются** | Не прячем. Решение Alex не запрашивалось |
|
||||
| **Перезапуск контейнера** | Каждое обновление каталога = `docker restart lampac` (~30 сек простоя). Кэш не инвалидируется иначе |
|
||||
|
||||
## ⚠️ Что проверено, а что нет
|
||||
|
||||
**Проверено по HTTP (серверная часть):**
|
||||
|
||||
| Проверка | Результат |
|
||||
|---|---|
|
||||
| `/catalog.js` по IP | 200, `api_host:'http://192.168.1.14:9118'` |
|
||||
| Каталог в `/catalog` | «Мой список» в списке каналов |
|
||||
| JSON-файлы | `watchlist.json` + `watchlist-{films,new,cartoons,anime}.json` — все 200 |
|
||||
| Выдача по категориям | films 360 · new 34 · cartoons 3 · anime 7 |
|
||||
| Сортировка | ⭐ → рейтинг ↓ → ужасы |
|
||||
| Чистота названий | эмодзи-маркеров 0 |
|
||||
|
||||
**НЕ проверено:**
|
||||
|
||||
- ❌ **UI Lampa на ТВ** — Alex ещё не добавил плагин. Это единственная непроверенная часть.
|
||||
- ❌ Боевой прогон крона в 02:30 (скрипт отработал вручную успешно).
|
||||
- ❌ Карточка/постеры в UI.
|
||||
|
||||
## Файлы реализации (на HDD Кра́кена)
|
||||
|
||||
Корень: `/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac/`
|
||||
|
||||
| Путь | Роль |
|
||||
|---|---|
|
||||
| `config-module/init.conf` | включает Catalog → `/lampac/init.conf:ro` |
|
||||
| `catalog/sites/watchlist.yaml` | описание каталога |
|
||||
| `catalog/override/` | переопределения (пусто) |
|
||||
| `wwwroot/watchlist.json` | все секции |
|
||||
| `wwwroot/watchlist-<code>.json` | по файлу на категорию |
|
||||
| `scripts/gen_watchlist.py` | генератор |
|
||||
| `docker-compose.yml` | 7 монтирований; бэкапы `.bak-*` |
|
||||
|
||||
На хосте: `~/scripts/watchlist-catalog.sh`, лог `~/logs/watchlist-catalog.log`.
|
||||
|
||||
## Откат
|
||||
|
||||
`catalog: false` + вернуть `Catalog` в `SkipModules`. Ничего в Lampac не патчится.
|
||||
```bash
|
||||
# выключить каталог
|
||||
ssh kraken 'sed -i "s/\"catalog\": true/\"catalog\": false/" \
|
||||
/srv/.../lampac/config-module/init.conf && docker restart lampac'
|
||||
# в Lampa убрать плагин catalog.js
|
||||
# cron: crontab -l | grep -v watchlist-catalog | crontab -
|
||||
```
|
||||
|
||||
Ничего в коде Lampac не патчилось — только конфиг и данные.
|
||||
|
||||
## Статус: ✅ РЕАЛИЗОВАНО 2026-09-22
|
||||
|
||||
Каталог «Мой список» работает, отдаётся в Lampa через `/catalog.js`.
|
||||
|
||||
### Что сделано
|
||||
|
||||
| # | Шаг | Результат |
|
||||
|---|---|---|
|
||||
| 1 | Включён модуль Catalog | `SkipModules` без Catalog + `catalog: true` → `/catalog.js` 200 |
|
||||
| 2 | `init.conf` смонтирован | `./config-module/init.conf:/lampac/init.conf:ro` — правится на HDD, не теряется |
|
||||
| 3 | `sites/` + `override/` смонтированы | `./catalog/sites`, `./catalog/override` |
|
||||
| 4 | `wwwroot` смонтирован | `./wwwroot` — Lampac сам отдаёт JSON по HTTP |
|
||||
| 5 | Генератор написан | `lampac/scripts/gen_watchlist.py` |
|
||||
| 6 | `sites/watchlist.yaml` создан | `lampac/catalog/sites/watchlist.yaml` |
|
||||
| 7 | Автообновление в cron | `30 2 * * *` → `~/scripts/watchlist-catalog.sh` |
|
||||
| 8 | Проверка | 4 категории: films 360, new 34, cartoons 3, anime 7 |
|
||||
|
||||
### Архитектура (финальная)
|
||||
|
||||
```
|
||||
family/documents/movies-watchlist.md ← источник
|
||||
│ gen_watchlist.py (свой парсер, ~200 строк)
|
||||
▼
|
||||
lampac/wwwroot/watchlist.json ← все секции
|
||||
lampac/wwwroot/watchlist-<code>.json ← по файлу на категорию
|
||||
│ Lampac отдаёт wwwroot по HTTP сам
|
||||
▼
|
||||
lampac/catalog/sites/watchlist.yaml ← описание для Catalog
|
||||
│ plugin=watchlist, jsonPath: true, nodes: $.items[*]
|
||||
▼
|
||||
Lampa на ТВ: плагин http://192.168.1.14:9118/catalog.js
|
||||
```
|
||||
|
||||
### 🔴 Питфоллы, найденные по ходу (не повторять)
|
||||
|
||||
1. **Catalog ВЫБРАСЫВАЕТ элемент с пустым `href`.**
|
||||
`ListController.cs`: `if (!IsNullOrWhiteSpace(name) && !IsNullOrWhiteSpace(href))`.
|
||||
Симптом: из 404 позиций отдалось 52 — ровно те, у кого есть ссылка Кинопоиска.
|
||||
**Фикс:** генератор подставляет fallback-href
|
||||
`https://www.kinopoisk.ru/index.php?kp_query=<название>`.
|
||||
|
||||
2. **Catalog НЕ подставляет `{cat}` в `nodes`.**
|
||||
JSONPath статичен, отфильтровать секцию внутри одного файла нечем.
|
||||
Симптом: все категории отдавали весь список (404 вместо 360/34/3/7).
|
||||
**Фикс:** генератор пишет отдельный плоский файл на категорию
|
||||
(`watchlist-films.json` и т.д.), `nodes: "$.items[*]"` одинаков для всех.
|
||||
|
||||
3. **Кэш Catalog без версии данных.**
|
||||
Ключ `catalog:{plugin}:{search}:{sort}:{cat}:{page}` — не зависит от содержимого.
|
||||
Симптом: после перегенерации JSON выдача не менялась.
|
||||
**Фикс:** `docker restart lampac` в скрипте обновления.
|
||||
|
||||
4. **`init.conf` не был смонтирован.**
|
||||
Файл живёт в образе; правки через `docker exec` теряются при пересоздании.
|
||||
Правки шли в `current.conf` (сгенерированный) — неверная цель.
|
||||
**Фикс:** volume `:ro` + свой минимальный `init.conf` (перекрывает `base.conf`).
|
||||
|
||||
5. **`api_host` подставляется из запроса** (`{localhost}` → хост, по которому пришли).
|
||||
По IP `192.168.1.14` отдаёт правильный адрес — специально ничего настраивать не нужно.
|
||||
|
||||
6. **Кириллица в inline-jq внутри `ssh '...'`** ломает команду (tirith + quoting).
|
||||
Выносить в файл или убирать строки с кириллицей.
|
||||
|
||||
### Управление
|
||||
|
||||
```bash
|
||||
ssh kraken
|
||||
cd /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac
|
||||
|
||||
# перегенерировать каталог + сбросить кэш
|
||||
bash ~/scripts/watchlist-catalog.sh
|
||||
|
||||
# логи
|
||||
tail -f ~/logs/watchlist-catalog.log
|
||||
|
||||
# только генератор (без перезапуска)
|
||||
python3 scripts/gen_watchlist.py \
|
||||
/home/kraken/obsidian/family/documents/movies-watchlist.md \
|
||||
wwwroot/watchlist.json
|
||||
```
|
||||
|
||||
### Откат
|
||||
|
||||
```bash
|
||||
# выключить каталог
|
||||
ssh kraken 'sed -i "s/\"catalog\": true/\"catalog\": false/" \
|
||||
/srv/.../lampac/config-module/init.conf && docker restart lampac'
|
||||
# в Lampa убрать плагин catalog.js
|
||||
```
|
||||
|
||||
## Правила отбора и сортировки (утверждено Alex 2026-09-22)
|
||||
|
||||
@@ -204,16 +358,21 @@ Lampa на ТВ: плагин http://192.168.1.14:9118/catalog.js
|
||||
Для строк без рейтинга (например `- [ ] Gods don't give gifts`) — сортировать как `0`, в конец группы.
|
||||
Опционально: добирать через TMDB (кэш `tmdbproxy` в Lampac) — решить при реализации.
|
||||
|
||||
## Открытые вопросы
|
||||
## Открытые вопросы (не блокируют, решение Alex не запрошено)
|
||||
|
||||
1. **Нужна ли карточка** (описание/рейтинг внутри Lampa), или достаточно списка названий с постерами?
|
||||
2. **Постеры** — тянуть через TMDB-кэш Lampac или не тянуть вовсе?
|
||||
3. **`🗓️` upcoming** — показывать или прятать? (сейчас по умолчанию показываем)
|
||||
1. **Постеры** — тянуть через TMDB-кэш Lampac или не тянуть вовсе? Сейчас пустые.
|
||||
2. **Карточка** — нужна ли (описание/рейтинг внутри Lampa), или достаточно списка названий?
|
||||
3. **`🗓️` upcoming** — показывать или прятать? Сейчас показываем.
|
||||
4. **`❓` ambiguous** — сейчас показываем с названием как есть.
|
||||
|
||||
Ни один из них **не мешает работе** — каталог отдаётся, категории на месте.
|
||||
Спрашивать только если Alex сам затронет тему.
|
||||
|
||||
## Связанные
|
||||
|
||||
- [[personal/plans/lampac-kraken]] — базовое развёртывание
|
||||
- [[personal/tech/lampac-deployment]] — эксплуатация, порты, питфоллы
|
||||
- [[personal/plans/lampac-kraken]] — базовое развёртывание (шаги 1–6 сделаны)
|
||||
- [[personal/tech/lampac-deployment]] — эксплуатация Lampac, модуль Catalog
|
||||
- [[family/how-to/tv-lampac-plugin]] — подключение плагина на ТВ
|
||||
- [[family/projects/watchlist-sync]] — парсер списка, CLI
|
||||
- [[family/projects/watchlist-automation]] — форматы маркеров, cron
|
||||
- [[family/documents/movies-watchlist]] — источник данных
|
||||
@@ -40,17 +40,22 @@ related:
|
||||
|
||||
```
|
||||
/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac/
|
||||
├── docker-compose.yml
|
||||
├── config/ → /lampac/config
|
||||
├── cache/ → /lampac/cache (кэш TorrServer — только сюда)
|
||||
└── data/ → /lampac/data (БД JacRed)
|
||||
├── docker-compose.yml (бэкапы .bak-*, .bak2-*)
|
||||
├── config/ → /lampac/config
|
||||
├── cache/ → /lampac/cache (кэш TorrServer — только сюда)
|
||||
├── data/ → /lampac/data (БД JacRed)
|
||||
├── config-module/init.conf → /lampac/init.conf:ro (наш конфиг)
|
||||
├── catalog/sites/ → /lampac/module/Catalog/sites
|
||||
├── catalog/override/ → /lampac/module/Catalog/override
|
||||
├── wwwroot/ → /lampac/wwwroot (JSON-каталог watchlist)
|
||||
└── scripts/gen_watchlist.py (генератор .md → JSON)
|
||||
```
|
||||
|
||||
Владелец `kraken:kraken`, права `755`.
|
||||
|
||||
⚠️ Всё пишущее — на data-диск (1.8T). **НЕ на SD** (`/`, 14G, 8.6G свободно).
|
||||
|
||||
## docker-compose.yml
|
||||
## docker-compose.yml (актуальный, 2026-09-22)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
@@ -68,10 +73,36 @@ services:
|
||||
- ./config:/lampac/config
|
||||
- ./cache:/lampac/cache
|
||||
- ./data:/lampac/data
|
||||
# Наш конфиг: перекрывает base.conf из образа. Включает модуль Catalog.
|
||||
# Без монтирования правки теряются при пересоздании контейнера.
|
||||
- ./config-module/init.conf:/lampac/init.conf:ro
|
||||
# Каталоги Catalog
|
||||
- ./catalog/sites:/lampac/module/Catalog/sites
|
||||
- ./catalog/override:/lampac/module/Catalog/override
|
||||
# Статика: JSON-каталог watchlist (Lampac отдаёт wwwroot по HTTP сам)
|
||||
- ./wwwroot:/lampac/wwwroot
|
||||
```
|
||||
|
||||
⚠️ В контейнере рабочий каталог `/lampac`, часть файлов читается **из корня**, не из `config/`.
|
||||
|
||||
### Минимальный `config-module/init.conf`
|
||||
|
||||
Перекрывает `base.conf`, поэтому список `SkipModules` нужно **повторить целиком**, без `Catalog`:
|
||||
|
||||
```json
|
||||
{
|
||||
"BaseModule": {
|
||||
"SkipModules": [
|
||||
"Tracks", "Transcoding", "WebLog", "CacheMedia", "ForkPlayerXML",
|
||||
"MsxNative", "Potok", "TelegramAuth", "TelegramAuthBot"
|
||||
]
|
||||
},
|
||||
"LampaWeb": { "initPlugins": { "catalog": true } }
|
||||
}
|
||||
```
|
||||
|
||||
После любой правки — `docker compose up -d` (пересоздаст контейнер) или `docker restart lampac`.
|
||||
|
||||
## Управление
|
||||
|
||||
```bash
|
||||
@@ -150,7 +181,24 @@ Configure complete ← HTTP начинает отвечать
|
||||
## Модуль Catalog — каталоги из YAML
|
||||
|
||||
Модуль **`Catalog`** (в образе, по умолчанию **выключен**) отдаёт свои каталоги как плагин Lampa.
|
||||
Разобрано по коду 2026-09-22: `/lampac/module/Catalog/`.
|
||||
Разобрано по коду и **включено в работу 2026-09-22** — см. [[personal/plans/lampac-watchlist-plugin]].
|
||||
|
||||
### Наш каталог «Мой список»
|
||||
|
||||
Отдаёт `movies-watchlist.md` как каталог в Lampa. Файлы:
|
||||
|
||||
| Путь на HDD (`.../lampac/`) | Роль |
|
||||
|---|---|
|
||||
| `config-module/init.conf` | включает Catalog (монтируется в `/lampac/init.conf:ro`) |
|
||||
| `catalog/sites/watchlist.yaml` | описание каталога для Catalog |
|
||||
| `catalog/override/` | переопределения (пусто) |
|
||||
| `wwwroot/watchlist.json` + `watchlist-<code>.json` | JSON-данные (Lampac отдаёт по HTTP) |
|
||||
| `scripts/gen_watchlist.py` | генератор: .md → JSON |
|
||||
| `~/scripts/watchlist-catalog.sh` | обёртка + перезапуск (сброс кэша), cron 02:30 |
|
||||
|
||||
Плагин на ТВ: `http://192.168.1.14:9118/catalog.js` → источник «Мой список».
|
||||
|
||||
### Общее про модуль
|
||||
|
||||
| Что | Как |
|
||||
|---|---|
|
||||
@@ -163,18 +211,23 @@ Configure complete ← HTTP начинает отвечать
|
||||
**Обязателен HTTP:** `if (!url.StartsWith("http")) url = $"{init.host}/{url}"` — локальные файлы не читаются.
|
||||
|
||||
**Два режима:** `jsonPath: true` → `JToken.Parse` (JSON), иначе HtmlAgilityPack (HTML).
|
||||
Любой свой JSON-эндпоинт годится как `host` — это рычаг для watchlist-каталога.
|
||||
|
||||
**Выключен в двух местах** `current.conf`:
|
||||
🔴 **Питфолл: элемент с пустым `href` ВЫБРАСЫВАЕТСЯ** —
|
||||
`if (!IsNullOrWhiteSpace(name) && !IsNullOrWhiteSpace(href))` (ListController.cs).
|
||||
Нужен непустой `href` у каждого элемента.
|
||||
|
||||
🔴 **Питфолл: `{cat}` НЕ подставляется в `nodes`** — JSONPath статичен.
|
||||
Разные категории = разные JSON-файлы.
|
||||
|
||||
🔴 **Питфолл: кэш без версии данных** — ключ `catalog:{plugin}:{search}:{sort}:{cat}:{page}`.
|
||||
После правки данных нужен `docker restart lampac`.
|
||||
|
||||
**Выключен в двух местах** `base.conf`/`current.conf`:
|
||||
```jsonc
|
||||
"SkipModules": [ "Catalog", "Tracks", ... ] // ~строка 277
|
||||
"plugins": { "catalog": false } // ~строка 1653
|
||||
"BaseModule": { "SkipModules": [ "Catalog", ... ] }
|
||||
"LampaWeb": { "initPlugins": { "catalog": false } }
|
||||
```
|
||||
|
||||
🔴 **`init.conf` НЕ смонтирован** в нашем compose — файл из образа. Правки через `docker exec`
|
||||
**теряются при пересоздании контейнера**. Нужен volume `./config/init.conf:/lampac/init.conf:ro`
|
||||
(или правка через AdminPanel `/adminpanel`).
|
||||
|
||||
Синапс модулей (всего 33): `AdminPanel, Adult, Catalog, Community, DLNA, DatabaseEditor, ExternalBind,
|
||||
ForkPlayerXML, GStreamer, JacRed, Kit, LampaWeb, LampacApk, LogUserRequest-Lite, MsxNative, Music,
|
||||
NextHUB, Online, OnlineAnime, OnlineENG, OnlineGEO, OnlinePaid, OnlineRUS, OnlineUKR, PidTor, Potok,
|
||||
@@ -286,8 +339,12 @@ ssh root@TV 'script -q -c "luna-send -n 1 -f luna://service/method {json}" /tmp/
|
||||
1. **`SkipModules`** в `init.conf` / `current.conf`
|
||||
2. **`manifest.json`** в каталоге модуля (`"enable": true|false`)
|
||||
|
||||
⚠️ **`init.conf` НЕ смонтирован** в нашем compose — файл живёт внутри образа. Любая правка через
|
||||
`docker exec` **потеряется при пересоздании контейнера**. Для постоянных правок нужен volume или AdminPanel.
|
||||
⚠️ **`init.conf` НЕ в образе по умолчанию** — его читают из `/lampac/init.conf`, файл перекрывает
|
||||
`base.conf`. Правка через `docker exec` **теряется при пересоздании контейнера**, поэтому
|
||||
смонтирован с HDD (`./config-module/init.conf:/lampac/init.conf:ro`). См. раздел docker-compose выше.
|
||||
|
||||
⚠️ `current.conf` в образе (157 КБ) — **сгенерированный** результат (`guid`, `listen`, полный конфиг).
|
||||
Это **не** входной файл, править его бессмысленно.
|
||||
|
||||
### Полезные роуты (проверены curl'ом)
|
||||
|
||||
@@ -299,12 +356,20 @@ ssh root@TV 'script -q -c "luna-send -n 1 -f luna://service/method {json}" /tmp/
|
||||
| `/sisi` | 200 | JSON-список платформ 18+ |
|
||||
| `/dlna` | 200 | DLNA-модуль |
|
||||
| `/ts/echo` | 200 | TorrServer (отдаёт версию, напр. `MatriX.135`) |
|
||||
| `/catalog.js` | **404** | модуль Catalog выключен |
|
||||
| `/catalog.js` | **200** | плагин каталогов (включён 2026-09-22) — см. раздел Catalog |
|
||||
| `/catalog` | **200** | JSON каналов каталогов |
|
||||
| `/watchlist.json`, `/watchlist-<code>.json` | **200** | наш JSON-каталог watchlist |
|
||||
| `/cub`, `/api`, `/lampac.js` | 404/500 | — |
|
||||
|
||||
⚠️ `wwwroot` отдаётся статикой: **любой** файл, положенный туда, доступен по HTTP
|
||||
от корня (`http://<host>:9118/<файл>`). Проверено записью пробного файла.
|
||||
|
||||
## Что осталось
|
||||
|
||||
1. **Лимит кэша TorrServer** — сейчас дефолт. Задать ~20 ГБ, чтобы не сожрать 396 ГБ свободных.
|
||||
2. **`init.conf` без volume** — правки в `docker exec` не переживают пересоздание контейнера.
|
||||
3. **Шаг 7 плана — watchlist в UI Lampa** — план: [[personal/plans/lampac-watchlist-plugin]].
|
||||
4. **Проверка полосы на торрент-источнике** (remux 60–80 Мбит) — не сделана.
|
||||
Единственный незакрытый шаг базового плана. Не критично — диск 396 ГБ.
|
||||
2. **Шаг 7 плана — watchlist в UI Lampa** — ✅ **серверная часть сделана** 2026-09-22,
|
||||
см. [[personal/plans/lampac-watchlist-plugin]]. Осталось Alex добавить плагин на ТВ пультом.
|
||||
3. **Проверка полосы на торрент-источнике** (remux 60–80 Мбит) — не сделана.
|
||||
Первый просмотр шёл через онлайн-источник (HLS ~3–4 Мбит), полосу не проверял.
|
||||
4. **Постеры/карточка в каталоге** — не сделаны, `image` пустой.
|
||||
Reference in new issue
Block a user