From 945a4f6f5ae8fd4588e75560c0294b2db604370b Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 23 Sep 2026 21:07:33 +0600 Subject: [PATCH] [2026-09-23] eagle: family/projects/watchlist-automation.md personal/plans/lampac-watched-to-watchlist.md personal/plans/lampac-watchlist-plugin.md --- family/projects/watchlist-automation.md | 50 +++++++++++++++++++ personal/plans/lampac-watched-to-watchlist.md | 27 ++++++++++ personal/plans/lampac-watchlist-plugin.md | 1 + 3 files changed, 78 insertions(+) diff --git a/family/projects/watchlist-automation.md b/family/projects/watchlist-automation.md index 4ebdf2f4..2f13a4aa 100644 --- a/family/projects/watchlist-automation.md +++ b/family/projects/watchlist-automation.md @@ -110,6 +110,56 @@ no-op), `nightly` 01:00, `catalog` 02:30→02:32 (каналов 4, позици осталась с ранней версии. Правка `crontab` = боевой конфиг → порядок «коммит ДО → правка → заливка → проверка Alex → коммит ПОСЛЕ». +### 🔴 2026-09-23: `[x]` из Lampa НЕ проставляется — канал найден, но не подключён + +**Вопрос Alex:** «А у нас из лампы уходят отметки просмотрено в список галочками как было в jellyfin?» +**Ответ: НЕТ.** Ни Lampa, ни Jellyfin сейчас не дают `[x]`. Задача в работе — см. +[[personal/plans/lampac-watched-to-watchlist]]. + +**Почему Jellyfin-канал мёртв (замеры 2026-09-23):** + +| Проверка Jellyfin (`BaseItems` / `UserData`) | Значение | +|---|---| +| `BaseItems` всего | 53 | +| из них `movie` | **0** | +| из них `series` | 1 (плейлист/коллекция) | +| `UserData.IsPlayed=true` | **0** | +| `PlaybackActivity` | **0** | + +Причина: смотрят через **Lampa + TorrServer**, а не Jellyfin. Плюс с 2026-09-22 +автозакачки выключены → новые файлы в Jellyfin не приходят. `sync_up.py` +(`GET /Users/{id}/Items?IsPlayed=true` → `[x]`) читает пустоту. + +**🔑 Где реально живёт история просмотров — модуль Lampac `TimeCode`:** + +| Элемент | Значение | +|---|---| +| Модуль | `/lampac/module/Sync/TimeCode/` (`Controller.cs`, `plugin.js`, `SqlContext.cs`) | +| БД | `/lampac/database/TimeCode.sql` (SQLite). **На хосте:** `$H/lampac/database/TimeCode.sql` | +| Таблица | `timecodes` | +| Колонки | `Id, user, identity, card, item, position, duration, percent, profile, deleted, watched_at, updated_at, extra` | +| Пишет | Lampa → `POST /timecode/add` (легаси) / `/timecode/set` (нативный), пачками ≤10 req/s | +| Ключ личности | `identity = {tmdb_id}_movie` — готовый ключ для матча со списком по TMDB-ID | + +Живая запись на 2026-09-23 (единственная в БД): +``` +identity = 1758655_movie card = movie-1758655 +position = 1222.0 duration = 6898.0 percent = 18.0 +watched_at = 0 deleted = 0 +``` + +🔴 **Питфолл: `sqlite3` в контейнере `lampac` НЕТ** (`sh: sqlite3: not found`). +Читать БД так: `docker cp lampac:/lampac/database/TimeCode.sql /tmp/` + на хосте +`python3 -c "import sqlite3; ..."`. На хосте Кра́кена `python3` есть. +⚠️ `viewed.json` и `config.db` в `/lampac/data/ts/` — это **TorrServer'овские**, к +TS-истории просмотров Lampa отношения не имеют (не путать). + +**Решение (план, ждёт апрува):** новый модуль `sync_from_lampac.py` в `watchlist-sync` — +читает `timecodes` (`deleted=0` и (`percent>=90` или `watched_at>0`)) → матч по `tmdb_id` +из `watchlist.json` (у **346/346** films `tmdb_id` есть) → `[x]` через существующий +`sync_up._mark_watched` → вызов в `watchlist-nightly.sh` после `sync-up`. +Полный план, грабли и чек-лист приёмки — [[personal/plans/lampac-watched-to-watchlist]]. + ### 🔜 2026-09-22: УДАЛЕНИЕ авто-закачек — инвентаризация снята, ЖДЁТ КОМАНДЫ Alex: *«закачки отменять и проверить еще раз что заново не добавятся»* → diff --git a/personal/plans/lampac-watched-to-watchlist.md b/personal/plans/lampac-watched-to-watchlist.md index 77aeb68f..e6a60a4a 100644 --- a/personal/plans/lampac-watched-to-watchlist.md +++ b/personal/plans/lampac-watched-to-watchlist.md @@ -134,3 +134,30 @@ watched_at = 0 deleted = 0 - **Не** возвращаем `sync-down` в крон — закачек быть не должно. - **Не** пишем в Jellyfin — он не источник просмотров. - **Не** трогаем `cleanup` — отдельная задача. + +--- + +## 7. Открытый вопрос (задан Alex 2026-09-23, ответа нет) + +Как именно в Lampa ставится «просмотрено» — **вручную кнопкой** или **автоматически +при досмотре до конца**? От этого зависит порог в шаге 6: + +| Как ставится | Какая колонка сработает | +|---|---| +| Вручную кнопкой | `watched_at > 0` (Lampa кладёт `updated` в `watched_at`) | +| Автодосмотр до конца | `percent >= 90` | + +В плане заложены **оба условия одновременно** (`percent >= 90` **ИЛИ** `watched_at > 0`) — +работает в любом случае, но при ответе Alex можно сузить и убрать ложные срабатывания. + +--- + +## 8. Связанные находки этой сессии (не часть плана, но проверено) + +- **Стек после ребута:** 14/14 контейнеров поднялись сами, Radarr/Sonarr queue `0`, + Transmission 9 торрентов всё `Done/Idle`, диск 31%, Lampac 200 / Jellyfin 302. + Ночные скрипты (cleanup 02:00, nightly 01:00, catalog 02:30) отработали. + Записано в [[family/projects/watchlist-automation]]. +- **🔴 Лог `nightly` живёт в `/tmp/watchlist-nightly.log`** → умирает при ребуте. + Сегодняшний прогон следа не оставил. Предложен фикс (перенести в `~/logs/`), + ждёт команды. Остальные логи уже в `~/logs/`. diff --git a/personal/plans/lampac-watchlist-plugin.md b/personal/plans/lampac-watchlist-plugin.md index 026b3602..22aee12c 100644 --- a/personal/plans/lampac-watchlist-plugin.md +++ b/personal/plans/lampac-watchlist-plugin.md @@ -7,6 +7,7 @@ related: - '[[family/projects/watchlist-sync]]' - '[[family/projects/watchlist-automation]]' - '[[family/documents/movies-watchlist]]' + - '[[personal/plans/lampac-watched-to-watchlist]]' status: cub-sections-working-awaiting-tv-restart-deploy tags: - lampac