Replaces the v1 shape rather than accepting both. `anneal_sec` and the top-level `sample_fps` are deleted, not zeroed; `extraction` and `cut` blocks arrive; `scenes` become objects carrying belief and route, so a window records how far to trust it instead of being a bare float pair. `TruthSchema.IsSupported` is the single gate and is applied on all four read paths — sidecar, managed store load, managed PUT, and converted manifest. Previously only the controller checked, so the version the plugin claimed to require and the one it would actually parse were free to drift. Rejections name the file and the version found, so an item that looks empty is distinguishable from one that was refused. `ManifestConverter` carries belief, route and both provenance blocks through: dropping them would silently downgrade every fetched manifest against a locally extracted one. TRACES: JR-002, JR-003 | SR-003
58 lines
2.1 KiB
C#
58 lines
2.1 KiB
C#
using System.Collections.ObjectModel;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace Jellyfin.Plugin.JRay.Models;
|
|
|
|
/// <summary>
|
|
/// One actor entry in a <see cref="TruthFile"/>, with the time windows during
|
|
/// which they are present in the scene.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// "Present in the scene", not "visible on screen": a window is a claim about
|
|
/// scene membership, so an actor who turns away or is off-camera during a
|
|
/// reverse shot is still present. Two windows mean a genuine departure and
|
|
/// return, not a break in detection.
|
|
///
|
|
/// Identity is public identifiers — never a name alone, which is ambiguous and
|
|
/// unstable. <c>jellyfin_id</c> is preferred locally and stripped on
|
|
/// contribution, being meaningless outside the instance that produced it.
|
|
/// </remarks>
|
|
// TRACES: JR-004, JR-007 | SR-001, SR-002
|
|
public class TruthActor
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets the actor's display name.
|
|
/// </summary>
|
|
[JsonPropertyName("name")]
|
|
public string Name { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the actor's IMDB person id (e.g. "nm0000158"), or "" if unresolved.
|
|
/// </summary>
|
|
[JsonPropertyName("imdb_id")]
|
|
public string ImdbId { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the actor's TMDB person id, or "" if unresolved.
|
|
/// </summary>
|
|
[JsonPropertyName("tmdb_id")]
|
|
public string TmdbId { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the actor's Jellyfin Person item GUID, or "" if unresolved.
|
|
/// </summary>
|
|
[JsonPropertyName("jellyfin_id")]
|
|
public string JellyfinId { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Gets the windows during which the actor is in the scene.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Objects since <c>schema_version</c> 2, not the float pairs v1 used, so a
|
|
/// window can carry the belief and route behind the claim.
|
|
/// </remarks>
|
|
[JsonPropertyName("scenes")]
|
|
[JsonObjectCreationHandling(JsonObjectCreationHandling.Populate)]
|
|
public Collection<TruthScene> Scenes { get; } = new();
|
|
}
|