From ca783c2c8d027fb806041bdc46798a6589acd048 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Wed, 22 Mar 2023 17:04:31 -0700 Subject: [PATCH] Mark obsolete attributes internal to prevent serialization --- PlexCleaner.schema.json | 52 ++++++---------------------- PlexCleaner/ConfigFileJsonSchema.cs | 19 +++++++--- PlexCleaner/ConvertOptions.cs | 9 +++-- PlexCleaner/MonitorOptions.cs | 2 ++ PlexCleaner/ProcessOptions.cs | 18 ++++++---- PlexCleaner/SidecarFileJsonSchema.cs | 15 +++++--- PlexCleaner/ToolsOptions.cs | 3 ++ PlexCleaner/VerifyOptions.cs | 7 ++++ 8 files changed, 65 insertions(+), 60 deletions(-) diff --git a/PlexCleaner.schema.json b/PlexCleaner.schema.json index 4dcff9e1..0c187c80 100644 --- a/PlexCleaner.schema.json +++ b/PlexCleaner.schema.json @@ -11,18 +11,6 @@ }, "HandBrakeOptions": { "$ref": "#/definitions/HandBrakeOptions" - }, - "EnableH265Encoder": { - "type": "boolean" - }, - "VideoEncodeQuality": { - "type": "integer" - }, - "AudioEncodeCodec": { - "type": [ - "string", - "null" - ] } }, "required": [ @@ -159,24 +147,6 @@ ] } }, - "ReEncodeVideoFormats": { - "type": [ - "string", - "null" - ] - }, - "ReEncodeVideoCodecs": { - "type": [ - "string", - "null" - ] - }, - "ReEncodeVideoProfiles": { - "type": [ - "string", - "null" - ] - }, "DeleteEmptyFolders": { "type": "boolean" }, @@ -356,27 +326,27 @@ "type": "integer", "default": 0 }, - "ConvertOptions": { - "$ref": "#/definitions/ConvertOptions" + "ToolsOptions": { + "$ref": "#/definitions/ToolsOptions" }, "ProcessOptions": { "$ref": "#/definitions/ProcessOptions" }, - "ToolsOptions": { - "$ref": "#/definitions/ToolsOptions" - }, - "MonitorOptions": { - "$ref": "#/definitions/MonitorOptions" + "ConvertOptions": { + "$ref": "#/definitions/ConvertOptions" }, "VerifyOptions": { "$ref": "#/definitions/VerifyOptions" + }, + "MonitorOptions": { + "$ref": "#/definitions/MonitorOptions" } }, "required": [ - "ConvertOptions", - "ProcessOptions", "ToolsOptions", - "MonitorOptions", - "VerifyOptions" + "ProcessOptions", + "ConvertOptions", + "VerifyOptions", + "MonitorOptions" ] } \ No newline at end of file diff --git a/PlexCleaner/ConfigFileJsonSchema.cs b/PlexCleaner/ConfigFileJsonSchema.cs index 53d54af4..722f3d31 100644 --- a/PlexCleaner/ConfigFileJsonSchema.cs +++ b/PlexCleaner/ConfigFileJsonSchema.cs @@ -29,23 +29,27 @@ public ConfigFileJsonSchemaBase() { } } // v1 +[Obsolete] public record ConfigFileJsonSchema1 : ConfigFileJsonSchemaBase { public ConfigFileJsonSchema1() { } // Deprecated [Obsolete] - public ConvertOptions1 ConvertOptions { get; protected set; } = new(); + internal ConvertOptions1 ConvertOptions { get; set; } = new(); [Obsolete] - public ProcessOptions1 ProcessOptions { get; protected set; } = new(); + internal ProcessOptions1 ProcessOptions { get; set; } = new(); [Required] + [JsonProperty(Order = 1)] public ToolsOptions ToolsOptions { get; protected set; } = new(); [Required] + [JsonProperty(Order = 5)] public MonitorOptions MonitorOptions { get; protected set; } = new(); [Required] + [JsonProperty(Order = 4)] public VerifyOptions VerifyOptions { get; protected set; } = new(); // v1 @@ -53,6 +57,7 @@ public ConfigFileJsonSchema1() { } } // v2 +[Obsolete] public record ConfigFileJsonSchema2 : ConfigFileJsonSchema1 { public ConfigFileJsonSchema2() { } @@ -72,14 +77,16 @@ protected void Upgrade(ConfigFileJsonSchema1 configFileJsonSchema1) } [Obsolete] - public new ProcessOptions2 ProcessOptions { get; protected set; } = new(); + internal new ProcessOptions2 ProcessOptions { get; set; } = new(); // v2 public new const int Version = 2; } // v3 +#pragma warning disable CS0612 // Type or member is obsolete public record ConfigFileJsonSchema : ConfigFileJsonSchema2 +#pragma warning restore CS0612 // Type or member is obsolete { public ConfigFileJsonSchema() { } @@ -107,9 +114,11 @@ protected void Upgrade(ConfigFileJsonSchema2 configFileJsonSchema2) } [Required] + [JsonProperty(Order = 3)] public new ConvertOptions ConvertOptions { get; protected set; } = new(); [Required] + [JsonProperty(Order = 2)] public new ProcessOptions ProcessOptions { get; protected set; } = new(); // v3 @@ -170,9 +179,9 @@ private static ConfigFileJsonSchema FromJson(string json) // Deserialize the correct version switch (configFileJsonSchemaBase.SchemaVersion) { +#pragma warning disable CS0612 // Type or member is obsolete // Version 1 case ConfigFileJsonSchema1.Version: -#pragma warning disable CS0612 // Type or member is obsolete return new ConfigFileJsonSchema(JsonConvert.DeserializeObject(json, Settings)); // Version 2 case ConfigFileJsonSchema2.Version: @@ -195,6 +204,8 @@ private static ConfigFileJsonSchema FromJson(string json) // Reuse the already created objects, required for HashSet() case insensitive comparison operator ObjectCreationHandling = ObjectCreationHandling.Reuse // TODO: Add TraceWriter to log to Serilog + // TODO: Add a custom resolver to control serialization od deprecated attributes, vs. using internal + // https://stackoverflow.com/questions/11564091/making-a-property-deserialize-but-not-serialize-with-json-net }; public static void WriteSchemaToFile(string path) diff --git a/PlexCleaner/ConvertOptions.cs b/PlexCleaner/ConvertOptions.cs index 4716e42c..8a01fcdd 100644 --- a/PlexCleaner/ConvertOptions.cs +++ b/PlexCleaner/ConvertOptions.cs @@ -4,18 +4,21 @@ namespace PlexCleaner; // v1, v2 +[Obsolete] public record ConvertOptions1 { [Obsolete] - public bool EnableH265Encoder { get; set; } + internal bool EnableH265Encoder { get; set; } [Obsolete] - public int VideoEncodeQuality { get; set; } + internal int VideoEncodeQuality { get; set; } [Obsolete] - public string AudioEncodeCodec { get; set; } = ""; + internal string AudioEncodeCodec { get; set; } = ""; } // v3 +#pragma warning disable CS0612 // Type or member is obsolete public record ConvertOptions : ConvertOptions1 +#pragma warning restore CS0612 // Type or member is obsolete { public ConvertOptions() { } diff --git a/PlexCleaner/MonitorOptions.cs b/PlexCleaner/MonitorOptions.cs index 8d7cf06c..68dc4de9 100644 --- a/PlexCleaner/MonitorOptions.cs +++ b/PlexCleaner/MonitorOptions.cs @@ -7,9 +7,11 @@ public class MonitorOptions [Required] [Range(0, int.MaxValue)] public int MonitorWaitTime { get; set; } + [Required] [Range(0, int.MaxValue)] public int FileRetryWaitTime { get; set; } + [Required] [Range(0, int.MaxValue)] public int FileRetryCount { get; set; } diff --git a/PlexCleaner/ProcessOptions.cs b/PlexCleaner/ProcessOptions.cs index 529ac39d..fbbf8ecc 100644 --- a/PlexCleaner/ProcessOptions.cs +++ b/PlexCleaner/ProcessOptions.cs @@ -13,22 +13,23 @@ public class VideoFormat } // v1 +[Obsolete] public record ProcessOptions1 { [Obsolete] - public string ReEncodeVideoFormats { get; set; } = ""; + internal string ReEncodeVideoFormats { get; set; } = ""; [Obsolete] - public string ReEncodeVideoCodecs { get; set; } = ""; + internal string ReEncodeVideoCodecs { get; set; } = ""; [Obsolete] - public string ReEncodeVideoProfiles { get; set; } = ""; + internal string ReEncodeVideoProfiles { get; set; } = ""; [Obsolete] - public string ReEncodeAudioFormats { get; set; } = ""; + internal string ReEncodeAudioFormats { get; set; } = ""; [Obsolete] - public string KeepExtensions { get; set; } = ""; + internal string KeepExtensions { get; set; } = ""; [Obsolete] - public string KeepLanguages { get; set; } = ""; + internal string KeepLanguages { get; set; } = ""; [Obsolete] - public string PreferredAudioFormats { get; set; } = ""; + internal string PreferredAudioFormats { get; set; } = ""; [Required] public bool DeleteEmptyFolders { get; set; } @@ -80,6 +81,7 @@ public record ProcessOptions1 } // v2 +[Obsolete] public record ProcessOptions2 : ProcessOptions1 { public ProcessOptions2() { } @@ -182,7 +184,9 @@ protected void Upgrade(ProcessOptions1 processOptions1) } // v3 +#pragma warning disable CS0612 // Type or member is obsolete public record ProcessOptions : ProcessOptions2 +#pragma warning restore CS0612 // Type or member is obsolete { public ProcessOptions() { } diff --git a/PlexCleaner/SidecarFileJsonSchema.cs b/PlexCleaner/SidecarFileJsonSchema.cs index 37a68820..62f3f360 100644 --- a/PlexCleaner/SidecarFileJsonSchema.cs +++ b/PlexCleaner/SidecarFileJsonSchema.cs @@ -22,16 +22,17 @@ public SidecarFileJsonSchemaBase() { } } // v1 +[Obsolete] public record SidecarFileJsonSchema1 : SidecarFileJsonSchemaBase { public SidecarFileJsonSchema1() { } [Obsolete] - public string FfMpegToolVersion { get; set; } + internal string FfMpegToolVersion { get; set; } [Obsolete] - public string MkvToolVersion { get; set; } + internal string MkvToolVersion { get; set; } [Obsolete] - public string FfIdetInfoData { get; set; } + internal string FfIdetInfoData { get; set; } [Required] public DateTime MediaLastWriteTimeUtc { get; set; } @@ -57,6 +58,7 @@ public SidecarFileJsonSchema1() { } } // v2 +[Obsolete] public record SidecarFileJsonSchema2 : SidecarFileJsonSchema1 { public SidecarFileJsonSchema2() { } @@ -76,13 +78,14 @@ protected void Upgrade(SidecarFileJsonSchema1 sidecarFileJsonSchema1) } [Obsolete] - public bool Verified { get; set; } + internal bool Verified { get; set; } // v2 public new const int Version = 2; } // v3 +[Obsolete] public record SidecarFileJsonSchema3 : SidecarFileJsonSchema2 { public SidecarFileJsonSchema3() { } @@ -125,7 +128,9 @@ protected void Upgrade(SidecarFileJsonSchema2 sidecarFileJsonSchema2) } // v4 +#pragma warning disable CS0612 // Type or member is obsolete public record SidecarFileJsonSchema : SidecarFileJsonSchema3 +#pragma warning restore CS0612 // Type or member is obsolete { public SidecarFileJsonSchema() { } @@ -185,9 +190,9 @@ public static SidecarFileJsonSchema FromJson(string json) // Deserialize the correct version switch (sidecarFileJsonSchemaBase.SchemaVersion) { +#pragma warning disable CS0612 // Type or member is obsolete // Version 1 case SidecarFileJsonSchema1.Version: -#pragma warning disable CS0612 // Type or member is obsolete return new SidecarFileJsonSchema(JsonConvert.DeserializeObject(json, Settings)); // Version 2 case SidecarFileJsonSchema2.Version: diff --git a/PlexCleaner/ToolsOptions.cs b/PlexCleaner/ToolsOptions.cs index 138ae92b..3b956e90 100644 --- a/PlexCleaner/ToolsOptions.cs +++ b/PlexCleaner/ToolsOptions.cs @@ -7,10 +7,13 @@ public class ToolsOptions { [Required] public bool UseSystem { get; set; } + [Required] public string RootPath { get; set; } = ""; + [Required] public bool RootRelative { get; set; } + [Required] public bool AutoUpdate { get; set; } diff --git a/PlexCleaner/VerifyOptions.cs b/PlexCleaner/VerifyOptions.cs index 9bb8e19a..88b014e6 100644 --- a/PlexCleaner/VerifyOptions.cs +++ b/PlexCleaner/VerifyOptions.cs @@ -7,22 +7,29 @@ public class VerifyOptions { [Required] public bool AutoRepair { get; set; } + [Required] public bool DeleteInvalidFiles { get; set; } + [Required] public bool RegisterInvalidFiles { get; set; } + [Required] [Range(0, int.MaxValue)] public int MinimumDuration { get; set; } + [Required] [Range(0, int.MaxValue)] public int VerifyDuration { get; set; } + [Required] [Range(0, int.MaxValue)] public int IdetDuration { get; set; } + [Required] [Range(0, int.MaxValue)] public int MaximumBitrate { get; set; } + [Required] [Range(0, int.MaxValue)] public int MinimumFileAge { get; set; }