diff --git a/BasicNodes/File/CopyFile.cs b/BasicNodes/File/CopyFile.cs
index af84705e..81a03e5b 100644
--- a/BasicNodes/File/CopyFile.cs
+++ b/BasicNodes/File/CopyFile.cs
@@ -79,55 +79,16 @@ namespace FileFlows.BasicNodes.File
public override int Execute(NodeParameters args)
{
Canceled = false;
- string dest = args.ReplaceVariables(DestinationPath, true);
-
- args.Logger.ILog($"CopyFile.Dest[0] '{dest}'");
- dest = dest.Replace("\\", Path.DirectorySeparatorChar.ToString());
- dest = dest.Replace("/", Path.DirectorySeparatorChar.ToString());
- args.Logger.ILog($"CopyFile.Dest[1] '{dest}'");
- if (string.IsNullOrEmpty(dest))
- {
- args.Logger?.ELog("No destination specified");
- return -1;
- }
-
- args.Logger.ILog($"CopyFile.Dest[2] '{dest}'");
- if (CopyFolder) // we only want the full directory relative to the library, we don't want the original filename
- {
- dest = Path.Combine(dest, args.RelativeFile);
- dest = dest[..dest.LastIndexOf(Path.DirectorySeparatorChar)];
- args.Logger?.ILog("Using relative directory: " + dest);
- }
- dest = Path.Combine(dest, new FileInfo(args.FileName).Name);
- args.Logger.ILog($"CopyFile.Dest[3] '{dest}'");
-
- 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;
- }
- args.Logger.ILog($"CopyFile.Dest[5] '{dest}'");
-
+ var destParts = MoveFile.GetDestinationPathParts(args, DestinationPath, DestinationFile, CopyFolder);
+ if (destParts.Filename == null)
+ return -1;
+
// cant use new FileInfo(dest).Directory.Name here since
// if the folder is a linux folder and this node is running on windows
// /mnt, etc will be converted to c:\mnt and break the destination
- var destDir = dest.Substring(0, dest.Replace("\\", "/").LastIndexOf("/"));
-
- if(string.IsNullOrEmpty(DestinationFile) == false)
- {
- // 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}'");
-
- args.Logger.ILog($"CopyFileArgs: '{args.WorkingFile}', '{dest}'");
+ var destDir = destParts.Path;
+ string dest = destParts.Path + destParts.Separator + destParts.Filename;
bool copied = args.CopyFile(args.WorkingFile, dest, updateWorkingFile: true);
if (!copied)
@@ -171,7 +132,7 @@ namespace FileFlows.BasicNodes.File
}
catch (Exception ex)
{
- args.Logger.WLog("Error copying additinoal files: " + ex.Message);
+ args.Logger.WLog("Error copying additional files: " + ex.Message);
}
}
diff --git a/BasicNodes/File/MoveFile.cs b/BasicNodes/File/MoveFile.cs
index 39ed5f14..d20eab3b 100644
--- a/BasicNodes/File/MoveFile.cs
+++ b/BasicNodes/File/MoveFile.cs
@@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
+using System.Text.RegularExpressions;
using FileFlows.Plugin;
using FileFlows.Plugin.Attributes;
@@ -80,7 +81,7 @@ public class MoveFile : Node
/// the output to call next
public override int Execute(NodeParameters args)
{
- var dest = GetDesitnationPath(args, DestinationPath, DestinationFile, MoveFolder);
+ var dest = GetDestinationPath(args, DestinationPath, DestinationFile, MoveFolder);
if (dest == null)
return -1;
@@ -146,55 +147,76 @@ public class MoveFile : Node
return 1;
}
- internal static string GetDesitnationPath(NodeParameters args, string destinationPath, string destinationFile = null, bool moveFolder = false)
+ ///
+ /// Gets the full destination path
+ ///
+ /// the node parameters
+ /// the requested destination path
+ /// the requested destination file
+ /// if the relative folder should be also be included, relative to the library
+ /// the full destination path
+ internal static string GetDestinationPath(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))
+ var result = GetDestinationPathParts(args, destinationPath, destinationFile, moveFolder);
+ if(result.Filename == null)
+ return null;
+ return result.Path + result.Separator + result.Filename;
+ }
+
+ ///
+ /// Gets the destination path and filename
+ ///
+ /// the node parameters
+ /// the requested destination path
+ /// the requested destination file
+ /// if the relative folder should be also be included, relative to the library
+ /// the path and filename
+ internal static (string? Path, string? Filename, string? Separator) GetDestinationPathParts(NodeParameters args, string destinationPath, string destinationFile = null, bool moveFolder = false)
+ {
+ string separator = args.WorkingFile.IndexOf('/') >= 0 ? "/" : "\\";
+ string destFolder = args.ReplaceVariables(destinationPath, true);
+ destFolder = destFolder.Replace("\\", separator);
+ destFolder = destFolder.Replace("/", separator);
+ string destFilename = args.FileName.Replace("\\", separator)
+ .Replace("/", separator);
+ destFilename = destFilename.Substring(destFilename.LastIndexOf(separator) + 1);
+ if (string.IsNullOrEmpty(destFolder))
{
args.Logger?.ELog("No destination specified");
args.Result = NodeResult.Failure;
- return null;
+ return (null, null, null);
}
args.Result = NodeResult.Failure;
if (moveFolder) // we only want the full directory relative to the library, we don't want the original filename
{
- dest = Path.Combine(dest, args.RelativeFile);
- dest = dest[..dest.LastIndexOf(Path.DirectorySeparatorChar)];
- args.Logger?.ILog("Using relative directory: " + dest);
- }
-
- 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;
+ destFolder = Path.Combine(destFolder, args.RelativeFile);
+ destFolder = destFolder[..destFolder.LastIndexOf(separator)];
+ args.Logger?.ILog("Using relative directory: " + destFolder);
}
+ // dest = Path.Combine(dest, argsFilename);
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);
+ destFilename = args.ReplaceVariables(destinationFile);
}
+
+ string destExtension = new FileInfo(destFilename).Extension;
+ string workingExtension = new FileInfo(args.WorkingFile).Extension;
- fiDest = new FileInfo(dest);
- var fiWorkingFile = new FileInfo(args.WorkingFile);
- if (fiDest.Extension != fiWorkingFile.Extension)
+ if (string.IsNullOrEmpty(destExtension) == false && destExtension != workingExtension)
{
- dest = dest.Replace(fiDest.Extension, fiWorkingFile.Extension);
- fiDest = new FileInfo(dest);
+ destFilename = destFilename.Substring(0, destFilename.LastIndexOf(".")) + workingExtension;
}
- args.Logger?.ILog("Final destination: " + dest);
-
- return dest;
+ args.Logger?.ILog("Final destination path: " + destFolder);
+ args.Logger?.ILog("Final destination filename: " + destFilename);
+
+ return (destFolder, destFilename, separator);
}
}
\ No newline at end of file
diff --git a/BasicNodes/Tests/MoveTests.cs b/BasicNodes/Tests/MoveTests.cs
index 11d4be9c..bcf4b012 100644
--- a/BasicNodes/Tests/MoveTests.cs
+++ b/BasicNodes/Tests/MoveTests.cs
@@ -17,79 +17,79 @@ public class MoveTests
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);
+ var args = new FileFlows.Plugin.NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty);
- string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Name}");
+ string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Name}");
- Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest);
+ 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);
+ var args = new FileFlows.Plugin.NodeParameters(@"/home/user/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}");
+ string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Name}{file.Extension}");
- Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest);
+ 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);
+ var args = new FileFlows.Plugin.NodeParameters(@"/home/user/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}");
+ string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.NameNoExtension}");
- Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.mkv", dest);
+ 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);
+ var args = new NodeParameters(@"/home/user/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}");
+ string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Name}{ext}");
- Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest);
+ 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);
+ var args = new FileFlows.Plugin.NodeParameters(@"/home/user/test/tv4a-starwarsrebels.s01e15-1080p.mkv", logger, false, string.Empty);
- string dest = MoveFile.GetDesitnationPath(args, @"D:\test", "{file.Orig.FileName}");
+ string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Orig.FileName}");
- Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest);
+ 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);
+ var args = new FileFlows.Plugin.NodeParameters(@"/home/user/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}");
+ string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Orig.FileName}{file.Orig.Extension}");
- Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.s01e15-1080p.mkv", dest);
+ 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);
+ var args = new FileFlows.Plugin.NodeParameters(@"/home/user/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}");
+ string dest = MoveFile.GetDestinationPath(args, @"D:\test", "{file.Orig.FileNameNoExtension}");
- Assert.AreEqual(@"D:\test\tv4a-starwarsrebels.mkv", dest);
+ Assert.AreEqual(@"D:/test/tv4a-starwarsrebels.mkv", dest);
}
}