[2026-09-22] eagle: personal/plans/lampac-watchlist-plugin.md
This commit is contained in:
1 parent
5e85c81767
commit
9e1a06340f
1 file changed
+78
@@ -2015,3 +2015,81 @@ Lampa на ТВ **кэширует манифест и ответы**. Посл
|
||||
- Доклады по карточке — [[personal/tech/lampac-deployment]] (конец файла).
|
||||
|
||||
## Связанные
|
||||
|
||||
## ✅ РАБОТАЕТ НА ТВ (2026-09-22, вечер) — подтверждено Alex
|
||||
|
||||
**«Фильмы из списка Watchlist теперь открываются и проигрываются.»**
|
||||
|
||||
### 🔴🔴 КОРНЕВАЯ ПРИЧИНА «ЗДЕСЬ ПУСТО» — РУССКИЙ КЛЮЧ ПЛАГИНА
|
||||
|
||||
Поймано tcpdump'ом на Кра́кене, запрос с ТВ:
|
||||
|
||||
```
|
||||
GET /catalog/card?plugin=%D0%9C%D0%BE%D0%B9%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&uri=movie%2F1280015&type=movie
|
||||
HTTP/1.1 400 Bad Request
|
||||
```
|
||||
|
||||
`plugin=Мой список` — ключ каталога брался из `displayname`.
|
||||
|
||||
`ModInit.goInit` (строки 51-52):
|
||||
|
||||
```csharp
|
||||
site = site.ToLowerAndTrim();
|
||||
site = Regex.Replace(site, "[^a-z0-9\\-]", "", RegexOptions.IgnoreCase);
|
||||
```
|
||||
|
||||
**Кириллица вырезается ЦЕЛИКОМ** → `site = ""` →
|
||||
`File.Exists("/sites/.yaml")` = false →
|
||||
`FindSiteByDisplayName("")` тоже мимо (пустой site не совпадёт с displayname) →
|
||||
`return null` → **`init not found`** → HTTP 400 → в Lampa «ЗДЕСЬ ПУСТО».
|
||||
|
||||
🔴 **Fallback по `displayname` НЕ РАБОТАЕТ с кириллицей** — regex убивает имя
|
||||
раньше, чем запускается поиск. Это баг/особенность lampac-nextgen.
|
||||
|
||||
**ФИКС:** задать `plugin: watchlist` в YAML. Строка `ApiController.cs:136`:
|
||||
```csharp
|
||||
string siteKey = !string.IsNullOrEmpty(init.plugin) ? init.plugin : init.displayname ?? site;
|
||||
```
|
||||
заданный `plugin` переопределяет ключ каталога → ТВ зовёт `plugin=watchlist` → файл находится.
|
||||
|
||||
**Приёмка:**
|
||||
| Ключ | Ответ |
|
||||
|---|---|
|
||||
| `plugin=Мой список` | 400 `init not found` |
|
||||
| `plugin=watchlist` | 200, `tmdb_id: 424781`, `source: "movie"` |
|
||||
|
||||
⚠️ **МЕТОДОЛОГИЧЕСКИЙ ВЫВОД (важно):** я проверял карточку своим `curl`'ом с
|
||||
`plugin=watchlist` и был уверен, что всё работает. **Надо было ловить РЕАЛЬНЫЙ
|
||||
запрос с устройства** (tcpdump на порту сервиса). Урок: при «сервер отвечает 200,
|
||||
а в UI пусто» — первым делом снять трафик между устройством и сервером.
|
||||
|
||||
### Что сделано в этом заходе
|
||||
|
||||
1. `plugin: watchlist` в `sites/watchlist.yaml` — ключ каталога латиницей.
|
||||
2. `card_args` с `format` для числовых полей:
|
||||
`tmdb_id` → `long.TryParse`, `runtime` → `long.TryParse`,
|
||||
`vote_average` → `double.TryParse`.
|
||||
Причина: `ModInit.cs:285` `nodeValue` возвращает ЛЮБОЙ `JValue` как строку, а
|
||||
`plugin.js` делает `if(json.tmdb_id)` — нужен настоящий `long`.
|
||||
3. `deploy_lampac.py`: проверка ключа `watchlist` (не «Мой список»), проверка карточек
|
||||
по `/catalog/card`, заливка `cards/` через tar.
|
||||
4. `gen_watchlist_v2.py`: `tmdb_id` числом; дубли ключей
|
||||
(`name`+`title`, `original`+`original_title`, `poster`+`img`).
|
||||
|
||||
## ⏳ ОСТАЛОСЬ ДОБИТЬ
|
||||
|
||||
1. **Несколько фильмов всё ещё «здесь ничего нет»** — «Рассекая волны», «Хамнет».
|
||||
Похоже, для них нет `card-movie-NNN.json` (TMDB не нашёл / Кинопоиск-фолбэк
|
||||
без tmdb id) → `initUrl` ведёт на несуществующий файл.
|
||||
Лечить: фолбэк-карточка с тем, что есть (название+постер+поиск торрента),
|
||||
либо дотягивать tmdb_id по точному названию+году.
|
||||
2. **~51 фильм без постера** — TMDB не нашёл ни напрямую, ни через Кинопоиск.
|
||||
Разобрать поштучно: возможно, помогают альтернативные названия (`original_title`).
|
||||
3. **Секции CUB.** В «Мой список» только 3 секции (Фильмы/Мультфильмы/Аниме),
|
||||
«Новинки» куда-то делись? И главное — **фильмов из CUB-фида в списке нет**.
|
||||
Требование Alex: **секции должны быть ВНУТРИ CUB**, без ручного переключения
|
||||
источника. Механизм: хук `Listener.follow('menu')` в `plugin.js` (строка 59)
|
||||
перехватывает `movie`/`cartoon`/`anime`/`tv`/`relise` и делает `e.abort()`,
|
||||
НО работает только когда активен наш источник (`Api.getCatalog()` читает
|
||||
манифест текущего источника). Нужно доделать так, чтобы при источнике CUB
|
||||
наши секции добавлялись к CUB-фиду.
|
||||
Reference in new issue
Block a user