diff --git a/BasicNodes/File/CopyFile.cs b/BasicNodes/File/CopyFile.cs index ca1c9ed3..b1242152 100644 --- a/BasicNodes/File/CopyFile.cs +++ b/BasicNodes/File/CopyFile.cs @@ -107,7 +107,12 @@ namespace FileFlows.BasicNodes.File if(string.IsNullOrEmpty(DestinationFile) == false) { - string destFile = args.ReplaceVariables(DestinationFile); + // FF-154 - changed file.Name and file.Orig.Filename to be the full short filename including the extension + string destFile = DestinationFile; + destFile = destFile.Replace("{file.Orig.FileName}{file.Orig.Extension}", "{file.Orig.FileName}"); + destFile = destFile.Replace("{file.Name}{file.Extension}", "{file.Name}"); + destFile = destFile.Replace("{file.Name}{ext}", "{file.Name}"); + destFile = args.ReplaceVariables(destFile); dest = Path.Combine(destDir!, destFile); } args.Logger.ILog($"CopyFile.Dest[6] '{dest}'"); diff --git a/BasicNodes/File/MoveFile.cs b/BasicNodes/File/MoveFile.cs index fb331802..dbca1714 100644 --- a/BasicNodes/File/MoveFile.cs +++ b/BasicNodes/File/MoveFile.cs @@ -36,44 +36,12 @@ namespace FileFlows.BasicNodes.File public override int Execute(NodeParameters args) { - string dest = args.ReplaceVariables(DestinationPath, true); - dest = dest.Replace("\\", Path.DirectorySeparatorChar.ToString()); - dest = dest.Replace("/", Path.DirectorySeparatorChar.ToString()); - if (string.IsNullOrEmpty(dest)) - { - args.Logger?.ELog("No destination specified"); - args.Result = NodeResult.Failure; + var dest = GetDesitnationPath(args, DestinationPath, DestinationFile, MoveFolder); + if (dest == null) return -1; - } - args.Result = NodeResult.Failure; - if (MoveFolder) - dest = Path.Combine(dest, args.RelativeFile); - else - dest = Path.Combine(dest, new FileInfo(args.FileName).Name); + string destDir = new FileInfo(dest).DirectoryName; - var fiDest = new FileInfo(dest); - var fiWorking = new FileInfo(args.WorkingFile); - if (string.IsNullOrEmpty(fiDest.Extension) == false && fiDest.Extension != fiWorking.Extension) - { - dest = dest.Substring(0, dest.LastIndexOf(".")) + fiWorking.Extension; - } - - if (string.IsNullOrEmpty(DestinationFile) == false) - { - string destFile = args.ReplaceVariables(DestinationFile); - dest = Path.Combine(new FileInfo(dest).DirectoryName!, destFile); - } - - fiDest = new FileInfo(dest); - var fiWorkingFile = new FileInfo(args.WorkingFile); - if (fiDest.Extension != fiWorkingFile.Extension) - { - dest = dest.Replace(fiDest.Extension, fiWorkingFile.Extension); - fiDest = new FileInfo(dest); - } - - var destDir = fiDest.DirectoryName; args.CreateDirectoryIfNotExists(destDir ?? String.Empty); var srcDir = AdditionalFilesFromOriginal ? new FileInfo(args.FileName).DirectoryName : new FileInfo(args.WorkingFile).DirectoryName; @@ -124,5 +92,51 @@ namespace FileFlows.BasicNodes.File } return 1; } + + internal static string GetDesitnationPath(NodeParameters args, string destinationPath, string destinationFile = null, bool moveFolder = false) + { + string dest = args.ReplaceVariables(destinationPath, true); + dest = dest.Replace("\\", Path.DirectorySeparatorChar.ToString()); + dest = dest.Replace("/", Path.DirectorySeparatorChar.ToString()); + if (string.IsNullOrEmpty(dest)) + { + args.Logger?.ELog("No destination specified"); + args.Result = NodeResult.Failure; + return null; + } + args.Result = NodeResult.Failure; + + if (moveFolder) + dest = Path.Combine(dest, args.RelativeFile); + else + dest = Path.Combine(dest, new FileInfo(args.FileName).Name); + + var fiDest = new FileInfo(dest); + var fiWorking = new FileInfo(args.WorkingFile); + if (string.IsNullOrEmpty(fiDest.Extension) == false && fiDest.Extension != fiWorking.Extension) + { + dest = dest.Substring(0, dest.LastIndexOf(".")) + fiWorking.Extension; + } + + if (string.IsNullOrEmpty(destinationFile) == false) + { + // FF-154 - changed file.Name and file.Orig.Filename to be the full short filename including the extension + destinationFile = destinationFile.Replace("{file.Orig.FileName}{file.Orig.Extension}", "{file.Orig.FileName}"); + destinationFile = destinationFile.Replace("{file.Name}{file.Extension}", "{file.Name}"); + destinationFile = destinationFile.Replace("{file.Name}{ext}", "{file.Name}"); + string destFile = args.ReplaceVariables(destinationFile); + dest = Path.Combine(new FileInfo(dest).DirectoryName!, destFile); + } + + fiDest = new FileInfo(dest); + var fiWorkingFile = new FileInfo(args.WorkingFile); + if (fiDest.Extension != fiWorkingFile.Extension) + { + dest = dest.Replace(fiDest.Extension, fiWorkingFile.Extension); + fiDest = new FileInfo(dest); + } + + return dest; + } } } \ No newline at end of file diff --git a/BasicNodes/Tests/MoveTests.cs b/BasicNodes/Tests/MoveTests.cs new file mode 100644 index 00000000..11d4be9c --- /dev/null +++ b/BasicNodes/Tests/MoveTests.cs @@ -0,0 +1,96 @@ +using FileFlows.Plugin; + +#if(DEBUG) + +namespace BasicNodes.Tests; + +using FileFlows.BasicNodes.File; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Text.RegularExpressions; + + +[TestClass] +public class MoveTests +{ + + [TestMethod] + public void MoveTests_Variable_Filename() + { + var logger = new TestLogger(); + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty); + + string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Name}"); + + Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + } + [TestMethod] + public void MoveTests_Variable_FilenameExt() + { + var logger = new TestLogger(); + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty); + + // ensure we dont double up the extension after FF-154 + string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Name}{file.Extension}"); + + Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + } + + [TestMethod] + public void MoveTests_Variable_FilenameNoExtension() + { + var logger = new TestLogger(); + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty); + + // ensure we dont double up the extension after FF-154 + string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.NameNoExtension}"); + + Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.mkv", dest); + } + + [TestMethod] + public void MoveTests_Variable_Ext() + { + var logger = new TestLogger(); + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty); + + // ensure we dont double up the extension after FF-154 + string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Name}{ext}"); + + Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + } + + [TestMethod] + public void MoveTests_Variable_Original_Filename() + { + var logger = new TestLogger(); + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty); + + string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Orig.FileName}"); + + Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + } + [TestMethod] + public void MoveTests_Variable_Original_FilenameExt() + { + var logger = new TestLogger(); + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty); + + // ensure we dont double up the extension after FF-154 + string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Orig.FileName}{file.Orig.Extension}"); + + Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest); + } + [TestMethod] + public void MoveTests_Variable_Original_NoExtension() + { + var logger = new TestLogger(); + var args = new FileFlows.Plugin.NodeParameters(@"c:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty); + + // ensure we dont double up the extension after FF-154 + string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Orig.FileNameNoExtension}"); + + Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.mkv", dest); + } +} + +#endif \ No newline at end of file diff --git a/FileFlows.Plugin.dll b/FileFlows.Plugin.dll index f301c423..68da7b2e 100644 Binary files a/FileFlows.Plugin.dll and b/FileFlows.Plugin.dll differ diff --git a/FileFlows.Plugin.pdb b/FileFlows.Plugin.pdb index c288582e..3872e7ef 100644 Binary files a/FileFlows.Plugin.pdb and b/FileFlows.Plugin.pdb differ