using System.Linq; using EmbyToolbox.Services; namespace EmbyToolbox.ViewModels; /// Списки для ComboBox в окне настроек (синхронизированы с MainWindowViewModel). public sealed class ConversionFormOptions { public List ContainerOptions { get; } = ["MKV", "MP4", "MOV", "WEBM"]; public List VideoCodecOptions { get; } = ["H.264", "H.265", "AV1", "Copy"]; public List PixelFormatOptions { get; } = ["yuv420p", "yuv420p10le", "yuv422p", "yuv444p"]; public List ResolutionOptions { get; } = ["Без изменений", "Максимум 2160p", "Максимум 1440p", "Максимум 1080p", "Максимум 720p"]; public List FpsOptions { get; } = ["Без изменений", "Максимум 60", "Максимум 30", "Максимум 25", "Максимум 24"]; public List AudioCodecOptions { get; } = ["AAC", "AC3", "EAC3", "Opus", "MP3", "FLAC", "Copy"]; public List AudioBitrateKbps { get; } = ["96 kbps", "128 kbps", "160 kbps", "192 kbps", "256 kbps", "320 kbps"]; public List VideoBitrateModeOptions { get; } = VideoBitratePolicy.UiOptions.ToList(); internal void RestoreListsFromSerialized(IReadOnlyList? containers, IReadOnlyList? video, IReadOnlyList? pixel, IReadOnlyList? resolution, IReadOnlyList? fps, IReadOnlyList? audioBitrate, IReadOnlyList? videoBitrateMode) { ReplaceList(ContainerOptions, containers); ReplaceList(VideoCodecOptions, video); ReplaceList(PixelFormatOptions, pixel); ReplaceList(ResolutionOptions, resolution); ReplaceList(FpsOptions, fps); ReplaceList(AudioBitrateKbps, audioBitrate); ReplaceList(VideoBitrateModeOptions, videoBitrateMode); } private static void ReplaceList(List target, IReadOnlyList? source) { if (source is null || source.Count == 0) { return; } target.Clear(); foreach (var s in source) { if (!string.IsNullOrWhiteSpace(s)) { target.Add(s.Trim()); } } } }