1
0
Fork 0

Prepare lsdvd types

This commit is contained in:
Jöran Malek 2025-10-26 18:01:04 +01:00
parent 73d17fdb12
commit 692c50c377
16 changed files with 588 additions and 0 deletions

View file

@ -0,0 +1,39 @@
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<SkipCopyBuildProduct>true</SkipCopyBuildProduct>
<AssemblyName>media-organizer</AssemblyName>
<PackageId>media-organizer.XmlSerializers</PackageId>
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
</PropertyGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.XmlSerializer.Generator" Version="9.0.8" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\media-organizer\media-organizer.csproj" ReferenceOutputAssembly="false" OutputItemType="XmlSerializerReference" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.XmlSerializer.Generator" Version="9.0.10" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<Target Name="CoreCompile">
<Copy SourceFiles="@(XmlSerializerReference)" DestinationFolder="$(IntermediateOutputPath)" />
</Target>
<Target Name="GetTargetPathWithTargetPlatformMoniker" BeforeTargets="GetTargetPath" Returns="@(TargetPathWithTargetPlatformMoniker)">
<ItemGroup>
<TargetPathWithTargetPlatformMoniker Include="$(TargetDir)\$(_SerializationAssemblyName).dll" />
</ItemGroup>
</Target>
<Target Name="GenerateBuildDependencyFile" />
</Project>

View file

@ -0,0 +1,59 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Audio
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("langcode")]
public string? LangCode { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LangCodeSpecified => !string.IsNullOrWhiteSpace(LangCode);
[XmlElement("language")]
public string? Language { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LanguageSpecified => !string.IsNullOrWhiteSpace(Language);
[XmlElement("format")]
public string? Format { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FormatSpecified => !string.IsNullOrWhiteSpace(Format);
[XmlElement("frequency", typeof(int))]
public int? Frequency { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FrequencySpecified => Frequency.HasValue;
[XmlElement("quantization")]
public string? Quantization { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool QuantizationSpecified => !string.IsNullOrWhiteSpace(Quantization);
[XmlElement("channels", typeof(int))]
public int? Channels { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ChannelsSpecified => Channels.HasValue;
[XmlElement("ap_mode", typeof(int))]
public int? ApMode { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ApModeSpecified => ApMode.HasValue;
[XmlElement("content")]
public string? Content { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ContentSpecified => !string.IsNullOrWhiteSpace(Content);
[XmlElement("streamid")]
public string? StreamId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool StreamIdSpecified => !string.IsNullOrWhiteSpace(StreamId);
}

View file

@ -0,0 +1,19 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Cell
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("length", typeof(double))]
public double? Length { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LengthSpecified => Length.HasValue;
}

View file

@ -0,0 +1,24 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Chapter
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("length", typeof(double))]
public double? Length { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LengthSpecified => Length.HasValue;
[XmlElement("startcell", typeof(int))]
public int? StartCell { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool StartCellSpecified => StartCell.HasValue;
}

View file

@ -0,0 +1,38 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
[XmlRoot("lsdvd")]
public sealed class LsDvdResult
{
[XmlElement("device")]
public string? Device { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool DeviceSpecified => !string.IsNullOrWhiteSpace(Device);
[XmlElement("title")]
public string? Title { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool TitleSpecified => !string.IsNullOrWhiteSpace(Title);
[XmlElement("vmg_id")]
public string? VmgId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool VmgIdSpecified => !string.IsNullOrWhiteSpace(VmgId);
[XmlElement("provider_id")]
public string? ProviderId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ProviderIdSpecified => !string.IsNullOrWhiteSpace(ProviderId);
[XmlElement("track")]
public List<Track> Tracks { get; } = [];
[XmlElement("longest_track")]
public int? LongestTrack { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LongestTrackSpecified => LongestTrack.HasValue;
}

View file

@ -0,0 +1,34 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Subtitle
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("langcode")]
public string? LangCode { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LangCodeSpecified => !string.IsNullOrWhiteSpace(LangCode);
[XmlElement("language")]
public string? Language { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LanguageSpecified => !string.IsNullOrWhiteSpace(Language);
[XmlElement("content")]
public string? Content { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ContentSpecified => !string.IsNullOrWhiteSpace(Content);
[XmlElement("streamid")]
public string? StreamId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool StreamIdSpecified => !string.IsNullOrWhiteSpace(StreamId);
}

View file

@ -0,0 +1,84 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Track
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("length", typeof(double))]
public double? Length { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LengthSpecified => Length.HasValue;
[XmlElement("vts_id")]
public string? VtsId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool VtsIdSpecified => !string.IsNullOrWhiteSpace(VtsId);
[XmlElement("vts", typeof(int))]
public int? Vts { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool VtsSpecified => Vts.HasValue;
[XmlElement("ttn", typeof(int))]
public int? Ttn { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool TtnSpecified => Vts.HasValue;
[XmlElement("fps", typeof(double))]
public double? FPS { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FPSSpecified => FPS.HasValue;
[XmlElement("format")]
public string? Format { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FormatSpecified => !string.IsNullOrWhiteSpace(Format);
[XmlElement("aspect")]
public string? Aspect { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool AspectSpecified => !string.IsNullOrWhiteSpace(Aspect);
[XmlElement("width", typeof(int))]
public int? Width { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool WidthSpecified => Width.HasValue;
[XmlElement("height", typeof(int))]
public int? Height { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool HeightSpecified => Height.HasValue;
[XmlElement("df")]
public string? Df { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool DfSpecified => !string.IsNullOrWhiteSpace(Df);
[XmlArray("palette"), XmlArrayItem("color", IsNullable = false)]
public List<string> Palette { get; } = [];
[XmlElement("angles", typeof(int))]
public int? Angles { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool AnglesSpecified => Angles.HasValue;
[XmlElement("audio")]
public List<Audio> Audio { get; } = [];
[XmlElement("chapter")]
public List<Chapter> Chapters { get; } = [];
[XmlElement("cell")]
public List<Cell> Cells { get; } = [];
[XmlElement("subp")]
public List<Subtitle> Subtitles { get; } = [];
}

View file

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>MediaOrganizer</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackageId>media-organizer.Ref</PackageId>
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
</PropertyGroup>
</Project>

View file

@ -7,6 +7,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "media-organizer", "src\media-organizer.csproj", "{E34F9D32-207E-4897-9CEC-26156FBD1B4D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{3A8DF596-E814-FECC-DD4B-D8EF8AAC1A0D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "media-organizer.XmlSerializers", "lib\media-organizer.XmlSerializers\media-organizer.XmlSerializers.csproj", "{2BFF52DB-10C2-4DED-87B7-8BF5F87D0415}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "media-organizer", "lib\media-organizer\media-organizer.csproj", "{D33E2DE4-EDFA-4B93-A1C5-376B08A93895}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -17,11 +23,21 @@ Global
{E34F9D32-207E-4897-9CEC-26156FBD1B4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E34F9D32-207E-4897-9CEC-26156FBD1B4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E34F9D32-207E-4897-9CEC-26156FBD1B4D}.Release|Any CPU.Build.0 = Release|Any CPU
{2BFF52DB-10C2-4DED-87B7-8BF5F87D0415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2BFF52DB-10C2-4DED-87B7-8BF5F87D0415}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2BFF52DB-10C2-4DED-87B7-8BF5F87D0415}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2BFF52DB-10C2-4DED-87B7-8BF5F87D0415}.Release|Any CPU.Build.0 = Release|Any CPU
{D33E2DE4-EDFA-4B93-A1C5-376B08A93895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D33E2DE4-EDFA-4B93-A1C5-376B08A93895}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D33E2DE4-EDFA-4B93-A1C5-376B08A93895}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D33E2DE4-EDFA-4B93-A1C5-376B08A93895}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{E34F9D32-207E-4897-9CEC-26156FBD1B4D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{2BFF52DB-10C2-4DED-87B7-8BF5F87D0415} = {3A8DF596-E814-FECC-DD4B-D8EF8AAC1A0D}
{D33E2DE4-EDFA-4B93-A1C5-376B08A93895} = {3A8DF596-E814-FECC-DD4B-D8EF8AAC1A0D}
EndGlobalSection
EndGlobal

59
src/Tools/Types/LsDvd/Audio.cs Executable file
View file

@ -0,0 +1,59 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Audio
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("langcode")]
public string? LangCode { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LangCodeSpecified => !string.IsNullOrWhiteSpace(LangCode);
[XmlElement("language")]
public string? Language { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LanguageSpecified => !string.IsNullOrWhiteSpace(Language);
[XmlElement("format")]
public string? Format { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FormatSpecified => !string.IsNullOrWhiteSpace(Format);
[XmlElement("frequency", typeof(int))]
public int? Frequency { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FrequencySpecified => Frequency.HasValue;
[XmlElement("quantization")]
public string? Quantization { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool QuantizationSpecified => !string.IsNullOrWhiteSpace(Quantization);
[XmlElement("channels", typeof(int))]
public int? Channels { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ChannelsSpecified => Channels.HasValue;
[XmlElement("ap_mode", typeof(int))]
public int? ApMode { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ApModeSpecified => ApMode.HasValue;
[XmlElement("content")]
public string? Content { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ContentSpecified => !string.IsNullOrWhiteSpace(Content);
[XmlElement("streamid")]
public string? StreamId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool StreamIdSpecified => !string.IsNullOrWhiteSpace(StreamId);
}

19
src/Tools/Types/LsDvd/Cell.cs Executable file
View file

@ -0,0 +1,19 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Cell
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("length", typeof(double))]
public double? Length { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LengthSpecified => Length.HasValue;
}

View file

@ -0,0 +1,24 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Chapter
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("length", typeof(double))]
public double? Length { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LengthSpecified => Length.HasValue;
[XmlElement("startcell", typeof(int))]
public int? StartCell { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool StartCellSpecified => StartCell.HasValue;
}

View file

@ -0,0 +1,38 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
[XmlRoot("lsdvd")]
public sealed class LsDvdResult
{
[XmlElement("device")]
public string? Device { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool DeviceSpecified => !string.IsNullOrWhiteSpace(Device);
[XmlElement("title")]
public string? Title { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool TitleSpecified => !string.IsNullOrWhiteSpace(Title);
[XmlElement("vmg_id")]
public string? VmgId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool VmgIdSpecified => !string.IsNullOrWhiteSpace(VmgId);
[XmlElement("provider_id")]
public string? ProviderId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ProviderIdSpecified => !string.IsNullOrWhiteSpace(ProviderId);
[XmlElement("track")]
public List<Track> Tracks { get; } = [];
[XmlElement("longest_track")]
public int? LongestTrack { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LongestTrackSpecified => LongestTrack.HasValue;
}

View file

@ -0,0 +1,34 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Subtitle
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool IndexSpecified => Index.HasValue;
[XmlElement("langcode")]
public string? LangCode { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LangCodeSpecified => !string.IsNullOrWhiteSpace(LangCode);
[XmlElement("language")]
public string? Language { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LanguageSpecified => !string.IsNullOrWhiteSpace(Language);
[XmlElement("content")]
public string? Content { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool ContentSpecified => !string.IsNullOrWhiteSpace(Content);
[XmlElement("streamid")]
public string? StreamId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool StreamIdSpecified => !string.IsNullOrWhiteSpace(StreamId);
}

84
src/Tools/Types/LsDvd/Track.cs Executable file
View file

@ -0,0 +1,84 @@
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
namespace MediaOrganizer.Tools.Types.LsDvd;
public sealed class Track
{
[XmlElement("ix", typeof(int))]
public int? Index { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore, MemberNotNullWhen(true, nameof(Index))]
public bool IndexSpecified => Index.HasValue;
[XmlElement("length", typeof(double))]
public double? Length { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool LengthSpecified => Length.HasValue;
[XmlElement("vts_id")]
public string? VtsId { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool VtsIdSpecified => !string.IsNullOrWhiteSpace(VtsId);
[XmlElement("vts", typeof(int))]
public int? Vts { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool VtsSpecified => Vts.HasValue;
[XmlElement("ttn", typeof(int))]
public int? Ttn { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool TtnSpecified => Vts.HasValue;
[XmlElement("fps", typeof(double))]
public double? FPS { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FPSSpecified => FPS.HasValue;
[XmlElement("format")]
public string? Format { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool FormatSpecified => !string.IsNullOrWhiteSpace(Format);
[XmlElement("aspect")]
public string? Aspect { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool AspectSpecified => !string.IsNullOrWhiteSpace(Aspect);
[XmlElement("width", typeof(int))]
public int? Width { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool WidthSpecified => Width.HasValue;
[XmlElement("height", typeof(int))]
public int? Height { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool HeightSpecified => Height.HasValue;
[XmlElement("df")]
public string? Df { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool DfSpecified => !string.IsNullOrWhiteSpace(Df);
[XmlArray("palette"), XmlArrayItem("color", IsNullable = false)]
public List<string> Palette { get; } = [];
[XmlElement("angles", typeof(int))]
public int? Angles { get; [param: NotNull] set; }
[Browsable(false), JsonIgnore]
public bool AnglesSpecified => Angles.HasValue;
[XmlElement("audio")]
public List<Audio> Audio { get; } = [];
[XmlElement("chapter")]
public List<Chapter> Chapters { get; } = [];
[XmlElement("cell")]
public List<Cell> Cells { get; } = [];
[XmlElement("subp")]
public List<Subtitle> Subtitles { get; } = [];
}

View file

@ -39,4 +39,9 @@
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.10" />
<PackageReference Include="System.IO.Pipelines" Version="9.0.10" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\lib\media-organizer.XmlSerializers\media-organizer.XmlSerializers.csproj" />
</ItemGroup>
</Project>