diff --git a/BasicNodes/File/PatternReplacer.cs b/BasicNodes/File/PatternReplacer.cs index 141a3cf3..64a13870 100644 --- a/BasicNodes/File/PatternReplacer.cs +++ b/BasicNodes/File/PatternReplacer.cs @@ -30,22 +30,11 @@ public class PatternReplacer : Node if (Replacements?.Any() != true) return 2; // no replacements - string filename = new FileInfo(UseWorkingFileName ? args.WorkingFile : args.FileName).Name; - string updated = filename; try { - foreach(var replacement in Replacements) - { - try - { - // this might not be a regex, but try it first - updated = Regex.Replace(updated, replacement.Key, replacement.Value, RegexOptions.IgnoreCase); - } - catch (Exception ex) { } - - updated = updated.Replace(replacement.Key, replacement.Value); - } - + string filename = new FileInfo(UseWorkingFileName ? args.WorkingFile : args.FileName).Name; + string updated = RunReplacements(args, filename); + if (updated == filename) { args.Logger?.ILog("No replacements found in file: " + filename); @@ -76,4 +65,39 @@ public class PatternReplacer : Node return -1; } } + + /// + /// Run replacements on a filename + /// + /// The node parameters + /// the filename to replacement + /// the replaced files + internal string RunReplacements(NodeParameters args, string filename) + { + string updated = filename; + foreach(var replacement in Replacements) + { + var value = replacement.Value ?? string.Empty; + if (value == "EMPTY") + { + args?.Logger?.ILog("Using an EMPTY replacement"); + value = string.Empty; + } + else + { + + args?.Logger?.ILog("Using replacement value: \"" + value + "\""); + } + try + { + // this might not be a regex, but try it first + updated = Regex.Replace(updated, replacement.Key, value, RegexOptions.IgnoreCase); + } + catch (Exception ex) { } + + updated = updated.Replace(replacement.Key, value); + } + + return updated; + } } diff --git a/BasicNodes/Tests/PatternReplacerTests.cs b/BasicNodes/Tests/PatternReplacerTests.cs index ec6741b8..86218d80 100644 --- a/BasicNodes/Tests/PatternReplacerTests.cs +++ b/BasicNodes/Tests/PatternReplacerTests.cs @@ -40,6 +40,20 @@ namespace BasicNodes.Tests Assert.AreEqual(1, result); Assert.AreEqual(@"c:\test\Seinfeld 3x06.mkv", args.WorkingFile); } + [TestMethod] + public void PatternReplacer_Empty() + { + PatternReplacer node = new PatternReplacer(); + node.Replacements = new List> + { + new KeyValuePair(@"\.h265", "EMPTY") + }; + node.UnitTest = true; + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\Seinfeld.h265.mkv", new TestLogger(), false, string.Empty); + + var result = node.RunReplacements(args, args.WorkingFile); + Assert.AreEqual(@"c:\test\Seinfeld.mkv", result); + } } }