Добавил обновление библиотеки jellyfin после добавления медиа
This commit is contained in:
@@ -41,6 +41,7 @@ qBittorrent, определяет содержимое (фильм или сер
|
||||
| `store` | SQLite: загрузки, распознавание, подсказки, ссылки |
|
||||
| `httpapi` | REST + веб-UI (server-rendered, htmx) |
|
||||
| `tgbot` | Telegram: приём + парсер сообщений бота + исходящие пинги |
|
||||
| `jellyfin` | триггер пересканирования медиатеки после раскладки (опц.) |
|
||||
| `config` | загрузка TOML-конфига |
|
||||
|
||||
## Поток и машина состояний
|
||||
@@ -68,8 +69,9 @@ review → «Позже» → deferred → review
|
||||
- **review** — план уходит человеку ([review-ux.md](review-ux.md)); цикл
|
||||
`review ⇄ recognizing` — перераспознавание по подсказке.
|
||||
- **linking** — `layout` создаёт хардлинки; идемпотентно, батчем.
|
||||
- **done** — опционально дёргаем скан Jellyfin; доступен **undo** →
|
||||
`reverted` (убрать созданные ссылки).
|
||||
- **done** — при входе неблокирующе дёргаем пересканирование Jellyfin (опц.,
|
||||
см. «Пересканирование Jellyfin»); доступен **undo** → `reverted` (убрать
|
||||
созданные ссылки).
|
||||
- **deferred / cancelled / failed / stuck** — «Позже», «Отклонить»,
|
||||
ошибка (ретраибельна), не качается дольше таймаута.
|
||||
|
||||
@@ -177,6 +179,13 @@ api_key = ""
|
||||
proxy = ""
|
||||
timeout = "10s"
|
||||
|
||||
[jellyfin]
|
||||
enabled = false # включить пересканирование медиатеки после раскладки
|
||||
url = "http://jellyfin:8096" # по имени сервиса в общей docker-сети
|
||||
api_key = "" # API-ключ Jellyfin (Dashboard → API Keys)
|
||||
proxy = "" # опц. HTTP-прокси
|
||||
timeout = "10s"
|
||||
|
||||
[worker]
|
||||
poll_interval = "5s" # как часто опрашивать qBittorrent
|
||||
stuck_after = "1h" # не качается дольше → stuck
|
||||
@@ -270,6 +279,22 @@ Jellyfin ([jellyfin-layout.md](jellyfin-layout.md)). Правила:
|
||||
- **Jellyfin** — библиотеки указывают на `movies`/`series` (не на корень
|
||||
`/srv/media`, иначе в индекс попадут downloads/incomplete).
|
||||
|
||||
## Пересканирование Jellyfin
|
||||
|
||||
После успешной раскладки (вход в `done`) `worker` неблокирующе просит Jellyfin
|
||||
пересканировать медиатеку, чтобы новые файлы быстрее появились в проигрывателе.
|
||||
Включается конфигом `[jellyfin]` (по умолчанию выключено); без него скан не
|
||||
дёргается.
|
||||
|
||||
- **Один вызов — `POST /Library/Refresh`** (скан всех библиотек). Скан
|
||||
инкрементальный, поэтому полный дёшев; точечный скан конкретной папки не
|
||||
делаем — сложнее и не в духе сервиса («минимум компонентов»).
|
||||
- **Авторизация** — API-ключ Jellyfin в заголовке `X-Emby-Token`.
|
||||
- **Неблокирующе и вне `w.mu`** (как пинги Telegram): вызов уходит в сеть в
|
||||
отдельной горутине с фоновым контекстом. Недоступность Jellyfin не влияет на
|
||||
состояние задачи — ошибка лишь логируется (`Warn`).
|
||||
- **Адресация** — по имени сервиса в общей docker-сети (`http://jellyfin:8096`).
|
||||
|
||||
## Деплой
|
||||
|
||||
Jellybit работает в **docker** — в одной среде с qBittorrent и Jellyfin
|
||||
@@ -332,6 +357,9 @@ Dockerfile .dockerignore config.example.toml
|
||||
задач (повторная закачка спустя время → новая задача).
|
||||
- Состояние — на persistent-томе `/srv/applications/jellybit/data`.
|
||||
- Детект завершения — поллинг; webhook — на будущее (drafts/ideas).
|
||||
- Пересканирование Jellyfin после раскладки — `POST /Library/Refresh` (скан
|
||||
всех библиотек, инкрементальный), неблокирующе на входе в `done`; опц.,
|
||||
включается `[jellyfin]`.
|
||||
- Источник (magnet/URL/.torrent) отдаём в qBittorrent — без SSRF.
|
||||
- Авто-раскладка требует подтверждённого матча в базе; иначе review.
|
||||
- Веб-UI в v1 без авторизации (доверенная LAN, опц. allowlist подсетей).
|
||||
@@ -340,5 +368,4 @@ Dockerfile .dockerignore config.example.toml
|
||||
|
||||
## Открытые вопросы
|
||||
|
||||
- Конфигурация Jellyfin (URL + API-ключ) и триггер скана — когда Jellyfin
|
||||
будет развёрнут в umbar (сейчас его там нет).
|
||||
- (пока нет)
|
||||
|
||||
Reference in New Issue
Block a user