Expand description
User-chosen browsing exclusions (UR-076 / DR-209). Library folders the user has chosen to keep out of browsing.
Some people file things inside a library that they never want to see while browsing it — a “Podcasts” folder sitting in the music library is the canonical case: its albums and tracks leak into album, artist, track and playlist listings even though the user thinks of them as a different medium.
This is a domain rule, not a presentation one: what an item belongs to, and therefore whether a query should return it, is decided here in the repository layer so every query path agrees. The predecessor of this module was a frontend filter that dropped anything literally named “Podcasts” — one user’s folder layout, keyed on an English string, shipped to everyone. Excluding by id instead of name is what makes the setting survive a rename, a translation, or two folders sharing a name.
The excluded set is process-wide rather than a field on a repository for the
same reason as online::STREAMING_QUALITY: it is a preference about this
user’s browsing, not about a server session, so it must survive a repository
being rebuilt on re-login. It is written by the settings command and restored
from the database at startup.
TRACES: UR-076 | DR-209
Statics§
- EXCLUDED_
IDS 🔒 - Ids (normalised — see
normalise_id) of items the user has hidden.
Traits§
- Exclude
Hidden - Drop the user’s hidden items from a repository result.
Functions§
- excluded_
item_ ids - The excluded set as currently applied, normalised.
- excluded_
snapshot 🔒 - Snapshot of the excluded set, taken once per list so a long listing does not re-lock per item.
- is_
excluded_ by - Whether
itemfalls under one ofexcluded. - normalise_
id 🔒 - Jellyfin writes the same GUID both dashed and undashed depending on the endpoint, and ids arriving over IPC may carry stray whitespace. Comparing a canonical form means a stored id keeps matching whichever spelling a query happens to return.
- set_
excluded_ item_ ids - Replace the excluded set. Ids are normalised, de-duplicated and blanks dropped, so a malformed value can never hide more than it names.