[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
e1256f18b9
commit
e783957622
3 files changed
+298
-40
No files matched your search
@@ -50,21 +50,61 @@ Lampa в webOS использует `localStorage`, который Chromium хр
|
|||||||
## 🔴 Пункта «Настройки → Источник» НЕ СУЩЕСТВУЕТ (проверено 2026-09-22)
|
## 🔴 Пункта «Настройки → Источник» НЕ СУЩЕСТВУЕТ (проверено 2026-09-22)
|
||||||
|
|
||||||
**Не повторять эту ошибку — Alex дважды сказал, что пункта нет.**
|
**Не повторять эту ошибку — Alex дважды сказал, что пункта нет.**
|
||||||
Я его выдумал, отвечая «как увидеть списки». Правильный путь ниже — **и он не сработает,
|
Я его выдумал, отвечая «как увидеть списки».
|
||||||
пока не исправлен баг `plugin.js`** (см. следующий раздел).
|
|
||||||
|
|
||||||
В Lampa **нет** отдельного пункта меню для выбора источника каталога. Источник переключается
|
**Правильный путь (Alex нашёл сам 2026-09-22):**
|
||||||
**прямо из меню каталогов на главной**:
|
**Настройки → «остальное» → основной источник → «Мой список».**
|
||||||
|
|
||||||
1. Открыть Lampa на главной странице
|
⚠️ Мой предыдущий вариант («влево на ряду → панель источников») **не подтверждён**.
|
||||||
2. Встать на любой ряд каталога и нажать **влево** на пульте
|
|
||||||
3. Слева выедет **панель со списком источников**
|
|
||||||
4. Выбрать **«Мой список»** и нажать OK
|
|
||||||
5. Каталог перестроится на watchlist
|
|
||||||
|
|
||||||
🔴 **НО:** UI Lampa строит этот список через `Object.keys(Lampa.Api.sources)`.
|
⚠️ **При выборе «Мой список» исчезает родной каталог CUB** — это **не баг Lampa**,
|
||||||
Плагин Lampac регистрирует источник **не-enumerable** → в панели его **нет**.
|
а следствие архитектурной ошибки в нашей конфигурации (заполнен блок `menu`).
|
||||||
Alex именно это и увидел: «Ни на главной ни в Фильмах нет».
|
Разбор и фикс — раздел «🔴 Архитектура: `menu` подменяет каталог» ниже.
|
||||||
|
|
||||||
|
## 🔴 Архитектура: `menu` подменяет каталог, `main` добавляет сверху
|
||||||
|
|
||||||
|
**Что хотел Alex:**
|
||||||
|
|
||||||
|
> «Я предполагал что будет отображаться то что и раньше (список cub) но В НЕГО будет
|
||||||
|
> сверху добавлено несколько секций в которых будут РЕАЛЬНЫЕ ЭЛЕМЕНТЫ — а не сгенерируют
|
||||||
|
> пустые заглушки!»
|
||||||
|
|
||||||
|
| Блок YAML | Поведение |
|
||||||
|
|---|---|
|
||||||
|
| **`menu`** | ❌ **подменяет** родные разделы (Фильмы/Сериалы/Аниме) — родной каталог **исчезает** |
|
||||||
|
| **`main`** | ✅ **добавляет секции на главную сверху** — родной каталог **остаётся** |
|
||||||
|
|
||||||
|
Наша конфигурация заполнила **оба** → при выборе источника «Мой список» пропал весь CUB.
|
||||||
|
|
||||||
|
**Фикс:** в `catalog/sites/watchlist.yaml` **убрать `menu`**, оставить только `main`.
|
||||||
|
|
||||||
|
Механика в `plugin.js`: `function menu()` собирает из `catalog.menu`;
|
||||||
|
`function main()` строит `parts_data` из `catalog.main` и подмешивает в `Lampa.Api.partNext`.
|
||||||
|
|
||||||
|
## 🟡 «Здесь пусто» и нет постеров — потому что данные не из Radarr
|
||||||
|
|
||||||
|
Второй симптом: элементы без превью, при открытии «здесь пусто».
|
||||||
|
Замер выдачи `/catalog/list?plugin=watchlist&cat=films`:
|
||||||
|
|
||||||
|
| Метрика | Значение |
|
||||||
|
|---|---|
|
||||||
|
| Всего позиций | 360 |
|
||||||
|
| С постером (`img != null`) | **0** |
|
||||||
|
| С реальным ID (`film/...`) | **18** |
|
||||||
|
|
||||||
|
Причина: генератор парсил `movies-watchlist.md` — **текст названий**, без TMDB ID и постеров.
|
||||||
|
Остальным 342 подставлялся `href` на **поиск** Кинопоиска → Lampa открывала страницу поиска.
|
||||||
|
|
||||||
|
**Правильный источник — Radarr API** (туда фильмы и добавлялись, там уже есть `tmdbId`
|
||||||
|
и `images[].remoteUrl`). Alex: «Они уже резолвятся же блядь!! Оно же добавлялось в arr!»
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -sL "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq length # → 50
|
||||||
|
# ⚠️ -L обязателен, без него 307 и пустое тело
|
||||||
|
```
|
||||||
|
|
||||||
|
Покрытие: Radarr **50** фильмов vs `.md` **360**. Что делать с остальными 310 — открытый
|
||||||
|
вопрос к Alex.
|
||||||
|
|
||||||
## 🔴 БАГ: источник не виден в панели (`enumerable: false`)
|
## 🔴 БАГ: источник не виден в панели (`enumerable: false`)
|
||||||
|
|
||||||
@@ -260,12 +300,21 @@ var plugins_add = [
|
|||||||
- Плагин `catalog.js` **добавлен**, `window.plugin_catalog = true`, `appready = true`.
|
- Плагин `catalog.js` **добавлен**, `window.plugin_catalog = true`, `appready = true`.
|
||||||
- `Storage.field('source')` = `'Мой список'` — источник **выбран**.
|
- `Storage.field('source')` = `'Мой список'` — источник **выбран**.
|
||||||
- `Lampa.Api.sources['Мой список']` **существует** и отдаёт каталог
|
- `Lampa.Api.sources['Мой список']` **существует** и отдаёт каталог
|
||||||
(`search, movie, cartoons, anime, menu, main`) — **пользоваться каталогом можно**.
|
(`search, movie, cartoons, anime, menu, main`) — **технически доступен**.
|
||||||
- ❌ В панели выбора источника его **нет** — `plugin.js` регистрирует свойство
|
- ❌ В панели выбора источника его **нет** — `plugin.js` регистрирует свойство
|
||||||
без `enumerable: true`. **Баг в Lampac, не в нашей настройке.**
|
без `enumerable: true`. **Баг в Lampac, не в нашей настройке.**
|
||||||
|
|
||||||
**Осталось:** смонтировать поправленный `plugin.js` через compose (ждёт апрува Alex).
|
**Что переделывается (2026-09-22, после разбора с Alex):**
|
||||||
Полный разбор — [[personal/plans/lampac-watchlist-plugin]], раздел «ГЛАВНЫЙ ПИТФОЛЛ».
|
|
||||||
|
1. Убрать блок `menu` из `watchlist.yaml` → вернуть родной каталог CUB, оставить только `main`
|
||||||
|
2. Переключить источник данных с парсинга `.md` на **Radarr API** → постеры + TMDB ID
|
||||||
|
3. Смонтировать поправленный `plugin.js` (`enumerable: true`)
|
||||||
|
|
||||||
|
**Ждёт апрува Alex.** Полный разбор — [[personal/plans/lampac-watchlist-plugin]],
|
||||||
|
раздел «🔴 АРХИТЕКТУРНАЯ ОШИБКА».
|
||||||
|
|
||||||
|
**Скрипт-автоматизация по-прежнему не создана** — и, вероятно, не нужна: источник
|
||||||
|
переключается через **Настройки → «остальное» → основной источник** (Alex сделал сам).
|
||||||
|
|
||||||
**Скрипт-автоматизация по-прежнему не создана.** Прямая запись в localStorage **не нужна**:
|
**Скрипт-автоматизация по-прежнему не создана.** Прямая запись в localStorage **не нужна**:
|
||||||
проблема оказалась не в настройках Lampa, а в коде плагина. Если автоматизация понадобится —
|
проблема оказалась не в настройках Lampa, а в коде плагина. Если автоматизация понадобится —
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ related:
|
|||||||
- '[[family/projects/watchlist-sync]]'
|
- '[[family/projects/watchlist-sync]]'
|
||||||
- '[[family/projects/watchlist-automation]]'
|
- '[[family/projects/watchlist-automation]]'
|
||||||
- '[[family/documents/movies-watchlist]]'
|
- '[[family/documents/movies-watchlist]]'
|
||||||
status: active
|
status: rework
|
||||||
tags:
|
tags:
|
||||||
- lampac
|
- lampac
|
||||||
- lampa
|
- lampa
|
||||||
@@ -16,6 +16,7 @@ tags:
|
|||||||
- webos
|
- webos
|
||||||
- plugin
|
- plugin
|
||||||
- kraken
|
- kraken
|
||||||
|
- radarr
|
||||||
title: Watchlist в UI Lampa — каталог из списка
|
title: Watchlist в UI Lampa — каталог из списка
|
||||||
type: plan
|
type: plan
|
||||||
updated: '2026-09-22'
|
updated: '2026-09-22'
|
||||||
@@ -26,18 +27,122 @@ updated: '2026-09-22'
|
|||||||
> Реализовано 2026-09-22. План был переписан после разведки кода модуля Catalog.
|
> Реализовано 2026-09-22. План был переписан после разведки кода модуля Catalog.
|
||||||
> Базовое развёртывание — [[personal/plans/lampac-kraken]] (шаги 1–6 закрыты).
|
> Базовое развёртывание — [[personal/plans/lampac-kraken]] (шаги 1–6 закрыты).
|
||||||
>
|
>
|
||||||
> **Итог одной строкой:** Lampac отдаёт `movies-watchlist.md` как каталог Lampa
|
> 🔴 **АРХИТЕКТУРА ПРИЗНАНА НЕВЕРНОЙ 2026-09-22 — переписывается.**
|
||||||
> через модуль `Catalog` → 4 категории (360/33/3/7 позиций), автообновление кроном 02:30.
|
> Сделано `menu` (подмена родных разделов) вместо `main` (секции СВЕРХУ).
|
||||||
> Серверная часть полностью рабочая. **Осталось одно:** в `plugin.js` Lampac баг
|
> Плюс источник данных — парсинг текстового `.md` вместо **Radarr API**, где уже
|
||||||
> (`defineProperty` без `enumerable:true`) — из-за него источник «Мой список» не виден
|
> есть TMDB ID и постеры. Alex: «Я предполагал что будет отображаться то что и раньше
|
||||||
> в списке выбора Lampa на ТВ. Фикс готов, ждёт апрува Alex (2026-09-22).
|
> (список cub) но В НЕГО будет сверху добавлено несколько секций в которых будут
|
||||||
> См. «🔴 ГЛАВНЫЙ ПИТФОЛЛ».
|
> РЕАЛЬНЫЕ ЭЛЕМЕНТЫ - а не сгенерируют пустые заглушки!»
|
||||||
|
> См. «🔴 АРХИТЕКТУРНАЯ ОШИБКА» — читать ПЕРВЫМ.
|
||||||
|
>
|
||||||
|
> **Итог одной строкой:** серверная часть каталога работает (4 категории, 360/33/3/7),
|
||||||
|
> но реализована не по замыслу: подменяет каталог вместо добавления секций,
|
||||||
|
> и не использует Radarr как источник постеров/ID.
|
||||||
|
|
||||||
|
## 🔴 АРХИТЕКТУРНАЯ ОШИБКА 2026-09-22 — почему каталог «не работает»
|
||||||
|
|
||||||
|
**Что хотел Alex (дословно):**
|
||||||
|
|
||||||
|
> «Я предполагал что будет отображаться то что и раньше (список cub) но В НЕГО будет
|
||||||
|
> сверху добавлено несколько секций в которых будут РЕАЛЬНЫЕ ЭЛЕМЕНТЫ — а не сгенерируют
|
||||||
|
> пустые заглушки! Нахуя это надо то?! Чё блядь значит оно так и должно быть?!»
|
||||||
|
|
||||||
|
**Что сделано вместо этого — две независимые ошибки:**
|
||||||
|
|
||||||
|
### Ошибка 1 — структура: `menu` вместо `main`
|
||||||
|
|
||||||
|
Модуль Catalog умеет **два независимых блока**, и они делают РАЗНОЕ:
|
||||||
|
|
||||||
|
| Блок YAML | Что делает | Поведение |
|
||||||
|
|---|---|---|
|
||||||
|
| **`menu`** | **подменяет** родные разделы Lampa (Фильмы/Сериалы/Аниме) | ❌ заполнен → родной каталог исчезает |
|
||||||
|
| **`main`** | **добавляет секции на главную СВЕРХУ** | ✅ родной каталог остаётся |
|
||||||
|
|
||||||
|
Реализация заполнила **оба** (`menu` и `main`) → при выборе источника «Мой список»
|
||||||
|
исчез весь CUB-контент.
|
||||||
|
|
||||||
|
**Симптом по словам Alex:** «при его выборе исчезло все что было до этого из списка CUB
|
||||||
|
во всех разделах. Нет превью.»
|
||||||
|
|
||||||
|
**Фикс:** в `sites/watchlist.yaml` **убрать блок `menu`**, оставить только `main`.
|
||||||
|
Тогда родной каталог (CUB/tmdb) работает как раньше, а твои секции идут рядами сверху.
|
||||||
|
|
||||||
|
Код: `plugin.js` → `function menu()` собирает из `catalog.menu`; если ключа нет —
|
||||||
|
`menu` не подменяется (вернётся пустой, Lampa использует родные). `main()` строит
|
||||||
|
`parts_data` из `catalog.main` и подмешивает их в `Lampa.Api.partNext`.
|
||||||
|
|
||||||
|
### Ошибка 2 — источник данных: парсинг `.md` вместо Radarr API
|
||||||
|
|
||||||
|
Генератор читал `movies-watchlist.md` — **текстовый список названий**. В нём
|
||||||
|
**нет ни TMDB ID, ни постеров**. Результат:
|
||||||
|
|
||||||
|
| Метрика | Значение |
|
||||||
|
|---|---|
|
||||||
|
| Всего позиций (films) | 360 |
|
||||||
|
| Из них с постером (`img != null`) | **0** |
|
||||||
|
| Из них с реальным ID (`film/...`) | **18** |
|
||||||
|
|
||||||
|
Остальные 342 отдавались с `id` = **ссылка на поиск Кинопоиска**
|
||||||
|
(`index.php?kp_query=...`). Отсюда жалоба «при открытии элемента пишет *здесь пусто*»:
|
||||||
|
Lampa идёт по ссылке, получает страницу поиска, а не фильм.
|
||||||
|
|
||||||
|
**Правильный источник — Radarr API.** Alex: «Они уже резолвятся же блядь!! Оно же
|
||||||
|
добавлялось в arr!» — TMDB ID и постеры уже есть там, потому что фильмы добавлялись
|
||||||
|
в Radarr.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# API-ключ Radarr
|
||||||
|
grep -oE "<ApiKey>[^<]+</ApiKey>" /srv/dev-disk-by-uuid-6194539b-.../docker/radarr/config.xml
|
||||||
|
# → cbcb8ec320104359920c0f611d503c7b
|
||||||
|
|
||||||
|
# ⚠️ ВАЖНО: -L обязателен! Без него Radarr отдаёт 307, тело пустое
|
||||||
|
curl -sL "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq length
|
||||||
|
# → 50
|
||||||
|
```
|
||||||
|
|
||||||
|
**Форма ответа Radarr (то, что нужно было брать с самого начала):**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"tmdbId": 1292695,
|
||||||
|
"title": "They Will Kill You",
|
||||||
|
"year": 2026,
|
||||||
|
"hasFile": true,
|
||||||
|
"images": [{"coverType":"poster",
|
||||||
|
"remoteUrl":"https://image.tmdb.org/t/p/original/6oI4oQKTWMVUlr8Ivqydp28R"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Есть **всё**: TMDB ID → рабочий `href`, `remoteUrl` → постер, `title`/`year` → название,
|
||||||
|
`hasFile` → скачан или нет. Плюс постеры локально: `/config/MediaCover/` (46 каталогов).
|
||||||
|
|
||||||
|
⚠️ **Покрытие:** в Radarr **50 фильмов**, в `.md` — **360**. Разница (310) — то, что
|
||||||
|
в список записано, но в Radarr не заказано. Что с ними делать — **решение Alex
|
||||||
|
не получено**, открытый вопрос №1 ниже.
|
||||||
|
|
||||||
|
### Что НЕ надо было делать (записано, чтобы не повторять)
|
||||||
|
|
||||||
|
- Парсить текст вместо API, где данные уже резолвлены
|
||||||
|
- Складывать `menu` + `main` одновременно
|
||||||
|
- Считать «список названий» готовым каталогом для UI с постерами
|
||||||
|
|
||||||
|
### Alex: корневая претензия к процессу
|
||||||
|
|
||||||
|
> «А нахуя ты это так реализовал?? Подумать блядь вообще не твое!»
|
||||||
|
|
||||||
|
Разбор: задача звучала как «покажи список в UI» — и была прочитана буквально
|
||||||
|
(«отдать строки файла»). **Надо было сначала выяснить, откуда брать постеры и ID**
|
||||||
|
(а ответ — Radarr, куда фильмы и добавлялись), а не начинать с парсера текста.
|
||||||
|
|
||||||
## Задача
|
## Задача
|
||||||
|
|
||||||
Показывать список фильмов Alex (`family/documents/movies-watchlist.md`) **в UI Lampa на ТВ** — каталогом.
|
Показывать список фильмов Alex (`family/documents/movies-watchlist.md`) **в UI Lampa на ТВ** — каталогом.
|
||||||
Не локальный плейбэк. Формулировка Alex: «отображение фильмов из списка».
|
Не локальный плейбэк. Формулировка Alex: «отображение фильмов из списка».
|
||||||
|
|
||||||
|
**Уточнение от 2026-09-22 (важное!):** каталог **добавляется СЕКЦИЯМИ СВЕРХУ** к родному
|
||||||
|
каталогу Lampa. Родной CUB-контент **не подменяется и не исчезает**. Элементы — **реальные**
|
||||||
|
фильмы с постерами и карточками, а не пустые заглушки (см. «🔴 АРХИТЕКТУРНАЯ ОШИБКА»).
|
||||||
|
|
||||||
⚠️ **Что НЕ спрашивать повторно.** Задача — **отображение**, не воспроизведение.
|
⚠️ **Что НЕ спрашивать повторно.** Задача — **отображение**, не воспроизведение.
|
||||||
Список — это перечень, а не источник видео. Вопрос «а что играть по клику?» —
|
Список — это перечень, а не источник видео. Вопрос «а что играть по клику?» —
|
||||||
**выдумка сверх постановки**, Alex на него реагировал раздражением («я чё тебе сказал в постановке задачи»).
|
**выдумка сверх постановки**, Alex на него реагировал раздражением («я чё тебе сказал в постановке задачи»).
|
||||||
@@ -167,18 +272,21 @@ Cron: `30 2 * * *` → лог `~/logs/watchlist-catalog.log`.
|
|||||||
Причина: `nightly` — рабочий боевой скрипт, его падение остановило бы весь пайплайн списка.
|
Причина: `nightly` — рабочий боевой скрипт, его падение остановило бы весь пайплайн списка.
|
||||||
Отдельный cron падает изолированно.
|
Отдельный cron падает изолированно.
|
||||||
|
|
||||||
## Что осталось (единственное незакрытое)
|
## Что осталось — ПЕРЕДЕЛКА (после признания архитектуры неверной)
|
||||||
|
|
||||||
**Не шаг Alex, а правка сервера.** Плагин на ТВ уже добавлен и **источник уже выбран**
|
| # | Шаг | Статус |
|
||||||
(`Storage.field('source') = 'Мой список'`). Проблема — баг в `plugin.js` Lampac
|
|---|---|---|
|
||||||
(см. «🔴 ГЛАВНЫЙ ПИТФОЛЛ»): источник не виден в UI из-за `enumerable: false`.
|
| 1 | Генератор берёт данные **из Radarr API** (`localhost:7878/api/v3/movie`), а не парсит текст | ⏳ ждёт апрува |
|
||||||
|
| 2 | Подставлять в `id` → `tmdbId`, в `img` → `images[].remoteUrl` (постер), `year` → `year` | ⏳ |
|
||||||
|
| 3 | Из `sites/watchlist.yaml` **убрать блок `menu`**, оставить `main` → родной CUB остаётся | ⏳ |
|
||||||
|
| 4 | Постеры кэшировать локально (Radarr `MediaCover/` или проксировать через `tmdbproxy`) | ⏳ |
|
||||||
|
| 5 | Фикс `plugin.js` (`enumerable:true`) — **отдельная независимая правка**, см. ниже | ⏳ ждёт апрува |
|
||||||
|
|
||||||
**Ждёт апрува Alex** (2026-09-22): смонтировать поправленный `plugin.js` через compose.
|
**Порядок:** шаги 1–4 закрывают жалобу «пустые заглушки + исчез CUB».
|
||||||
|
Шаг 5 — про то, что источника вообще не видно в списке выбора.
|
||||||
|
|
||||||
Путь на ТВ, который раньше писался («влево → панель → выбрать источник») — **не сработает**,
|
Приёмка (формулировка Alex): **родной список CUB на месте, сверху добавлены ряды
|
||||||
пока баг не исправлен: в панели источника просто нет.
|
с реальными фильмами из списка, у элементов есть постеры и рабочие карточки.**
|
||||||
|
|
||||||
Приёмка = категории видны в UI Lampa, названия совпадают с `movies-watchlist.md`.
|
|
||||||
|
|
||||||
## Диагностический скрипт для ТВ (`/tmp/lampa_probe.py`)
|
## Диагностический скрипт для ТВ (`/tmp/lampa_probe.py`)
|
||||||
|
|
||||||
@@ -497,15 +605,33 @@ ssh kraken 'sed -i "s/\"catalog\": true/\"catalog\": false/" \
|
|||||||
Для строк без рейтинга (например `- [ ] Gods don't give gifts`) — сортировать как `0`, в конец группы.
|
Для строк без рейтинга (например `- [ ] Gods don't give gifts`) — сортировать как `0`, в конец группы.
|
||||||
Опционально: добирать через TMDB (кэш `tmdbproxy` в Lampac) — решить при реализации.
|
Опционально: добирать через TMDB (кэш `tmdbproxy` в Lampac) — решить при реализации.
|
||||||
|
|
||||||
## Открытые вопросы (не блокируют, решение Alex не запрошено)
|
## Открытые вопросы — БЛОКИРУЮЩИЕ (2026-09-22, ждут решения Alex)
|
||||||
|
|
||||||
1. **Постеры** — тянуть через TMDB-кэш Lampac или не тянуть вовсе? Сейчас пустые.
|
1. **Что делать с 310 фильмами, которых нет в Radarr?**
|
||||||
2. **Карточка** — нужна ли (описание/рейтинг внутри Lampa), или достаточно списка названий?
|
В `.md` — 360, в Radarr — 50. У 310 нет TMDB ID и постера.
|
||||||
|
Варианты: (а) показывать только 50 из Radarr; (б) добирать остальные через TMDB-search
|
||||||
|
(часть названий найдётся криво: «девять» → не то); (в) показывать заглушкой без постера.
|
||||||
|
**Без решения шаг 1 переделки не начать.**
|
||||||
|
2. **Нужны 4 секции или одна?** Секции «Фильмы / Новинки / Мультфильмы / Аниме»
|
||||||
|
или одна «Мой список» сверху. Вопрос задан, ответа нет.
|
||||||
|
|
||||||
|
## Открытые вопросы (не блокируют)
|
||||||
|
|
||||||
|
1. **Постеры** — тянуть через TMDB-кэш Lampac, через Radarr `MediaCover/`, или `remoteUrl` CDN?
|
||||||
|
2. **Карточка** — `card_parse` не настроен. С реальным TMDB ID карточка должна
|
||||||
|
подтянуться штатным механизмом Lampa — проверить после переделки.
|
||||||
3. **`🗓️` upcoming** — показывать или прятать? Сейчас показываем.
|
3. **`🗓️` upcoming** — показывать или прятать? Сейчас показываем.
|
||||||
4. **`❓` ambiguous** — сейчас показываем с названием как есть.
|
4. **`❓` ambiguous** — сейчас показываем с названием как есть.
|
||||||
|
|
||||||
Ни один из них **не мешает работе** — каталог отдаётся, категории на месте.
|
## ⚠️ Отменённые/ошибочные указания (не повторять)
|
||||||
Спрашивать только если Alex сам затронет тему.
|
|
||||||
|
- ❌ **«Настройки → Источник»** — такого пункта в Lampa **не существует**. Выдумано,
|
||||||
|
Alex не нашёл. Источник переключается в разделе «остальное → основной источник»
|
||||||
|
(Alex нашёл сам 2026-09-22).
|
||||||
|
- ❌ **«влево → панель источников»** — тоже не подтверждено.
|
||||||
|
- ❌ **`plugins_add` в `lampainit.js`** — это серверные плагины Lampac
|
||||||
|
(`tmdbproxy.js`, `cubproxy.js`, `online.js`, `catalog.js`…), а **не** список плагинов Lampa.
|
||||||
|
`catalog.js` там есть при `"catalog": true` в init.conf.
|
||||||
|
|
||||||
## Связанные
|
## Связанные
|
||||||
|
|
||||||
|
|||||||
@@ -198,6 +198,93 @@ Configure complete ← HTTP начинает отвечать
|
|||||||
|
|
||||||
Плагин на ТВ: `http://192.168.1.14:9118/catalog.js` → источник «Мой список».
|
Плагин на ТВ: `http://192.168.1.14:9118/catalog.js` → источник «Мой список».
|
||||||
|
|
||||||
|
⏳ **Переделывается (2026-09-22).** Текущая реализация признана неверной: заполнен
|
||||||
|
блок `menu` (подменяет родной каталог CUB вместо добавления секций сверху), а данные
|
||||||
|
берутся парсингом `.md` вместо **Radarr API** (в `.md` нет TMDB ID и постеров).
|
||||||
|
Разбор ошибки — [[personal/plans/lampac-watchlist-plugin]], секция «🔴 АРХИТЕКТУРНАЯ ОШИБКА».
|
||||||
|
|
||||||
|
### 🔴 `menu` vs `main` — принципиальная разница
|
||||||
|
|
||||||
|
| Блок YAML | Что делает |
|
||||||
|
|---|---|
|
||||||
|
| `menu` | **подменяет** родные разделы Lampa (Фильмы/Сериалы/Аниме) → родной каталог исчезает |
|
||||||
|
| `main` | **добавляет секции на главную СВЕРХУ** → родной каталог остаётся |
|
||||||
|
|
||||||
|
Заполнять нужно **только `main`**, если задача — «добавить ряды к родному каталогу».
|
||||||
|
`plugin.js` → `function menu()` собирает из `catalog.menu`; `function main()` строит
|
||||||
|
`parts_data` из `catalog.main` и подмешивает в `Lampa.Api.partNext`.
|
||||||
|
|
||||||
|
### ⚠️ Баг Lampac: источник не виден в списке выбора
|
||||||
|
|
||||||
|
`plugin.js`, строка 59 (`loadCatalogs()`), **два вхождения**:
|
||||||
|
|
||||||
|
```js
|
||||||
|
Object.defineProperty(Lampa.Api.sources, key, { get: function(){ return Api; } });
|
||||||
|
```
|
||||||
|
|
||||||
|
`defineProperty` по умолчанию `enumerable: false` → `Object.keys(Lampa.Api.sources)`
|
||||||
|
не перечисляет источник → Lampa не рисует его в панели выбора. При этом
|
||||||
|
`Api.sources['Мой список']` работает напрямую и каталог отдаёт.
|
||||||
|
|
||||||
|
**Фикс:** `{ get: ..., enumerable: true, configurable: true }`.
|
||||||
|
|
||||||
|
`plugin.js` живёт **в образе**, не на HDD (`docker inspect` — монтируются только
|
||||||
|
`catalog/sites` и `catalog/override`). Правка через `docker exec` теряется при
|
||||||
|
пересоздании. Постоянный путь — volume:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- ./catalog/plugin.js:/lampac/module/Catalog/plugin.js:ro
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка синтаксиса ПЕРЕД заливкой: `node --check /tmp/catalog-plugin.js`.
|
||||||
|
Статус: **не применено**, ждёт апрува Alex.
|
||||||
|
|
||||||
|
### Radarr как источник данных (постеры, TMDB ID)
|
||||||
|
|
||||||
|
Фильмы уже резолвлены в Radarr — там есть TMDB ID и постеры. Это **правильный
|
||||||
|
источник** для каталога; `.md` их не содержит.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# API-ключ
|
||||||
|
grep -oE "<ApiKey>[^<]+</ApiKey>" /srv/dev-disk-by-uuid-6194539b-.../docker/radarr/config.xml
|
||||||
|
|
||||||
|
# ⚠️ -L обязателен, иначе 307 и пустое тело
|
||||||
|
curl -sL "http://localhost:7878/api/v3/movie?apikey=$KEY" | jq length # → 50
|
||||||
|
```
|
||||||
|
|
||||||
|
Поля ответа: `tmdbId`, `title`, `year`, `hasFile`, `images[].remoteUrl` (постер TMDB),
|
||||||
|
`images[].coverType == "poster"`. Кэш постеров на диске: Radarr `/config/MediaCover/`.
|
||||||
|
|
||||||
|
## Занятые порты на Кра́кене (2026-09-22)
|
||||||
|
`7878` Radarr · `8096` Jellyfin · `8191` FlareSolverr · `8989` Sonarr · `9000` Portainer ·
|
||||||
|
`9091` Transmission · `9696` Prowlarr · `51413` Transmission (UDP) · **`9118` Lampac**
|
||||||
|
|
||||||
|
## Отладка UI Lampa на ТВ (webOS)
|
||||||
|
|
||||||
|
Правки по SSH не сделать, но **состояние читается** через Chrome DevTools Protocol:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# webOS отдаёт DevTools на порту 9998 (WebAppMgr --remote-debugging-port=9998)
|
||||||
|
curl -s http://192.168.1.70:9998/json | jq -r '.[] | "\(.type): \(.url)"'
|
||||||
|
# → file:///.../com.lampac.tv/index.html?card=...&source=cub
|
||||||
|
```
|
||||||
|
|
||||||
|
Дальше `websocket` + `Runtime.evaluate` читает живые переменные:
|
||||||
|
|
||||||
|
| Выражение | Что даёт |
|
||||||
|
|---|---|
|
||||||
|
| `Lampa.Storage.field('source')` | выбранный источник |
|
||||||
|
| `Object.keys(Lampa.Api.sources).join('\|')` | перечисляемые источники |
|
||||||
|
| `Object.getOwnPropertyDescriptor(Lampa.Api.sources,'Мой список')` | `enumerable`/`configurable` |
|
||||||
|
| `Lampa.Api.sources['Мой список'].getCatalog()` | ключи каталога |
|
||||||
|
|
||||||
|
Скрипты-пробы: `/tmp/lampa_probe.py`, `/tmp/lampa_probe2.py`, `/tmp/lampa_probe3.py`.
|
||||||
|
|
||||||
|
⚠️ `tcpdump` на Кра́кене **нет**. `luna://com.webos.service.capture/takeScreenShot`
|
||||||
|
на этом ТВ **не существует**. `luna-send` пишет в tty → нужен `script -q -c`.
|
||||||
|
Подробности: [[family/how-to/tv-lampac-plugin]].
|
||||||
|
|
||||||
### Общее про модуль
|
### Общее про модуль
|
||||||
|
|
||||||
| Что | Как |
|
| Что | Как |
|
||||||
@@ -235,10 +322,6 @@ Proxy, SISI, Sync, Telemetry, Tracks, Transcoding, WebLog`.
|
|||||||
|
|
||||||
Полный пример YAML (`vokino.yaml`): `docker exec lampac cat /lampac/module/Catalog/sites/vokino.yaml`.
|
Полный пример YAML (`vokino.yaml`): `docker exec lampac cat /lampac/module/Catalog/sites/vokino.yaml`.
|
||||||
|
|
||||||
## Занятые порты на Кра́кене (2026-09-22)
|
|
||||||
`7878` Radarr · `8096` Jellyfin · `8191` FlareSolverr · `8989` Sonarr · `9000` Portainer ·
|
|
||||||
`9091` Transmission · `9696` Prowlarr · `51413` Transmission (UDP) · **`9118` Lampac**
|
|
||||||
|
|
||||||
Выбор порта — `docker compose config` + `sudo ss -tlnp` перед деплоем.
|
Выбор порта — `docker compose config` + `sudo ss -tlnp` перед деплоем.
|
||||||
|
|
||||||
## Интеграция с Lampa (ТВ) — ✅ СДЕЛАНО 2026-09-22
|
## Интеграция с Lampa (ТВ) — ✅ СДЕЛАНО 2026-09-22
|
||||||
|
|||||||
Reference in new issue
Block a user