Commit graph

14 commits

Author SHA1 Message Date
soulis-1256
f2e1377468
Isolate request-delete queue drains and support WEB/BluRay quality profiles 2026-08-20 18:06:46 +03:00
soulis-1256
f5e7d18edf
Cancel qB grabs when a Seerr request is deleted.
Drain the *arr queue before title delete, trust queue and history hashes,
and match leftover torrents by title and year so an in-progress release
name is removed instead of left downloading.
2026-08-18 23:57:18 +03:00
soulis-1256
edac50f8a2
Fix specials wipe, leftover torrent dirs, and default-stack pins
Keep TV specials when a request covers only regular seasons. Encode
first-run passwords, default missing config-show fields, and strip
Windows CRLF on Python, Dockerfiles, and migrations. Pin express-stack
images. After Sonarr title delete, remove leftover torrents/ dirs even
when qB already dropped the torrent. Document that only the default
stack is supported.
2026-08-16 21:19:15 +03:00
soulis-1256
962e322fdb
Add config apply, full auth change, and *arr quality defaults
Re-wire without replacing compose. Update the shared login on every
UI. Make assemblrr quality profiles the Radarr/Sonarr Add New default.
config edit is picker-only. Forward Seerr Host headers, chmod only the
VPN secrets just written, and ignore Python cache files.
2026-08-16 15:58:48 +03:00
soulis-1256
d4808f96a5
Fix remaining merge-review correctness bugs
Hold media-purge-watch when *arr shows a queue or upgrade delete.
config edit vpn retargets Radarr/Sonarr qB host and clears tun0 when
VPN is off. Start waits on the service catalog (missing ≠ ready).
Empty indexer confirm no longer wipes Prowlarr. Wire only minSeeders.
Existing-media import is optional.
2026-08-16 14:56:36 +03:00
soulis-1256
9ac07caf12
Scope TV request-delete to requested seasons
Seerr's DELETE /api/v1/media/:id/file is title-scoped and would wipe
every remaining season. For a TV request that is only a subset, the
gateway now deletes those Sonarr episode files and unmonitors them,
then drops the request. Movies and last remaining seasons still use
the title-level cascade.

media-purge --seasons and the inotify watcher match that: a season
path never title-purges (other seasons may only be monitored). qB
cleanup requires a season token, refuses multi-season and S01-03
packs, and uses the same title-boundary rules as title-level. *arr
recycle bin is /data/media/.recycle with 7-day cleanup.

Sonarr uncertainty (missing key, failed episodefile list, empty TV
season list) returns 502 and leaves the request. The gateway mounts
config/sonarr/ as a directory so first install cannot replace
config.xml with a Docker-created directory.
2026-08-16 12:04:27 +03:00
soulis-1256
e11ac87d7a
Fix Jellyfin empty-series after Sonarr season-pack imports
Fire Sonarr refresh once on import complete, skip a second
/Library/Refresh so it cannot cancel a running scan, and heal
series that still show 0 episodes despite video on disk.
2026-08-14 11:45:10 +03:00
soulis-1256
0696a83e2d
Fix fresh-install stalls and harden default-on sidecars
qBittorrent 5.x does not bind WireGuard's tun0 unless told to, so tracker
and DHT packets left via eth0 and Gluetun dropped them (stalledDL). Bind
the session to tun0 on VPN installs. Build sidecar images on the host
instead of apk at start, move vpn-watchdog off Gluetun's netns, ignore
non-video inotify events, and stop start/upgrade from aborting or
re-prompting.
2026-08-13 01:25:20 +03:00
soulis-1256
a72875a77a
Use synthetic titles in media-purge match self-tests.
Avoid hardcoding real movie names in fixture data; keep only abstract
prefix/year cases that exercise the matcher rules.
2026-08-12 14:29:40 +03:00
soulis-1256
c2920808eb
Harden media-purge qB matching and refresh Jellyfin on delete.
Prefer history hashes filtered by library folder key, then exact folder-key
match only (no sequel prefix hits). Refuse ambiguous multi-matches. Ignore
partial file-delete events. Best-effort Jellyfin library refresh after purge.
2026-08-12 14:26:27 +03:00
soulis-1256
7339d1b8b4
Add seerr-gateway so delete request fully purges media.
Stock Seerr only drops the request row; intercept DELETE /api/v1/request/:id
to cascade media file delete (*arr + purge hooks) before removing the request.
2026-08-12 14:06:49 +03:00
soulis-1256
c180732db1
Add media purge cascade, seed defaults, and wire on upgrade.
Hardlink-safe cleanup: Seerr/Jellyfin/*arr deletes remove library files and
qB torrents via purge hooks and media-purge-watch. Indexers get seed ratio/time
so completed downloads can leave torrents/. Upgrade always re-wires services;
drop user-facing config sync. Live e2e covers Radarr, Seerr, and Jellyfin APIs.
2026-08-12 13:19:49 +03:00
soulis-1256
3ddedb4d15
Add unit/integration tests under tests/ and clean up related docs
Move live watchdog smoke out of scripts/, drop the old ad-hoc test
scripts, and simplify uninstall + README CLI/optional-stack wording.
2026-08-05 13:43:45 +03:00
soulis-1256
e9f356cffd
Initial commit
Assemblrr: Docker-based bootstrap and wiring for a self-hosted media stack.
2026-08-04 23:42:34 +03:00