[2026-09-22] eagle: personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md
This commit is contained in:
1 parent
6f63bc8810
commit
c4932a84f4
2 files changed
+178
-3
No files matched your search
@@ -1371,3 +1371,77 @@ python3 deploy_lampac.py /tmp/wl-out --skip-plugin
|
||||
вызовом (`&&`-цепочка рвёт tty).
|
||||
|
||||
### Связанные
|
||||
|
||||
## 🔴 ПОЧЕМУ КАРТОЧКА = «ЗДЕСЬ ПУСТО» (найдено 2026-09-22, вечер)
|
||||
|
||||
**Симптом:** данные в карточку приходят (title, img, overview), но в UI «здесь пусто»,
|
||||
нет кнопки воспроизведения.
|
||||
|
||||
**Причина:** `plugin.js` при клике:
|
||||
|
||||
```js
|
||||
if(json.tmdb_id){ status.need++; Lampa.Api.sources.cub.reactionsGet(
|
||||
{id: json.tmdb_id, method: json.original_name ? 'tv' : 'movie'}, ...); }
|
||||
```
|
||||
|
||||
Без `tmdb_id` (**числа**, не строки!) Lampa считает карточку неполной → пустой экран.
|
||||
|
||||
### Два бага в цепочке, оба надо было починить
|
||||
|
||||
1. **`ModInit.cs:285` — `nodeValue` возвращает ЛЮБОЕ значение как строку.**
|
||||
```csharp
|
||||
string value = valueToken switch {
|
||||
JValue jValue => jValue.Value?.ToString(), // ← число → "424781"
|
||||
... };
|
||||
```
|
||||
Поэтому `tmdb_id` из JSON приходил строкой, и `if(json.tmdb_id)` давала не число.
|
||||
|
||||
2. **Кэш в памяти процесса переживает `docker restart`.**
|
||||
`hybridCache` ключ `catalog:card:{plugin}:{uri}` живёт в памяти. При правке
|
||||
данных старые ответы продолжают отдаваться. **Обязательно `docker restart lampac`
|
||||
и проверять на НЕзакэшированном uri.**
|
||||
|
||||
### Фикс — `format` в `card_args`
|
||||
|
||||
`format` исполняется как C# (`CSharpEval`, объект `CatalogNodeValue(value, host)`)
|
||||
и может вернуть настоящий тип, а не строку:
|
||||
|
||||
```yaml
|
||||
card_args:
|
||||
- name_arg: tmdb_id
|
||||
attribute: tmdb_id
|
||||
format: "long.TryParse(value, out long v) ? v : 0"
|
||||
- name_arg: source
|
||||
attribute: media_type
|
||||
- name_arg: runtime
|
||||
attribute: runtime
|
||||
format: "long.TryParse(value, out long v) ? v : 0"
|
||||
- name_arg: vote_average
|
||||
attribute: vote_average
|
||||
format: "double.TryParse(value, out double v) ? v : 0"
|
||||
- name_arg: rating
|
||||
attribute: rating # строкой — Lampa показывает в бейдже
|
||||
```
|
||||
|
||||
### Рабочий ответ карточки (эталон)
|
||||
|
||||
```json
|
||||
{ "id": "movie/424781", "title": "Простите за беспокойство",
|
||||
"original_title": "Простите за беспокойство", "tmdb_id": 424781,
|
||||
"source": "movie", "runtime": 111, "rating": "6.8", "vote_average": 68,
|
||||
"genres": [{"name":"фэнтези"},{"name":"фантастика"},{"name":"комедия"}],
|
||||
"overview": "...", "img": "http://192.168.1.14:9118/proxyimg:210:0/..." }
|
||||
```
|
||||
|
||||
**Результат: 352 из 352 карточек отдают числовой `tmdb_id`.**
|
||||
|
||||
### Про `CUB` — почему «только фильмы из списка»
|
||||
|
||||
CUB и «Мой список» — **два независимых источника Lampa**, одновременно показать
|
||||
нельзя. Переключение: **Настройки → Остальное → Основной источник**.
|
||||
Пункта «Источник» в настройках НЕ существует.
|
||||
|
||||
### Питфолл проверки на ТВ
|
||||
|
||||
Lampa на ТВ кэширует манифест и ответы. После правок **надо полностью
|
||||
выгрузить приложение** (не свернуть), иначе клиент держит старый кэш.
|
||||
Reference in new issue
Block a user