From 434e02dd8ac8149b58a5fb8d70417d9940902c29 Mon Sep 17 00:00:00 2001 From: John Andrews Date: Tue, 7 May 2024 15:11:24 +1200 Subject: [PATCH] set WarningsAsErrors = true --- AudioNodes/AudioBooks/CreateAudioBook.cs | 2 +- ComicNodes/ComicNodes.csproj | 1 + ComicNodes/Comics/ComicConverter.cs | 4 +- ComicNodes/Comics/ComicExtractor.cs | 2 +- ComicNodes/Comics/CreateComicInfo.cs | 2 +- ComicNodes/Helpers/PdfHelper.cs | 10 +-- ComicNodes/Helpers/UnrarCommandLine.cs | 72 ------------------ ComicNodes/Tests/ComicInfoTests.cs | 2 +- ComicNodes/Tests/ComicTests.cs | 8 +- ComicNodes/Tests/ExtractTests.cs | 8 +- ComicNodes/Tests/TestLogger.cs | 2 + ComicNodes/Tests/_LocalFileService.cs | 33 ++------ ComicNodes/Tests/_TestBase.cs | 4 +- FileFlows.Plugin.dll | Bin 139264 -> 139264 bytes FileFlows.Plugin.pdb | Bin 33916 -> 33916 bytes VideoNodes/FFMpegEncoder.cs | 4 +- .../Audio/FfmpegBuilderAudioConverter.cs | 2 +- .../Audio/FfmpegBuilderAudioNormalization.cs | 17 ++--- .../Audio/FfmpegBuilderAudioSetLanguage.cs | 6 +- .../FfmpegBuilderDefaultOriginalLanguage.cs | 4 +- .../FfmpegBuilderExecutor.cs | 10 +-- .../FfmpegBuilderKeepOriginalLanguage.cs | 4 +- .../FfmpegBuilderSetDefaultTrack.cs | 2 +- .../FfmpegBuilderTrackSorter.cs | 6 +- .../Models/FfmpegSubtitleStream.cs | 2 +- .../FfmpegBuilderVideoBitrateEncode.cs | 10 +-- .../FfmpegBuilderVideoEncode.cs | 10 +-- .../LogicalNodes/CanUseHardwareEncoding.cs | 2 +- VideoNodes/Tests/TestLogger.cs | 2 + VideoNodes/Tests/_TestBase.cs | 2 + VideoNodes/VideoMetadata.cs | 2 + VideoNodes/VideoNodes/VideoNode.cs | 2 + 32 files changed, 78 insertions(+), 159 deletions(-) delete mode 100644 ComicNodes/Helpers/UnrarCommandLine.cs diff --git a/AudioNodes/AudioBooks/CreateAudioBook.cs b/AudioNodes/AudioBooks/CreateAudioBook.cs index 001ddd02..81dd18a7 100644 --- a/AudioNodes/AudioBooks/CreateAudioBook.cs +++ b/AudioNodes/AudioBooks/CreateAudioBook.cs @@ -158,7 +158,7 @@ public class CreateAudioBook: AudioNode string outputFile = FileHelper.Combine(args.TempPath, Guid.NewGuid() + ".m4b"); - string artwork = null; //FindArtwork(dir); + string? artwork = null; //FindArtwork(dir); List execArgs = new() { "-f", diff --git a/ComicNodes/ComicNodes.csproj b/ComicNodes/ComicNodes.csproj index 3e3482fa..43a0b927 100644 --- a/ComicNodes/ComicNodes.csproj +++ b/ComicNodes/ComicNodes.csproj @@ -13,6 +13,7 @@ Comic https://fileflows.com/ Flow elements for processing comic books (cbr, cbz, pdf etc) + True diff --git a/ComicNodes/Comics/ComicConverter.cs b/ComicNodes/Comics/ComicConverter.cs index 3f611fbc..3977c0df 100644 --- a/ComicNodes/Comics/ComicConverter.cs +++ b/ComicNodes/Comics/ComicConverter.cs @@ -29,7 +29,7 @@ public class ComicConverter: Node [Select(nameof(FormatOptions), 1)] public string Format { get; set; } = string.Empty; - private static List _FormatOptions; + private static List? _FormatOptions; /// /// Gets the format options /// @@ -70,7 +70,7 @@ public class ComicConverter: Node [Select(nameof(CodecOptions), 4)] public string Codec { get; set; } = string.Empty; - private static List _CodecOptions; + private static List? _CodecOptions; /// /// Gets the format options /// diff --git a/ComicNodes/Comics/ComicExtractor.cs b/ComicNodes/Comics/ComicExtractor.cs index 5a88f8ba..e2e9d9c8 100644 --- a/ComicNodes/Comics/ComicExtractor.cs +++ b/ComicNodes/Comics/ComicExtractor.cs @@ -23,7 +23,7 @@ public class ComicExtractor : Node /// [Required] [Folder(1)] - public string DestinationPath { get; set; } + public string DestinationPath { get; set; } = string.Empty; /// public override int Execute(NodeParameters args) diff --git a/ComicNodes/Comics/CreateComicInfo.cs b/ComicNodes/Comics/CreateComicInfo.cs index aa4d1b04..1c9c8f85 100644 --- a/ComicNodes/Comics/CreateComicInfo.cs +++ b/ComicNodes/Comics/CreateComicInfo.cs @@ -66,7 +66,7 @@ public class CreateComicInfo : Node } args.Logger?.ILog("Got ComicInfo from filename"); - var newMetadata = new Dictionary + var newMetadata = new Dictionary { { nameof(info.Value.Title), info.Value.Title }, { nameof(info.Value.Series), info.Value.Series }, diff --git a/ComicNodes/Helpers/PdfHelper.cs b/ComicNodes/Helpers/PdfHelper.cs index 91be2b4e..1a00e567 100644 --- a/ComicNodes/Helpers/PdfHelper.cs +++ b/ComicNodes/Helpers/PdfHelper.cs @@ -22,7 +22,7 @@ internal class PdfHelper var file = Path.Combine(destinationDirectory, filePrefix + "-" + i.ToString(new string('0', pageCount.ToString().Length))); - var result = args.ImageHelper.SaveImage(rawBytes, file); + var result = args!.ImageHelper.SaveImage(rawBytes, file); if (result.Failed(out string error)) { args.Logger?.WLog("Failed to save image: " + error); @@ -52,8 +52,8 @@ internal class PdfHelper /// if the NodePArameter.PartPercentageUpdate should start at 50% internal static void Create(NodeParameters args, string directory, string output, bool halfProgress = true) { - if (args?.PartPercentageUpdate != null) - args?.PartPercentageUpdate(halfProgress ? 50 : 0); + if (args.PartPercentageUpdate != null) + args.PartPercentageUpdate(halfProgress ? 50 : 0); var rgxImages = new Regex(@"\.(jpeg|jpg|jpe|png|webp)$"); var files = Directory.GetFiles(directory).Where(x => rgxImages.IsMatch(x)).ToArray(); @@ -64,11 +64,11 @@ internal class PdfHelper if (file.ToLowerInvariant().EndsWith(".png") || file.ToLowerInvariant().EndsWith(".webp")) { string jpegImage = Path.ChangeExtension(file, "jpg"); - args.ImageHelper.ConvertToJpeg(file, jpegImage, null); + args!.ImageHelper.ConvertToJpeg(file, jpegImage, null); file = jpegImage; } - (int width, int height) = args.ImageHelper.GetDimensions(file).Value; + (int width, int height) = args!.ImageHelper.GetDimensions(file).Value; var jpeg = new JpegImage { diff --git a/ComicNodes/Helpers/UnrarCommandLine.cs b/ComicNodes/Helpers/UnrarCommandLine.cs deleted file mode 100644 index 410e36f2..00000000 --- a/ComicNodes/Helpers/UnrarCommandLine.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Diagnostics; - -namespace FileFlows.ComicNodes.Helpers; - -internal class UnrarCommandLine -{ - /// - /// Uncompresses a folder - /// - /// the node paratemers - /// the file to extract - /// the location to extract to - /// if the NodeParameter.PartPercentageUpdate should end at 50% - internal static void Extract(NodeParameters args, string workingFile, string destinationPath, bool halfProgress = true) - { - if (args?.PartPercentageUpdate != null) - args?.PartPercentageUpdate(halfProgress ? 50 : 0); - - var process = new Process(); - string unrar = args.GetToolPath("unrar")?.EmptyAsNull() ?? "unrar"; - process.StartInfo.FileName = unrar; - process.StartInfo.ArgumentList.Add("x"); - process.StartInfo.ArgumentList.Add("-o+"); - process.StartInfo.ArgumentList.Add(workingFile); - process.StartInfo.ArgumentList.Add(destinationPath); - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - process.Start(); - string output = process.StandardError.ReadToEnd(); - string error = process.StandardError.ReadToEnd(); - process.WaitForExit(); - - args.Logger?.ILog("Unrar output:\n" + output); - if (string.IsNullOrWhiteSpace(error) == false) - args.Logger?.ELog("Unrar error:\n" + error); - - if (process.ExitCode != 0) - throw new Exception(error?.EmptyAsNull() ?? "Failed to extract rar file"); - - PageNameHelper.FixPageNames(destinationPath); - - if (args?.PartPercentageUpdate != null) - args?.PartPercentageUpdate(halfProgress ? 50 : 100); - } - - internal static int GetImageCount(NodeParameters args, string workingFile) - { - var rgxImages = new Regex(@"\.(jpeg|jpg|jpe|png|bmp|tiff|webp|gif)$", RegexOptions.IgnoreCase); - - var process = new Process(); - string unrar = args.GetToolPath("unrar")?.EmptyAsNull() ?? "unrar"; - process.StartInfo.FileName = unrar; - process.StartInfo.ArgumentList.Add("list"); - process.StartInfo.ArgumentList.Add(workingFile); - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - process.Start(); - string output = process.StandardError.ReadToEnd(); - string error = process.StandardError.ReadToEnd(); - process.WaitForExit(); - - if (process.ExitCode != 0) - throw new Exception(error?.EmptyAsNull() ?? "Failed to open rar file"); - - var lines = output.Split('\n', StringSplitOptions.RemoveEmptyEntries); - return lines.Count(x => rgxImages.IsMatch(x.Trim())); - } -} diff --git a/ComicNodes/Tests/ComicInfoTests.cs b/ComicNodes/Tests/ComicInfoTests.cs index 91b123a2..ead3b602 100644 --- a/ComicNodes/Tests/ComicInfoTests.cs +++ b/ComicNodes/Tests/ComicInfoTests.cs @@ -24,7 +24,7 @@ public class ComicInfoTests : TestBase Assert.AreEqual("Batman (1939)", info.Series); Assert.AreEqual("1939", info.Volume); Assert.AreEqual("Batman vs. Joker", info.Title); - Assert.AreEqual(3, info.Tags.Length); + Assert.AreEqual(3, info.Tags!.Length); Assert.AreEqual("old", info.Tags[0]); Assert.AreEqual("great", info.Tags[1]); Assert.AreEqual("amazing", info.Tags[2]); diff --git a/ComicNodes/Tests/ComicTests.cs b/ComicNodes/Tests/ComicTests.cs index f50497c6..ac778b05 100644 --- a/ComicNodes/Tests/ComicTests.cs +++ b/ComicNodes/Tests/ComicTests.cs @@ -12,7 +12,7 @@ public class ComicTests : TestBase public void Comic_Pdf_To_Cbz() { var logger = new TestLogger(); - var args = new NodeParameters(@"D:\comics\testfiles\fp1.pdf", logger, false, string.Empty, null); + var args = new NodeParameters(@"D:\comics\testfiles\fp1.pdf", logger, false, string.Empty, null!); args.TempPath = @"D:\comics\temp"; var node = new ComicConverter(); @@ -27,7 +27,7 @@ public class ComicTests : TestBase public void Comic_Cbz_To_Pdf() { var logger = new TestLogger(); - var args = new NodeParameters(@"D:\comics\testfiles\mb.cbz", logger, false, string.Empty, null); + var args = new NodeParameters(@"D:\comics\testfiles\mb.cbz", logger, false, string.Empty, null!); args.TempPath = @"D:\comics\temp"; var node = new ComicConverter(); @@ -42,7 +42,7 @@ public class ComicTests : TestBase public void Comic_Cb7_To_Cbz() { var logger = new TestLogger(); - var args = new NodeParameters(@"D:\comics\testfiles\cb7.cb7", logger, false, string.Empty, null); + var args = new NodeParameters(@"D:\comics\testfiles\cb7.cb7", logger, false, string.Empty, null!); args.TempPath = @"D:\comics\temp"; var node = new ComicConverter(); @@ -57,7 +57,7 @@ public class ComicTests : TestBase public void Comic_Cbr_To_Cbz() { var logger = new TestLogger(); - var args = new NodeParameters(@"D:\comics\testfiles\bm001.cbr", logger, false, string.Empty, null); + var args = new NodeParameters(@"D:\comics\testfiles\bm001.cbr", logger, false, string.Empty, null!); args.TempPath = @"D:\comics\temp"; var node = new ComicConverter(); diff --git a/ComicNodes/Tests/ExtractTests.cs b/ComicNodes/Tests/ExtractTests.cs index 551030f3..f77ec52e 100644 --- a/ComicNodes/Tests/ExtractTests.cs +++ b/ComicNodes/Tests/ExtractTests.cs @@ -12,7 +12,7 @@ public class ExtractTests public void Extract_Pdf() { var logger = new TestLogger(); - var args = new NodeParameters(@"/home/john/Comics/unprocessed/Ghosts Book 1 Excerpt.pdf", logger, false, string.Empty, null); + var args = new NodeParameters(@"/home/john/Comics/unprocessed/Ghosts Book 1 Excerpt.pdf", logger, false, string.Empty, null!); var node = new ComicExtractor(); node.DestinationPath = @"/home/john/Comics/extracted"; @@ -29,7 +29,7 @@ public class ExtractTests public void Extract_Cbr() { var logger = new TestLogger(); - var args = new NodeParameters(@"D:\comics\testfiles\bm001.cbr", logger, false, string.Empty, null); + var args = new NodeParameters(@"D:\comics\testfiles\bm001.cbr", logger, false, string.Empty, null!); var node = new ComicExtractor(); node.DestinationPath = @"D:\comics\converted\cbr"; @@ -46,7 +46,7 @@ public class ExtractTests public void Extract_Cbz() { var logger = new TestLogger(); - var args = new NodeParameters(@"D:\comics\testfiles\mb.cbz", logger, false, string.Empty, null); + var args = new NodeParameters(@"D:\comics\testfiles\mb.cbz", logger, false, string.Empty, null!); var node = new ComicExtractor(); node.DestinationPath = @"D:\comics\converted\cbz"; @@ -63,7 +63,7 @@ public class ExtractTests public void Extract_Cb7() { var logger = new TestLogger(); - var args = new NodeParameters(@"D:\comics\testfiles\cb7.cb7", logger, false, string.Empty, null); + var args = new NodeParameters(@"D:\comics\testfiles\cb7.cb7", logger, false, string.Empty, null!); var node = new ComicExtractor(); node.DestinationPath = @"D:\comics\converted\cb7"; diff --git a/ComicNodes/Tests/TestLogger.cs b/ComicNodes/Tests/TestLogger.cs index 7e73e7c6..bd6cad85 100644 --- a/ComicNodes/Tests/TestLogger.cs +++ b/ComicNodes/Tests/TestLogger.cs @@ -24,11 +24,13 @@ internal class TestLogger : ILogger { if (args == null || args.Length == 0) return; +#pragma warning disable IL2026 string message = type + " -> " + string.Join(", ", args.Select(x => x == null ? "null" : x.GetType().IsPrimitive || x is string ? x.ToString() : System.Text.Json.JsonSerializer.Serialize(x))); +#pragma warning restore IL2026 Messages.Add(message); } diff --git a/ComicNodes/Tests/_LocalFileService.cs b/ComicNodes/Tests/_LocalFileService.cs index 04971304..def40341 100644 --- a/ComicNodes/Tests/_LocalFileService.cs +++ b/ComicNodes/Tests/_LocalFileService.cs @@ -16,7 +16,7 @@ public class LocalFileService : IFileService /// /// Gets or sets the allowed paths the file service can access /// - public string[] AllowedPaths { get; init; } + public string[]? AllowedPaths { get; init; } /// /// Gets or sets a function for replacing variables in a string. @@ -25,7 +25,7 @@ public class LocalFileService : IFileService /// The function takes a string input, a boolean indicating whether to strip missing variables, /// and a boolean indicating whether to clean special characters. /// - public ReplaceVariablesDelegate ReplaceVariables { get; set; } + public ReplaceVariablesDelegate? ReplaceVariables { get; set; } /// /// Gets or sets the permissions to use for files @@ -35,7 +35,7 @@ public class LocalFileService : IFileService /// /// Gets or sets the owner:group to use for files /// - public string OwnerGroup { get; set; } + public string? OwnerGroup { get; set; } /// /// Gets or sets the logger used for logging @@ -168,7 +168,7 @@ public class LocalFileService : IFileService Name = fileInfo.Name, FullName = fileInfo.FullName, Length = fileInfo.Length, - Directory = fileInfo.DirectoryName + Directory = fileInfo.DirectoryName! }; } catch (Exception ex) @@ -257,7 +257,7 @@ public class LocalFileService : IFileService if (fileInfo.Exists == false) return Result.Fail("File does not exist"); var destDir = new FileInfo(destination).Directory; - if (destDir.Exists == false) + if (destDir!.Exists == false) { destDir.Create(); SetPermissions(destDir.FullName); @@ -286,7 +286,7 @@ public class LocalFileService : IFileService return Result.Fail("File does not exist"); var destDir = new FileInfo(destination).Directory; - if (destDir.Exists == false) + if (destDir!.Exists == false) { destDir.Create(); SetPermissions(destDir.FullName); @@ -434,7 +434,7 @@ public class LocalFileService : IFileService return true; } - public void SetPermissions(string path, int? permissions = null, Action logMethod = null) + public void SetPermissions(string path, int? permissions = null, Action? logMethod = null) { logMethod ??= (string message) => Logger?.ILog(message); @@ -456,26 +456,9 @@ public class LocalFileService : IFileService FileHelper.SetPermissions(logger, path, file: isFile, permissions: permissions); - FileHelper.ChangeOwner(logger, path, file: isFile, ownerGroup: OwnerGroup); + FileHelper.ChangeOwner(logger, path, file: isFile, ownerGroup: OwnerGroup!); logMethod(logger.ToString()); - - return; - - - if (OperatingSystem.IsLinux()) - { - var filePermissions = FileHelper.ConvertLinuxPermissionsToUnixFileMode(permissions.Value); - if (filePermissions == UnixFileMode.None) - { - logMethod("SetPermissions: Invalid file permissions: " + permissions.Value); - return; - } - - File.SetUnixFileMode(path, filePermissions); - logMethod($"SetPermissions: Permission [{filePermissions}] set on file: " + path); - } - } } #endif \ No newline at end of file diff --git a/ComicNodes/Tests/_TestBase.cs b/ComicNodes/Tests/_TestBase.cs index e5bec112..7d0740e8 100644 --- a/ComicNodes/Tests/_TestBase.cs +++ b/ComicNodes/Tests/_TestBase.cs @@ -16,14 +16,14 @@ public abstract class TestBase /// /// The test context instance /// - private TestContext testContextInstance; + private TestContext? testContextInstance; /// /// Gets or sets the test context /// public TestContext TestContext { - get => testContextInstance; + get => testContextInstance!; set => testContextInstance = value; } diff --git a/FileFlows.Plugin.dll b/FileFlows.Plugin.dll index 30f18692e73f0324787012f57deb19722fd0e93e..66f0ac10aeb7df245a63f9fa0879d28a6c0baabf 100644 GIT binary patch delta 250 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 EAALgIGynhq diff --git a/VideoNodes/FFMpegEncoder.cs b/VideoNodes/FFMpegEncoder.cs index 002e7006..0d87fc66 100644 --- a/VideoNodes/FFMpegEncoder.cs +++ b/VideoNodes/FFMpegEncoder.cs @@ -96,7 +96,7 @@ public class FFMpegEncoder var result = new ProcessResult(); var hwDecoderIndex = arguments.FindIndex(x => x == "-hwaccel"); - string decoder = null; + string? decoder = null; if (hwDecoderIndex >= 0 && hwDecoderIndex < arguments.Count - 2) { var decoder2 = arguments[hwDecoderIndex + 1].ToLowerInvariant(); @@ -131,7 +131,7 @@ public class FFMpegEncoder OnStatChange?.Invoke("Decoder", decoder, recordStatistic: true); } - string encoder = null; + string? encoder = null; if (arguments.Any(x => x.ToLowerInvariant().Contains("hevc_qsv") || x.ToLowerInvariant().Contains("h264_qsv") || x.ToLowerInvariant().Contains("av1_qsv"))) diff --git a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioConverter.cs b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioConverter.cs index abd53a7b..b8ce5a62 100644 --- a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioConverter.cs +++ b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioConverter.cs @@ -250,7 +250,7 @@ public class FfmpegBuilderAudioConverter : FfmpegBuilderNode } else { - string testValue = Field switch + string? testValue = Field switch { FIELD_LANGUAGE => track.Language?.EmptyAsNull() ?? track.Stream?.Language ?? string.Empty, FIELD_TITLE => track.Title?.EmptyAsNull() ?? track.Stream?.Title ?? string.Empty, diff --git a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioNormalization.cs b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioNormalization.cs index e7e1b7f4..8d2ab3c1 100644 --- a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioNormalization.cs +++ b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioNormalization.cs @@ -24,7 +24,7 @@ public class FfmpegBuilderAudioNormalization : FfmpegBuilderNode internal const string LOUDNORM_TARGET = "I=-24:LRA=7:TP=-2.0"; - [RequiresUnreferencedCode("")] + /// public override int Execute(NodeParameters args) { if (Model.AudioStreams?.Any() != true) @@ -60,8 +60,8 @@ public class FfmpegBuilderAudioNormalization : FfmpegBuilderNode if (TwoPass) { - if (normalizedTracks.ContainsKey(audio.TypeIndex)) - item.stream.Filter.Add(normalizedTracks[audio.TypeIndex]); + if (normalizedTracks.TryGetValue(audio.TypeIndex, out var track)) + item.stream.Filter.Add(track); else { string twoPass = DoTwoPass(this, args, FFMPEG, audio.TypeIndex, localFile); @@ -78,10 +78,7 @@ public class FfmpegBuilderAudioNormalization : FfmpegBuilderNode return normalizing ? 1 : 2; } - - - - [RequiresUnreferencedCode("Calls System.Text.Json.JsonSerializer.Deserialize(string, System.Text.Json.JsonSerializerOptions?)")] + public static string DoTwoPass(EncodingNode node, NodeParameters args, string ffmpegExe, int audioIndex, string localFile) { //-af loudnorm=I=-24:LRA=7:TP=-2.0" @@ -108,9 +105,9 @@ public class FfmpegBuilderAudioNormalization : FfmpegBuilderNode json = json.Substring(0, json.IndexOf("}", StringComparison.Ordinal) + 1); if (string.IsNullOrEmpty(json)) throw new Exception("Failed to parse TwoPass json"); -#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type. - LoudNormStats stats = JsonSerializer.Deserialize(json); -#pragma warning restore CS8600 // Converting null literal or possible null value to non-nullable type. +#pragma warning disable IL2026 + LoudNormStats? stats = JsonSerializer.Deserialize(json); +#pragma warning restore IL2026 if (stats.input_i == "-inf" || stats.input_lra == "-inf" || stats.input_tp == "-inf" || stats.input_thresh == "-inf" || stats.target_offset == "-inf") { diff --git a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioSetLanguage.cs b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioSetLanguage.cs index 7048b2c8..a3a80103 100644 --- a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioSetLanguage.cs +++ b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioSetLanguage.cs @@ -52,7 +52,7 @@ public class FfmpegBuilderAudioSetLanguage : FfmpegBuilderNode public override int Execute(NodeParameters args) { bool changes = false; - string language = args.ReplaceVariables(Language, stripMissing: true)?.ToLowerInvariant(); + string? language = args.ReplaceVariables(Language, stripMissing: true)?.ToLowerInvariant(); if (string.IsNullOrWhiteSpace(language)) { args.Logger?.WLog("No language set"); @@ -63,9 +63,9 @@ public class FfmpegBuilderAudioSetLanguage : FfmpegBuilderNode if (language.ToLowerInvariant().Contains("orig")) { - if (Variables.TryGetValue("OriginalLanguage", out object oLang) == false || string.IsNullOrEmpty(oLang as string)) + if (Variables.TryGetValue("OriginalLanguage", out object? oLang) == false || string.IsNullOrEmpty(oLang as string)) { - args.Logger?.ILog("OriginalLanguage not found in varaibles."); + args.Logger?.ILog("OriginalLanguage not found in variables."); return 2; } diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderDefaultOriginalLanguage.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderDefaultOriginalLanguage.cs index f908f1ad..d0c78349 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderDefaultOriginalLanguage.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderDefaultOriginalLanguage.cs @@ -63,8 +63,8 @@ public class FfmpegBuilderDefaultOriginalLanguage: FfmpegBuilderNode /// the flow output to call next public override int Execute(NodeParameters args) { - string originalLanguage; - if (args.Variables.TryGetValue("OriginalLanguage", out object oValue) == false || + string? originalLanguage; + if (args.Variables.TryGetValue("OriginalLanguage", out object? oValue) == false || string.IsNullOrWhiteSpace(originalLanguage = oValue as string)) { args.Logger?.ILog("OriginalLanguage variable was not set."); diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs index 89d9b0e4..4ed22d65 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderExecutor.cs @@ -213,7 +213,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode { args.Logger?.ILog("HW_OFF detected"); } - else if (Variables.TryGetValue("HW_OFF", out object oHwOff) && + else if (Variables.TryGetValue("HW_OFF", out object? oHwOff) && (oHwOff as bool? == true || oHwOff?.ToString() == "1") ) { @@ -241,7 +241,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode args.Logger?.ILog("Pixel Format: " + (video?.Stream?.PixelFormat?.EmptyAsNull() ?? "Unknown")); bool targetIs10Bit = string.Join(" ", ffArgs).Contains("p010le"); - string pxtFormat = video?.Stream?.PixelFormat; + string? pxtFormat = video?.Stream?.PixelFormat; if (targetIs10Bit && video?.Stream?.Is10Bit == true) { args.Logger?.ILog( @@ -569,7 +569,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode noDxva2 ? null : new [] { "-hwaccel", "dxva2" }, noD3d11va ? null : new [] { "-hwaccel", "d3d11va" }, noOpencl ? null : new [] { "-hwaccel", "opencl" }, - }; + }.Where(x => x != null).Select(x => x!).ToArray(); } private static string[][] Decoders_hevc(NodeParameters args) @@ -610,7 +610,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode noDxva2 ? null : new [] { "-hwaccel", "dxva2" }, noD3d11va ? null : new [] { "-hwaccel", "d3d11va" }, noOpencl ? null : new [] { "-hwaccel", "opencl" }, - }; + }.Where(x => x != null).Select(x => x!).ToArray(); } private static string[][] Decoders_Default(NodeParameters args) @@ -653,6 +653,6 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode noDxva2 ? null : new [] { "-hwaccel", "dxva2" }, noD3d11va ? null : new [] { "-hwaccel", "d3d11va" }, noOpencl ? null : new [] { "-hwaccel", "opencl" }, - }; + }.Where(x => x != null).Select(x => x!).ToArray(); } } diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderKeepOriginalLanguage.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderKeepOriginalLanguage.cs index 32fa26d9..b0ccffe0 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderKeepOriginalLanguage.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderKeepOriginalLanguage.cs @@ -80,8 +80,8 @@ public class FfmpegBuilderKeepOriginalLanguage: FfmpegBuilderNode /// the flow output to call next public override int Execute(NodeParameters args) { - string originalLanguage; - if (args.Variables.TryGetValue("OriginalLanguage", out object oValue) == false || + string? originalLanguage; + if (args.Variables.TryGetValue("OriginalLanguage", out object? oValue) == false || string.IsNullOrWhiteSpace(originalLanguage = oValue as string)) { args.Logger?.ILog("OriginalLanguage variable was not set."); diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDefaultTrack.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDefaultTrack.cs index 1248f1e9..5d3d155a 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDefaultTrack.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetDefaultTrack.cs @@ -67,7 +67,7 @@ public class FfmpegBuilderSetDefaultTrack: FfmpegBuilderNode public override int Execute(NodeParameters args) { bool changes = false; - string language = args.ReplaceVariables(Language, stripMissing: true)?.ToLowerInvariant(); + string? language = args.ReplaceVariables(Language, stripMissing: true)?.ToLowerInvariant(); if (string.IsNullOrWhiteSpace(language)) { // use index diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs index 16effaa5..3722df4b 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs @@ -272,19 +272,19 @@ public class FfmpegBuilderTrackSorter : FfmpegBuilderNode if (comparison.StartsWith("{") && comparison.EndsWith("}")) { comparison = comparison[1..^1]; - if (args?.Variables?.TryGetValue(comparison, out object variable) == true) + if (args?.Variables?.TryGetValue(comparison, out object? variable) == true) comparison = variable?.ToString() ?? string.Empty; else comparison = string.Empty; } - else if (args?.Variables?.TryGetValue(comparison, out object oVariable) == true) + else if (args?.Variables?.TryGetValue(comparison, out object? oVariable) == true) { comparison = oVariable?.ToString() ?? string.Empty; } if (property == nameof(stream.Language)) { - object oOriginalLanguage = null; + object? oOriginalLanguage = null; args?.Variables?.TryGetValue("OriginalLanguage", out oOriginalLanguage); var originalLanguage = LanguageHelper.GetIso2Code(oOriginalLanguage?.ToString() ?? string.Empty); comparison = string.Join("|", diff --git a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs index cb25602f..75793e20 100644 --- a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs +++ b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs @@ -32,7 +32,7 @@ public class FfmpegSubtitleStream : FfmpegStream bool containerSame = string.Equals(args.SourceExtension, args.DestinationExtension, StringComparison.InvariantCultureIgnoreCase); - string destCodec; + string? destCodec; if (Stream.Codec?.ToLowerInvariant().Equals("mov_text") == true && args.DestinationExtension?.ToLowerInvariant()?.EndsWith("mkv") == true) { diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs b/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs index 8136fc9b..d7d5f286 100644 --- a/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs +++ b/VideoNodes/FfmpegBuilderNodes/Video/FFmpegBuilderVideoBitrateEncode/FfmpegBuilderVideoBitrateEncode.cs @@ -57,7 +57,7 @@ public partial class FfmpegBuilderVideoBitrateEncode:VideoEncodeBase string encoder = Environment.GetEnvironmentVariable("HW_OFF") == "1" || ( - args.Variables?.TryGetValue("HW_OFF", out object oHwOff) == true && (oHwOff as bool? == true || oHwOff?.ToString() == "1") + args.Variables?.TryGetValue("HW_OFF", out object? oHwOff) == true && (oHwOff as bool? == true || oHwOff?.ToString() == "1") ) ? ENCODER_CPU : this.Encoder; args.Logger?.ILog("Bitrate: " + Bitrate); @@ -155,8 +155,8 @@ public partial class FfmpegBuilderVideoBitrateEncode:VideoEncodeBase private static IEnumerable H264(NodeParameters args, bool tenBit, string encoder, int bitrate) { List parameters = new List(); - string[] bit10Filters = null; - string[] non10BitFilters = null; + string[]? bit10Filters = null; + string[]? non10BitFilters = null; if (encoder == ENCODER_CPU) parameters.AddRange(H26x_CPU(false, bitrate, out bit10Filters)); else if(IsMac && encoder == ENCODER_MAC) @@ -199,8 +199,8 @@ public partial class FfmpegBuilderVideoBitrateEncode:VideoEncodeBase { // hevc_qsv -load_plugin hevc_hw -pix_fmt p010le -profile:v main10 -global_quality 21 -g 24 -look_ahead 1 -look_ahead_depth 60 List parameters = new List(); - string[] bit10Filters = null; - string[] non10BitFilters = null; + string[]? bit10Filters = null; + string[]? non10BitFilters = null; bool qsv = false; if (encoder == ENCODER_CPU) parameters.AddRange(H26x_CPU(true, bitrate, out bit10Filters)); diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs index e1a411ba..e28cadc4 100644 --- a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs +++ b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideoEncode/FfmpegBuilderVideoEncode.cs @@ -102,7 +102,7 @@ public partial class FfmpegBuilderVideoEncode:VideoEncodeBase string encoder = Environment.GetEnvironmentVariable("HW_OFF") == "1" || ( - args.Variables?.TryGetValue("HW_OFF", out object oHwOff) == true && (oHwOff as bool? == true || oHwOff?.ToString() == "1") + args.Variables?.TryGetValue("HW_OFF", out object? oHwOff) == true && (oHwOff as bool? == true || oHwOff?.ToString() == "1") ) ? ENCODER_CPU : this.Encoder; args.Logger?.ILog("Quality: " + Quality); @@ -171,8 +171,8 @@ public partial class FfmpegBuilderVideoEncode:VideoEncodeBase private static IEnumerable H264(NodeParameters args, bool tenBit, int quality, string encoder, string speed) { List parameters = new List(); - string[] bit10Filters = null; - string[] non10BitFilters = null; + string[]? bit10Filters = null; + string[]? non10BitFilters = null; if (encoder == ENCODER_CPU) parameters.AddRange(H26x_CPU(false, quality, speed, out bit10Filters)); else if(IsMac && encoder == ENCODER_MAC) @@ -215,8 +215,8 @@ public partial class FfmpegBuilderVideoEncode:VideoEncodeBase { // hevc_qsv -load_plugin hevc_hw -pix_fmt p010le -profile:v main10 -global_quality 21 -g 24 -look_ahead 1 -look_ahead_depth 60 List parameters = new List(); - string[] bit10Filters = null; - string[] non10BitFilters = null; + string[]? bit10Filters = null; + string[]? non10BitFilters = null; bool qsv = false; if (encoder == ENCODER_CPU) parameters.AddRange(H26x_CPU(true, quality, speed, out bit10Filters)); diff --git a/VideoNodes/LogicalNodes/CanUseHardwareEncoding.cs b/VideoNodes/LogicalNodes/CanUseHardwareEncoding.cs index 56b3aa0b..c377e0cd 100644 --- a/VideoNodes/LogicalNodes/CanUseHardwareEncoding.cs +++ b/VideoNodes/LogicalNodes/CanUseHardwareEncoding.cs @@ -307,7 +307,7 @@ public class CanUseHardwareEncoding:Node ArgumentList = arguments.ToArray(), Silent = true }).Result; - string output = cmd.Output?.Contains("va_openDriver() returns 0") == true ? null : cmd.Output; + string? output = cmd.Output?.Contains("va_openDriver() returns 0") == true ? null : cmd.Output; if (cmd.ExitCode != 0 || string.IsNullOrWhiteSpace(output) == false) { string asStr = string.Join(" ", arguments.Select(x => x.Contains(" ") ? "\"" + x + "\"" : x)); diff --git a/VideoNodes/Tests/TestLogger.cs b/VideoNodes/Tests/TestLogger.cs index d23003aa..88248e81 100644 --- a/VideoNodes/Tests/TestLogger.cs +++ b/VideoNodes/Tests/TestLogger.cs @@ -25,11 +25,13 @@ namespace VideoNodes.Tests { if (args == null || args.Length == 0) return; +#pragma warning disable IL2026 string message = type + " -> " + string.Join(", ", args.Select(x => x == null ? "null" : x.GetType().IsPrimitive || x is string ? x.ToString() : System.Text.Json.JsonSerializer.Serialize(x))); +#pragma warning restore IL2026 Messages.Add(message); } diff --git a/VideoNodes/Tests/_TestBase.cs b/VideoNodes/Tests/_TestBase.cs index 6362ffc5..a1938c37 100644 --- a/VideoNodes/Tests/_TestBase.cs +++ b/VideoNodes/Tests/_TestBase.cs @@ -64,7 +64,9 @@ public abstract class TestBase return; string json = File.ReadAllText(filename); +#pragma warning disable IL2026 var settings = JsonSerializer.Deserialize(json); +#pragma warning restore IL2026 this.TestPath = settings.TestPath; this.TempPath = settings.TempPath; this.FfmpegPath = settings.FfmpegPath; diff --git a/VideoNodes/VideoMetadata.cs b/VideoNodes/VideoMetadata.cs index 20c625c6..30cbf2e9 100644 --- a/VideoNodes/VideoMetadata.cs +++ b/VideoNodes/VideoMetadata.cs @@ -34,8 +34,10 @@ internal class VideoMetadata { try { +#pragma warning disable IL2026 string json = JsonSerializer.Serialize(source); var result = JsonSerializer.Deserialize(json); +#pragma warning restore IL2026 return result ?? new (); } catch (Exception) diff --git a/VideoNodes/VideoNodes/VideoNode.cs b/VideoNodes/VideoNodes/VideoNode.cs index 766f2189..df2287c5 100644 --- a/VideoNodes/VideoNodes/VideoNode.cs +++ b/VideoNodes/VideoNodes/VideoNode.cs @@ -233,8 +233,10 @@ namespace FileFlows.VideoNodes // may be from non Legacy VideoNodes try { +#pragma warning disable IL2026 string json = JsonSerializer.Serialize(args.Parameters[VIDEO_INFO]); var vi = JsonSerializer.Deserialize(json); +#pragma warning restore IL2026 if (vi == null) throw new Exception("Failed to deserailize object"); return vi;