[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
1aeb42f4b8
commit
38b803d4fd
3 files changed
+305
-50
No files matched your search
@@ -203,16 +203,120 @@ Configure complete ← HTTP начинает отвечать
|
||||
берутся парсингом `.md` вместо **Radarr API** (в `.md` нет TMDB ID и постеров).
|
||||
Разбор ошибки — [[personal/plans/lampac-watchlist-plugin]], секция «🔴 АРХИТЕКТУРНАЯ ОШИБКА».
|
||||
|
||||
### 🔴 `menu` vs `main` — принципиальная разница
|
||||
### 🔴 Рабочая форма `sites/watchlist.yaml` (проверена 2026-09-22, откат после провала)
|
||||
|
||||
| Блок YAML | Что делает |
|
||||
```yaml
|
||||
enable: true
|
||||
jsonPath: true
|
||||
displayindex: 1
|
||||
displayname: Мой список
|
||||
host: http://127.0.0.1:9118
|
||||
|
||||
menu: # ← ОБЯЗАТЕЛЕН (регистрирует канал), единственный блок категорий
|
||||
- categories:
|
||||
Фильмы: films
|
||||
Новинки: new
|
||||
Мультфильмы: cartoons
|
||||
Аниме: anime
|
||||
format:
|
||||
"-": |
|
||||
return $"http://127.0.0.1:9118/watchlist-{cat}.json";
|
||||
|
||||
search:
|
||||
uri: watchlist.json
|
||||
|
||||
list:
|
||||
uri: watchlist-films.json
|
||||
firstpage: watchlist-films.json
|
||||
total_pages: 1
|
||||
|
||||
content:
|
||||
nodes: "$.items[*]"
|
||||
name: { attribute: name }
|
||||
original_name: { attribute: original }
|
||||
year: { attribute: year }
|
||||
href: { attribute: href }
|
||||
image: { attribute: image }
|
||||
args:
|
||||
- { name_arg: rating, attribute: rating }
|
||||
```
|
||||
|
||||
### 🔴 `main` в YAML ЗАПРЕЩЁН — ломает канал (опровергнуто 2026-09-22)
|
||||
|
||||
**Раздел ниже (гипотеза «`menu` подменяет / `main` добавляет») — НЕВЕРЕН.** Проверено
|
||||
на живом сервере: попытка добавить блок `main` в YAML → **«Мой список» исчез из `/catalog`**,
|
||||
`catalog/list?plugin=watchlist` отдавал пустоту. **Три раунда правок, три рестарта.**
|
||||
|
||||
| Гипотеза (неверна) | Факт (проверено) |
|
||||
|---|---|
|
||||
| `menu` | **подменяет** родные разделы Lampa (Фильмы/Сериалы/Аниме) → родной каталог исчезает |
|
||||
| `main` | **добавляет секции на главную СВЕРХУ** → родной каталог остаётся |
|
||||
| `menu` подменяет родные разделы | ❌ `menu` **регистрирует канал**. `ApiController.cs:70`: `if (init == null \|\| !init.enable \|\| init.menu == null \|\| init.hide) continue;` — без `menu` сайт **отбрасывается** |
|
||||
| `main` добавляет секции сверху | ❌ блока `main` **не существует** во входном YAML. YamlDotNet давится неизвестным полем → `ModInit.goInit(site)` → **null** → сайт молча пропадает |
|
||||
| Заполнять нужно только `main` | ❌ `main` Catalog **генерирует САМ** из `menu`. В JSON-ответе `/catalog` есть **оба** ключа с одинаковым содержимым |
|
||||
|
||||
Заполнять нужно **только `main`**, если задача — «добавить ряды к родному каталогу».
|
||||
`plugin.js` → `function menu()` собирает из `catalog.menu`; `function main()` строит
|
||||
`parts_data` из `catalog.main` и подмешивает в `Lampa.Api.partNext`.
|
||||
⚠️ **Обе формы `main` ломают одинаково** — и список, и словарь:
|
||||
```yaml
|
||||
main: # вариант 1 — список: НЕ работает
|
||||
- categories:
|
||||
Фильмы: films
|
||||
```
|
||||
```yaml
|
||||
main: # вариант 2 — словарь: НЕ работает
|
||||
Фильмы: http://...
|
||||
```
|
||||
|
||||
⚠️ **Ошибка не логируется.** В логах Lampac — тишина (`docker logs lampac | grep -i yaml`
|
||||
пусто). Сайт просто не появляется в `/catalog`. Диагностика только перебором YAML.
|
||||
|
||||
**Кто на самом деле подменяет родные разделы — `plugin.js`, а не YAML:**
|
||||
|
||||
```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;
|
||||
...
|
||||
Lampa.Router.call('category', {...});
|
||||
e.abort(); // ← перехват клика по родному разделу
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
**Перехват срабатывает ТОЛЬКО когда выбран источник «Мой список».** Родной CUB/tmdb
|
||||
не трогается, пока источник не переключён на наш.
|
||||
|
||||
### 🔴 `host` + `uri` СКЛЕИВАЮТСЯ — `uri` обязан быть относительным
|
||||
|
||||
`ListController.cs:53`:
|
||||
```csharp
|
||||
string url = $"{init.host}/{(page==1 && init.list?.firstpage != null
|
||||
? init.list?.firstpage : init.list?.uri)}";
|
||||
```
|
||||
|
||||
Полный URL в `uri`/`firstpage` даёт **двойной префикс** → пусто:
|
||||
```
|
||||
http://127.0.0.1:9118/http://127.0.0.1:9118/watchlist-films.json
|
||||
```
|
||||
|
||||
Правильно: только `watchlist-films.json`, `host` приклеится сам. Так же устроены
|
||||
родные YAML (`vokino.yaml` → `uri: search?name={search}`).
|
||||
|
||||
### ⚠️ Питфолл: явный `format` в `menu` перезагружает страницу
|
||||
|
||||
С `format`-блоком в `menu` Lampa **перезагружает прогрузку страницы при каждом выборе
|
||||
раздела** (наблюдение Alex). Если перезагрузка не нужна — убрать `format` из `menu`,
|
||||
оставить только `categories`.
|
||||
|
||||
### 🎯 Как добиться «CUB + мой список сверху» — варианты (решение Alex, не принято)
|
||||
|
||||
Родной CUB и «Мой список» — это **два источника Lampa**, переключаются в
|
||||
«остальное → основной источник». Одновременно показать нельзя без вмешательства:
|
||||
|
||||
| Путь | Реализуемость |
|
||||
|---|---|
|
||||
| Блок `main` в YAML | ❌ **невозможно** — ломает парсинг |
|
||||
| Оставить `menu` как есть | ⚠️ источник работает, но разделы подменяются, пока он выбран |
|
||||
| Патч `plugin.js` | ⚠️ убрать `Listener.follow('menu')` → перехвата нет, но и секции сверху **не появятся** |
|
||||
| Написать свой плагин | ✅ единственный путь для «сверху», объём работы |
|
||||
|
||||
### ⚠️ Баг Lampac: источник не виден в списке выбора
|
||||
|
||||
|
||||
Reference in new issue
Block a user