From 6a4a7bdb9d983bc2798ec14681675ceabb6dd81d Mon Sep 17 00:00:00 2001 From: John Andrews Date: Tue, 9 Aug 2022 12:22:48 +1200 Subject: [PATCH] FF-154 - added tests and updated to work with noextension change --- BasicNodes/File/CopyFile.cs | 7 ++- BasicNodes/File/MoveFile.cs | 84 ++++++++++++++++------------- BasicNodes/Tests/MoveTests.cs | 96 ++++++++++++++++++++++++++++++++++ FileFlows.Plugin.dll | Bin 48128 -> 48640 bytes FileFlows.Plugin.pdb | Bin 26636 -> 26636 bytes 5 files changed, 151 insertions(+), 36 deletions(-) create mode 100644 BasicNodes/Tests/MoveTests.cs 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 f301c4237f8e9bc5d502a34edab69ca52ba80216..68da7b2e3f430e25f208a1b7f16f3b672d093331 100644 GIT binary patch delta 4214 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 diff --git a/FileFlows.Plugin.pdb b/FileFlows.Plugin.pdb index c288582e4073f40ea274ca302f390a0293f3a7b3..3872e7ef4c99048b1b487fa649c1161780691761 100644 GIT binary patch delta 290 zcmeCVz}RzvaYBvA(_OjKB*NKz*2|Qgw4VRAUEgQf+Km&Ia50unHs#hAlwf9H2xH)4 zU}s=tC}m<`__n!}d$PDfbY@GxT&UcZWqsSGw!6kk-h5RQr<=LzzQS9xcMMmiXl&L{ z=GWomVq;=xWMdGOnC##$!YK^mJz!wem>lbG$kVRL*gjE?g@J*w(R1=Fe>ujG$vgek z7?UPH@c+fQX!7j<3&u^8MFLeB4{WvyRAFRP-y9#*z$iS6m61W5i9?8ik*Tth2dKMg z>Eutr-CX-h8#eQTxW^~Ahg@X*FgY?*j`8>8icmvNP6c;CpiHyS&+fvI=qa}CQGF#O`e|I#2B$zDrFioW5?u;>CpguAYDHI delta 290 zcmV+-0p0$L&;g9l0g!wYc<%uG3XkVYqBRyc$+B$SRp`*Tv5=$+0X>s73ojAi0ssJ3 z015yH009750ssKovvmuT7a##y`qx~6Hn*I=_K zBM&SI2?hcHfa(Ah7L!0v6bTXr0sw);00AbGT~9F#hUo!^Q62;U00DtVlbTN+0aBB> zPbL9ili*MK0icuHP&fgwlN3=U0lu?3Q6vEYC9_{rfB_Sj1pxpT0tgZS0Rnk>3;+ND zf}@l2Q;Q0`b%3)C0004k#gm6r(E;w0SydhZ`IC56F$o7CM-c!30fP{evQ<|BBa;eN o9sw?sDOMfpTc6isG5`Po