[2026-09-22] eagle: personal/plans/lampac-watchlist-plugin.md personal/tech/lampac-deployment.md
This commit is contained in:
1 parent
bd00f6f145
commit
5e389f93d7
2 files changed
+232
-1
No files matched your search
@@ -201,6 +201,55 @@ id = href,
|
||||
`http://{localhost}:{port}/tmdb/api/3/{cat}/{id}?api_key={CoreInit.conf.cub.api_key}`
|
||||
— ключ уже внутри образа, отдельный TMDB-ключ для карточек не нужен.
|
||||
|
||||
### 🔴 Питфолл №6: карточка без `card_parse` даёт HTTP 500
|
||||
|
||||
Без блока `card_parse` Catalog строит URL карточки как `$"{init.host}/{uri}"`
|
||||
(`CardController.cs:33`) → `http://127.0.0.1:9118/movie/424781` — такого пути нет,
|
||||
`html == null` → `BadRequest("html")` → **HTTP 500**, в UI «здесь пусто».
|
||||
|
||||
**Сигнатура роута (критично!):**
|
||||
```csharp
|
||||
[Route("catalog/card")]
|
||||
public async Task<ActionResult> Index(string plugin, string uri, string type)
|
||||
```
|
||||
🔴 **Параметра `cat` НЕТ.** Карточка знает только `uri` и `type`. Поэтому
|
||||
`initUrl: $"…/cards-{cat}.json"` даёт `cards-.json` → 404 → HTTP 500.
|
||||
|
||||
**Что можно и что нельзя подставлять:**
|
||||
|
||||
| Поле | Механика | Подстановка |
|
||||
|---|---|---|
|
||||
| `initUrl` | `CSharpEval.Execute<string>` с `CatalogInitUrlCard(host, args, uri, query, type)` | ✅ `uri`, `type`, `host` |
|
||||
| `node` | `json.SelectToken(parse.node)` — чистый JSONPath | ❌ **статичен** |
|
||||
| `name`/`image`/`description` | `ModInit.nodeValue(...)` → `attribute` | — |
|
||||
|
||||
**Питфолл JSONPath:** `SelectToken("movie/424781")` вернёт `null` — `/` в JSONPath это
|
||||
**вложенность** (`movie` → `424781`). Симптом: **HTTP 400, тело `parse.node`**.
|
||||
Слэш в ключе JSON недопустим для `SelectToken`.
|
||||
|
||||
**Рабочая схема (когда карточку отдаёт наш JSON, а не TMDB):**
|
||||
```yaml
|
||||
card_parse:
|
||||
initUrl: |
|
||||
return $"{host}/cards/card-{uri.Replace("/", "-")}.json";
|
||||
node: card # фиксированный путь в файле
|
||||
name: { attribute: name }
|
||||
original_name: { attribute: original }
|
||||
year: { attribute: year }
|
||||
image: { attribute: poster }
|
||||
description: { attribute: overview }
|
||||
```
|
||||
Файлы `wwwroot/cards/card-<media>-<id>.json` (по одному на фильм) с обёрткой
|
||||
`{"card": {...}}`. По одному файлу — потому что `node` статичен и один общий файл
|
||||
по `uri` не отфильтровать.
|
||||
|
||||
**Диагностика (ошибки карточки в логи Lampac НЕ пишутся!):**
|
||||
```bash
|
||||
curl -s -o /tmp/c.json -w "HTTP %{http_code}\n" \
|
||||
"http://192.168.1.14:9118/catalog/card?plugin=watchlist&uri=movie%2F424781&type=movie"
|
||||
# тела-маркеры: "html" (URL не найден) | "parse.node" (node не нашёл узел) | "json" (не JSON)
|
||||
```
|
||||
|
||||
### 🔴 Питфолл №5: кэш Catalog
|
||||
|
||||
Ключ: `catalog:{plugin}:{search}:{sort}:{cat}:{page}` — **не зависит от содержимого файлов**.
|
||||
|
||||
Reference in new issue
Block a user