using MediaBrowser.Model.Plugins; namespace Jellyfin.Plugin.Audience.Configuration; /// /// Settings for the Audience plugin. Defaults reproduce the selection that was /// applied by hand to this library: 561 of 2778 titles tagged for a viewer who /// finds the full library overwhelming. /// public class PluginConfiguration : BasePluginConfiguration { /// /// Gets or sets a value indicating whether the scheduled task does anything at all. /// public bool Enabled { get; set; } = true; /// /// Gets or sets a value indicating whether ratings Jellyfin cannot parse are rewritten /// to their US equivalent. /// /// /// This is the safety-relevant half. A rating string Jellyfin cannot parse takes the /// same code path as "unrated", which means it stays VISIBLE to every profile, /// including one with an age ceiling set. /// public bool RepairRatings { get; set; } = true; /// /// Gets or sets a value indicating whether the audience tag is applied to new content. /// public bool ApplyTags { get; set; } = true; /// /// Gets or sets the tag applied to selected items. This is the string that goes in the /// target user's "Allowed tags" list. /// /// /// Lower case with no spaces is safest: Jellyfin normalises tags through /// GetCleanValue() and then compares with StringComparer.Ordinal. /// public string TagName { get; set; } = "grandma"; /// /// Gets or sets the highest parental-rating score an item may carry and still be tagged. /// /// /// Scores come from Jellyfin's own rating table, so they follow the server's /// metadata country. For US: G/TV-G/TV-Y = 0, TV-Y7 = 7, PG/TV-PG = 10, /// PG-13 = 13, TV-14 = 14, R/NC-17/TV-MA = 17. Note TV-PG was rescored from /// 13 to 10 in the 10.11 rating rewrite. /// public int MaxRatingScore { get; set; } = 14; /// /// Gets or sets the community rating an item must reach to be tagged when it DOES have a /// usable official rating. The ceiling alone is not enough: this tag exists to make an /// overwhelming library smaller, and a poorly reviewed film that happens to be rated PG /// adds noise rather than removing it. An item carrying no community rating at all fails /// this check, which is deliberate. /// public double MinCommunityRating { get; set; } = 6.0; /// /// Gets or sets the minimum community rating for an item with no usable parental rating. /// /// /// Unrated items are admitted only on reputation, because there is no rating to judge /// them by. This is deliberately not a safety gate: a viewer given an allow-list is an /// adult, and child profiles are protected by MaxParentalRating plus BlockUnratedItems /// instead. Be aware this floor is weak on obscure titles, where a perfect score can /// rest on a handful of votes. /// public double MinCommunityRatingWhenUnrated { get; set; } = 6.0; /// /// Gets or sets a value indicating whether an item untagged by hand is left alone. /// /// /// The task keeps a ledger of every id it has ever tagged. If an id is in the ledger /// but no longer carries the tag, a human removed it on purpose. Without this, every /// nightly run would silently undo curation. /// public bool RespectManualUntag { get; set; } = true; }