using System.Collections.ObjectModel; using System.Text.Json.Serialization; namespace Jellyfin.Plugin.JRay.Models; /// /// One shareable actor timeline for one cut of one title, as the public server /// serves it. See the server specification §2. /// /// /// This is the exchange envelope, versioned by jmanifest_version /// and deliberately separate from the truth file's schema_version: a /// change to how manifests are transported need not force a truth-file bump. /// They currently coincide at 2 only because the SR-003 bump touched both. /// /// A manifest is never trusted merely because a server served it (JR-027). Every /// field below is re-validated on receipt against the same rules the server /// applies on upload. /// /// // TRACES: JR-025, JR-027 | SR-003 public class Jmanifest { /// Gets or sets the exchange envelope version this manifest speaks. [JsonPropertyName("jmanifest_version")] public int JmanifestVersion { get; set; } /// Gets or sets what the work is — TMDB/IMDB ids and episode coordinates. [JsonPropertyName("identity")] public JmanifestIdentity? Identity { get; set; } /// Gets or sets which encode the timings apply to. [JsonPropertyName("cut")] public JmanifestCut? Cut { get; set; } /// Gets or sets extraction provenance. [JsonPropertyName("extraction")] public JmanifestExtraction? Extraction { get; set; } /// Gets the actors and their presence windows. [JsonPropertyName("actors")] [JsonObjectCreationHandling(JsonObjectCreationHandling.Populate)] public Collection Actors { get; } = new(); }