Commit Graph
10 Commits
Author SHA1 Message Date
jschoubben 9ffd0dd96a radarr, sonarr, lidarr: a search tells everything the app keeps, and where the item is in Plex
The library search returned title, year, status and monitored. It now
returns every field the app keeps (file on disk, quality, size, path,
counts, ratings, genres, added…), and each module binds plex-api so the
first ten hits carry Plex's view: rating key, library, resolution, added,
watched, and a link that opens the item in Plex.
2026-10-01 15:54:20 +02:00
jschoubben 702e9f8419 arr add: a root folder must be named when several exist; lidarr's lookup shows the artist's name
Sonarr's first root folder is /anime, so an unnamed add landed a series
there. A profile is a preference and the first stands in; a root folder
decides where data lands, so with several it is named or the refusal
lists them. Lidarr's lookup used title where the field is artistName.
2026-10-01 14:57:49 +02:00
jschoubben 26a8ae3b88 radarr, sonarr, lidarr: control tools — look up, add and remove
Each gains _lookup (the metadata source, by title or by id), _add (by TMDb,
TVDb or MusicBrainz id, with the first quality/metadata profile and root
folder unless named, monitored, searching only when asked) and _remove (by
the app's id, files kept unless asked).
2026-10-01 14:26:17 +02:00
jschoubben 5be701b78e qbittorrent: the init writes the WebUI login in python, not awk
The keys carry backslashes (WebUI\Username); awk -v escape-processes them,
so the edit matched nothing and the vault's credential never reached the
software. Python edits the file literally and also sets BanDuration=60.
2026-10-01 13:50:23 +02:00
jschoubben 8143811c84 Sidecars read the vault's key and restart when it is remade; a stale WebUI attempt bans for a minute
The jackett, sonarr, radarr and lidarr runtimes discovered the key from
the software's config at start, so after a rotation they held the old one.
They now read the vault's file first and restart when it is remade.
qBittorrent's init sets WebUI\BanDuration=60 so a consumer's step still
carrying the previous value no longer locks the others out for an hour.
2026-10-01 13:35:45 +02:00
jschoubben 11da93e966 The six media providers share their one credential with every consumer (ADR 0158)
nzbget, qbittorrent, jackett, sonarr, radarr and lidarr each hold one
credential; the offer now names the provider's own secret as the
provision's credential, that secret is taken at start, and a
custom-cont-init script applies the file to the software on every start
(nzbget: NZBGET_USER beside the password it already took as a start
option; qbittorrent: the WebUI login's PBKDF2 hash; jackett: APIKey in
ServerConfig.json; the arrs: <ApiKey> in config.xml). Nothing is accepted
per consumer any more; rotating the provider's secret reaches everyone.
2026-10-01 13:05:03 +02:00
jschoubben 27d435e7aa nzbget, qbittorrent: the client reads the username the manifest's settings define
The runtime config carries `username` (the manifest's default, the
assignment's value); the clients looked for `user`, fell through to the
software's config file — empty at the sidecar's start on a fresh
placement — and defaulted to the software's own login. On ace the tools
answered 401 while the server itself accepted the same credentials.
2026-10-01 00:43:39 +02:00
jschoubben 52abeb34bd The identity a module runs as is the assignment's, not the definition's
PUID/PGID (PLEX_UID/PLEX_GID for plex) were 1000:1000 in every definition —
one machine's fact written where it is true of no other (ADR 0112). Each
module now renders identity.env from ${setting:puid} and ${setting:pgid};
the mesh-wide layer carries the image's default, a node whose data belongs
to somebody else says so. An adopted machine's library must never be
re-owned (ace: 1001:2000, hq 153).
2026-10-01 00:35:07 +02:00
jschoubben c1ebc5a961 The media catalogue places the mesh's files and names its accesses (issues 174, 153)
Twelve definitions stop naming /var/lib/mesh/<module>: the directory says `place: "mesh"` (kometa
gains the directory it never declared), and every credential and mount names it as
${dir:mesh-state}. Every access has an id, kept beside its path as the default an assignment may
replace, and the host side of every mount says ${access:<id>} — so a home server's assignment can
say `accesses: {series: "/storage/media/series", …}` and `places: {config: {path: …, owner: …}}`
and the mounts follow. Resolved with no placement, eleven converted definitions name exactly the
paths they named before (TestPlacedDirectoriesKeepTheirPaths over both checkouts); kometa's added
directory is where the mesh already writes.

Needs the controller from mesh-controller #175/#176, running since 2026-10-01 00:06.
2026-10-01 00:27:27 +02:00
jschoubben db3adfa4c6 The media chain as mesh modules, in one catalogue
sonarr, radarr, lidarr, bazarr, nzbget, qbittorrent, jackett, bookshelf,
plex, tautulli, kometa and ombi, taken from the novox/mesh-catalog branches
that prepared them for ace (PRs 145-168), consolidated in stack order.
kometa gains a minimal runtime sidecar (kometa_status, kometa_config) and
declares its tmdb key as an own secret instead of a "secret" requirement.
2026-09-30 21:32:59 +02:00