using Shared.Engine; using Shared.Models.Base; using System.Text.Json; using System.Text.Json.Serialization; namespace Shared.Models.Templates { public static class VideoTpl { public static string ToJson(string method, string url, string title, in StreamQualityTpl? streamquality = null, in SubtitleTpl? subtitles = null, string quality = null, VastConf vast = null, List headers = null, int? hls_manifest_timeout = null, in SegmentTpl? segments = null, string subtitles_call = null) { var _vast = vast ?? AppInit.conf.vast; return JsonSerializer.Serialize(new VideoDto( title, method, url, Http.NormalizeHeaders(headers), streamquality?.ToObject(emptyToNull: true) ?? new Dictionary( [new KeyValuePair(quality ?? "auto", url)] ), subtitles?.ToObject(emptyToNull: true), subtitles_call, hls_manifest_timeout, _vast?.url != null ? _vast : _vast, segments?.ToObject() ), VideoJsonContext.Default.VideoDto); } } [JsonSourceGenerationOptions( DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault )] [JsonSerializable(typeof(VideoDto))] [JsonSerializable(typeof(Dictionary))] [JsonSerializable(typeof(Dictionary>))] [JsonSerializable(typeof(SubtitleDto))] [JsonSerializable(typeof(List))] [JsonSerializable(typeof(VastConf))] [JsonSerializable(typeof(SegmentDto))] [JsonSerializable(typeof(List))] public partial class VideoJsonContext : JsonSerializerContext { } public readonly struct VideoDto { public string title { get; } public string method { get; } public string url { get; } public Dictionary headers { get; } public Dictionary quality { get; } public IReadOnlyList subtitles { get; } public string subtitles_call { get; } public int? hls_manifest_timeout { get; } public VastConf vast { get; } public Dictionary> segments { get; } [JsonConstructor] public VideoDto( string title, string method, string url, Dictionary headers, Dictionary quality, IReadOnlyList subtitles, string subtitles_call, int? hls_manifest_timeout, VastConf vast, Dictionary> segments) { this.method = method; this.url = url; this.headers = headers; this.quality = quality; this.subtitles = subtitles; this.subtitles_call = subtitles_call; this.title = title; this.hls_manifest_timeout = hls_manifest_timeout; this.vast = vast; this.segments = segments; } } }