FF-1173 - updated for new file service

This commit is contained in:
John Andrews
2024-01-09 22:43:05 +13:00
parent 2bd7e70a83
commit baae1c7a5d
16 changed files with 206 additions and 281 deletions

View File

@@ -34,25 +34,6 @@ public class Delete : Node
/// </summary>
[TextVariable(1)] public string FileName { get; set; }
/// <summary>
/// Tests if a path is a directory
/// </summary>
/// <param name="path">the path to test</param>
/// <returns>true if a directory, otherwise false</returns>
private bool IsDirectory(string path)
{
if (string.IsNullOrWhiteSpace(path))
return false;
try
{
return Directory.Exists(path);
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// Executes the flow element
@@ -65,21 +46,17 @@ public class Delete : Node
if (string.IsNullOrEmpty(path))
path = args.WorkingFile;
bool originalFile = path == args.FileName;
if (originalFile && args.IsRemote)
{
args.Logger?.ILog("Deleting original file remotely: " + args.LibraryFileName);
var result = args.DeleteRemote(args.LibraryFileName, false, null);
return 1;
}
if (IsDirectory(path))
if (args.FileService.DirectoryExists(path).Is(true))
{
try
{
args.Logger?.ILog("Deleting directory: " + path);
Directory.Delete(path, true);
args.Logger?.ILog("Deleted directory: " + path);
var result = args.FileService.DirectoryDelete(path, true);
if (result.IsFailed)
args.Logger?.ELog("Failed deleting directory: "+ result.Error);
else
args.Logger?.ILog("Deleted directory: " + path);
return 1;
}
catch (Exception ex)
@@ -93,8 +70,11 @@ public class Delete : Node
try
{
args.Logger?.ILog("Deleting file: " + path);
System.IO.File.Delete(path);
args.Logger?.ILog("Deleted file: " + path);
var result = args.FileService.FileDelete(path);
if(result.IsFailed)
args.Logger?.ELog("Failed to Deleted file: " + result.Error);
else
args.Logger?.ILog("Deleted file: " + path);
return 1;
}
catch (Exception ex)

View File

@@ -1,5 +1,6 @@
using FileFlows.Plugin;
using FileFlows.Plugin.Attributes;
using FileHelper = FileFlows.Plugin.Helpers.FileHelper;
namespace FileFlows.BasicNodes.File;
@@ -52,7 +53,7 @@ public class DeleteSourceDirectory : Node
args.Logger?.ILog("Library File Name: " + args.LibraryFileName);
args.Logger?.ILog("Library Path: " + path);
args.Logger?.ILog("Relative File: " + args.RelativeFile);
args.Logger?.ILog("IsRemote: " + args.IsRemote);
//args.Logger?.ILog("IsRemote: " + args.IsRemote);
int pathIndex = args.RelativeFile.IndexOfAny(new[] { '\\', '/' });
if (pathIndex < 0)
@@ -63,91 +64,89 @@ public class DeleteSourceDirectory : Node
string topdir = args.RelativeFile.Substring(0, pathIndex);
string pathSeparator = args.IsRemote
? args.LibraryPath.StartsWith("/") ? "/" : "\\"
: Path.PathSeparator.ToString();
string pathSeparator = args.FileService.PathSeparator.ToString();
args.Logger?.ILog("Path Separator: " + pathSeparator);
string pathToDelete = path.EndsWith(pathSeparator) ? path + topdir : path + pathSeparator + topdir;
args.Logger?.ILog("Path To Delete: " + pathToDelete);
if (args.IsRemote)
{
if (args.LibraryFileName.StartsWith(pathToDelete))
{
args.Logger?.ILog("Deleting original file remotely: " + args.LibraryFileName);
args.DeleteRemote(args.LibraryFileName, false,
null); // first delete the source file since its in this directory we are deleting
}
args.Logger?.ILog("Sending request to delete remote path: " + pathToDelete);
// if (args.IsRemote)
// {
// if (args.LibraryFileName.StartsWith(pathToDelete))
// {
// args.Logger?.ILog("Deleting original file remotely: " + args.LibraryFileName);
// args.DeleteRemote(args.LibraryFileName, false,
// null); // first delete the source file since its in this directory we are deleting
// }
//
// args.Logger?.ILog("Sending request to delete remote path: " + pathToDelete);
//
// bool deleted = args.DeleteRemote(pathToDelete, IfEmpty, IncludePatterns);
// if (deleted)
// args.Logger?.ILog("Successfully deleted remote path: " + pathToDelete);
// else
// args.Logger?.WLog("Failed to delete remote path: " + pathToDelete);
// return deleted ? 1 : 2;
// }
bool deleted = args.DeleteRemote(pathToDelete, IfEmpty, IncludePatterns);
if (deleted)
args.Logger?.ILog("Successfully deleted remote path: " + pathToDelete);
else
args.Logger?.WLog("Failed to delete remote path: " + pathToDelete);
return deleted ? 1 : 2;
if (IfEmpty)
{
string libFilePath = args.IsDirectory ? args.FileName : FileHelper.GetDirectory(args.FileName);
return RecursiveDelete(args, path, libFilePath, true);
}
try
args.Logger?.ILog("Deleting directory: " + pathToDelete);
var result = args.FileService.DirectoryDelete(pathToDelete, false);
if (result.IsFailed)
{
if (IfEmpty)
{
string libFilePath = args.IsDirectory ? args.FileName : new FileInfo(args.FileName).DirectoryName;
return RecursiveDelete(args, path, libFilePath, true);
}
args.Logger?.ILog("Deleting directory: " + pathToDelete);
Directory.Delete(pathToDelete, true);
}
catch (Exception ex)
{
args.Logger?.WLog("Failed to delete directory: " + ex.Message);
return
Directory.Exists(pathToDelete)
? 2
: 1; // silent fail, another runner may have already deleted it, eg if processing music albums
args.Logger?.WLog("Failed to deleted directory: " + result.Error);
return 2;
}
return base.Execute(args);
return 1;
}
private int RecursiveDelete(NodeParameters args, string root, string path, bool deleteSubFolders)
{
if (string.IsNullOrWhiteSpace(path))
return 1;
args.Logger?.ILog("Checking directory to delete: " + path);
DirectoryInfo dir = new DirectoryInfo(path);
if (dir.FullName.ToLower() == root.ToLower())
//DirectoryInfo dir = new DirectoryInfo(path);
var dirFullName = FileHelper.GetDirectory(path);
if (string.Equals(dirFullName, root, StringComparison.CurrentCultureIgnoreCase))
{
args.Logger?.ILog("At root, stopping deleting: " + root);
return 1;
}
if (dir.FullName.Length <= root.Length)
if (dirFullName.Length <= root.Length)
{
args.Logger?.ILog("At root2, stopping deleting: " + root);
return 1;
}
if (deleteSubFolders == false && dir.GetDirectories().Any())
if (deleteSubFolders == false)
{
args.Logger?.ILog("Directory contains subfolders, cannot delete: " + dir.FullName);
return 2;
if (args.FileService.GetDirectories(path).ValueOrDefault?.Any() == true)
{
args.Logger?.ILog("Directory contains subfolders, cannot delete: " + path);
return 2;
}
}
var files = dir.GetFiles("*.*", SearchOption.AllDirectories);
var files = args.FileService.GetFiles(path, "*.*", true).ValueOrDefault ?? new string [] {};
if (IncludePatterns?.Any() == true)
{
var count = files.Where(x =>
{
foreach (var pattern in IncludePatterns)
{
if (x.FullName.Contains(pattern))
if (x.Contains(pattern))
return true;
try
{
if (System.Text.RegularExpressions.Regex.IsMatch(x.FullName, pattern,
if (System.Text.RegularExpressions.Regex.IsMatch(x, pattern,
System.Text.RegularExpressions.RegexOptions.IgnoreCase))
return true;
}
@@ -160,27 +159,28 @@ public class DeleteSourceDirectory : Node
}).Count();
if (count > 0)
{
args.Logger?.ILog("Directory is not empty, cannot delete: " + dir.FullName);
args.Logger?.ILog("Directory is not empty, cannot delete: " + path);
return 2;
}
}
else if (files.Length == 0)
{
args.Logger?.ILog("Directory is not empty, cannot delete: " + dir.FullName);
args.Logger?.ILog("Directory is not empty, cannot delete: " + path);
return 2;
}
args.Logger?.ILog("Deleting directory: " + dir.FullName);
args.Logger?.ILog("Deleting directory: " + path);
try
{
dir.Delete(true);
args.FileService.DirectoryDelete(path, true);
}
catch (Exception ex)
{
args.Logger?.WLog("Failed to delete directory: " + ex.Message);
return dir.Exists ? 2 : 1; // silently fail
return args.FileService.DirectoryExists(path).Is(true) ? 2 : 1; // silently fail
}
return RecursiveDelete(args, root, dir.Parent.FullName, false);
string parent = FileHelper.GetDirectory(path);
return RecursiveDelete(args, root, parent, false);
}
}

View File

@@ -26,15 +26,24 @@ public class FileExists: Node
}
try
{
file = args.MapPath(file);
var fileInfo = new FileInfo(file);
if (fileInfo.Exists)
var result = args.FileService.FileExists(file);
if (result.Is(true))
{
args.Logger?.ILog("File does exist: " + file);
return 1;
}
args.Logger?.ILog("File does NOT exist: " + file);
return 2;
// file = args.MapPath(file);
// var fileInfo = new FileInfo(file);
// if (fileInfo.Exists)
// {
// args.Logger?.ILog("File does exist: " + file);
// return 1;
// }
// args.Logger?.ILog("File does NOT exist: " + file);
// return 2;
}
catch (Exception ex)
{

View File

@@ -21,13 +21,14 @@ namespace FileFlows.BasicNodes.File
public override int Execute(NodeParameters args)
{
var fi = new FileInfo(args.WorkingFile);
if (fi.Exists == false) {
var result = args.FileService.FileSize(args.WorkingFile);
if(result.IsFailed)
{
args.Logger.ELog("File Does not exist: " + args.WorkingFile);
return -1;
}
return TestSize(args, fi.Length);
return TestSize(args, result.ValueOrDefault);
}
public int TestSize(NodeParameters args, long size)

View File

@@ -15,9 +15,10 @@ namespace FileFlows.BasicNodes.File
public override int Execute(NodeParameters args)
{
FileInfo fiOriginal = new FileInfo(args.FileName);
float origSize = 0;
if (fiOriginal.Exists == false)
//FileInfo fiOriginal = new FileInfo(args.FileName);
var result = args.FileService.FileSize(args.FileName);
long origSize = result.ValueOrDefault;
if (result.IsFailed)
{
// try get from variables
if (args.Variables.ContainsKey("file.Orig.Size") && args.Variables["file.Orig.Size"] is long tSize && tSize > 0)
@@ -30,14 +31,11 @@ namespace FileFlows.BasicNodes.File
return -1;
}
}
else
{
origSize = fiOriginal.Length;
}
float wfSize = 0;
FileInfo fiWorkingFile = new FileInfo(args.WorkingFile);
if (fiWorkingFile.Exists == false)
//FileInfo fiWorkingFile = new FileInfo(args.WorkingFile);
result = args.FileService.FileSize(args.WorkingFile);
long wfSize = result.ValueOrDefault;
if (result.IsFailed)
{
if (args.WorkingFileSize > 0)
{
@@ -49,14 +47,10 @@ namespace FileFlows.BasicNodes.File
return -1;
}
}
else
{
wfSize = fiWorkingFile.Length;
}
args.Logger?.ILog("Original File Size: " + String.Format("{0:n0}", origSize));
args.Logger?.ILog("Working File Size: " + String.Format("{0:n0}", wfSize));
args.Logger?.ILog($"Original File Size: {origSize:n0}");
args.Logger?.ILog($"Working File Size: {wfSize:n0}");
if (wfSize > origSize)

View File

@@ -33,14 +33,14 @@ public class InputFile : Node
{
try
{
FileInfo fileInfo = new FileInfo(args.WorkingFile);
if (fileInfo.Exists == false)
if(args.FileService.FileExists(args.WorkingFile).Is(true) == false)
{
args.Logger?.ELog("File not found: " + args.WorkingFile);
return -1;
}
args.Variables["ORIGINAL_CREATE_UTC"] = fileInfo.CreationTimeUtc;
args.Variables["ORIGINAL_LAST_WRITE_UTC"] = fileInfo.LastWriteTimeUtc;
args.Variables["ORIGINAL_CREATE_UTC"] = args.FileService.FileCreationTimeUtc(args.WorkingFile).ValueOrDefault;
args.Variables["ORIGINAL_LAST_WRITE_UTC"] = args.FileService.FileLastWriteTimeUtc(args.WorkingFile).ValueOrDefault;
return 1;
}
catch (Exception ex)

View File

@@ -14,8 +14,7 @@ namespace FileFlows.BasicNodes.File
{
try
{
var info = new DirectoryInfo(args.WorkingFile);
if (info.Exists == false)
if (args.FileService.DirectoryExists(args.WorkingFile).Is(true) == false)
{
args.Logger?.ELog("Directory not found: " + args.WorkingFile);
return -1;

View File

@@ -1,60 +0,0 @@
// namespace FileFlows.BasicNodes.File;
//
// using System.ComponentModel;
// using FileFlows.Plugin;
// using FileFlows.Plugin.Attributes;
//
// /// <summary>
// /// Node that checks if a file is older than
// /// </summary>
// public class OlderThan : Node
// {
// public override int Inputs => 1;
// public override int Outputs => 2;
// public override FlowElementType Type => FlowElementType.Logic;
// public override string Icon => "fas fa-clock";
// public override string HelpUrl => "https://fileflows.com/docs/plugins/basic-nodes/older-than";
//
// [Period(1)]
// public int Minutes { get; set; }
//
// [NumberInt(2)]
// [Select(nameof(DateOptions), 1)]
// public int Date { get; set; }
//
// private static List<ListOption> _DateOptions;
// /// <summary>
// /// Gets or sets the date options
// /// </summary>
// public static List<ListOption> DateOptions
// {
// get
// {
// if (_DateOptions == null)
// {
// _DateOptions = new List<ListOption>
// {
// new () { Label = "Date Created", Value = 0 },
// new () { Label = "Date Modified", Value = 1 }
// };
// }
// return _DateOptions;
// }
// }
//
// public override int Execute(NodeParameters args)
// {
// var fi = new FileInfo(args.WorkingFile);
//
// if (fi.Exists == false)
// {
// args.Logger.ELog("File Does not exist: " + args.WorkingFile);
// return -1;
// }
//
// var date = Date == 1 ? fi.LastWriteTime : fi.CreationTime;
//
// var minutes = DateTime.Now.Subtract(date).TotalMinutes;
// return minutes > this.Minutes ? 1 : 2;
// }
// }

View File

@@ -1,4 +1,6 @@
namespace FileFlows.BasicNodes.Functions;
using FileFlows.Plugin.Helpers;
namespace FileFlows.BasicNodes.Functions;
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
@@ -32,7 +34,8 @@ public class PatternReplacer : Node
try
{
string filename = new FileInfo(UseWorkingFileName ? args.WorkingFile : args.FileName).Name;
//string filename = new FileInfo(UseWorkingFileName ? args.WorkingFile : args.FileName).Name;
string filename = FileHelper.GetShortFileName(UseWorkingFileName ? args.WorkingFile : args.FileName);
string updated = RunReplacements(args, filename);
if (updated == filename)
@@ -43,20 +46,19 @@ public class PatternReplacer : Node
args.Logger?.ILog($"Pattern replacement: '{filename}' to '{updated}'");
string dest = Path.Combine(new FileInfo(args.WorkingFile)?.DirectoryName ?? string.Empty, updated);
string directory = FileHelper.GetDirectory(args.WorkingFile);
string dest = directory + args.FileService.PathSeparator + updated;
args.Logger?.ILog($"New filename: " + dest);
if (UnitTest == false)
{
if (args.MoveFile(dest) == false)
var result = args.FileService.FileMove(args.WorkingFile, dest, true);
if(result.IsFailed)
{
args.Logger?.ELog("Failed to move file");
args.Logger?.ELog("Failed to move file: " + result.Error);
return -1;
}
}
else
{
args.SetWorkingFile(dest);
}
args.SetWorkingFile(dest);
return 1;
}
catch (Exception ex)

View File

@@ -1,11 +1,12 @@
namespace FileFlows.BasicNodes.File;
using FileFlows.Plugin.Helpers;
using System.ComponentModel.DataAnnotations;
using System.Text;
using System.Text.RegularExpressions;
using FileFlows.Plugin;
using FileFlows.Plugin.Attributes;
namespace FileFlows.BasicNodes.File;
public class Renamer : Node
{
public override int Inputs => 1;
@@ -50,7 +51,7 @@ public class Renamer : Node
}
string newFile = Pattern;
// incase they set a linux path on windows or vice versa
// in case they set a linux path on windows or vice versa
newFile = newFile.Replace('\\', Path.DirectorySeparatorChar);
newFile = newFile.Replace('/', Path.DirectorySeparatorChar);
@@ -67,36 +68,37 @@ public class Renamer : Node
string destFolder = args.ReplaceVariables(DestinationPath ?? string.Empty, stripMissing: true, cleanSpecialCharacters: true);
if (string.IsNullOrEmpty(destFolder))
destFolder = new FileInfo(args.WorkingFile).Directory?.FullName ?? "";
destFolder = FileHelper.GetDirectory(args.WorkingFile);
var dest = args.GetSafeName(Path.Combine(destFolder, newFile));
if (destFolder.EndsWith("/") | destFolder.EndsWith(@"\"))
destFolder = destFolder[..^1];
if (string.IsNullOrEmpty(dest.Extension) == false)
var dest = args.GetSafeName(destFolder + args.FileService.PathSeparator + newFile);
string destExtension = FileHelper.GetExtension(dest);
if (string.IsNullOrEmpty(destExtension) == false)
{
// just ensures extensions are lowercased
dest = new FileInfo(dest.FullName.Substring(0, dest.FullName.LastIndexOf(dest.Extension)) + dest.Extension.ToLower());
dest = dest[..dest.LastIndexOf(destExtension, StringComparison.Ordinal)] +
destExtension.ToLower();
}
args.Logger?.ILog("Renaming file to: " + dest.FullName);
args.Logger?.ILog("Renaming file to: " + dest);
if (string.IsNullOrEmpty(CsvFile) == false)
{
try
{
System.IO.File.AppendAllText(CsvFile, EscapeForCsv(args.FileName) + "," + EscapeForCsv(dest.FullName) + Environment.NewLine);
}
catch (Exception ex)
{
args.Logger?.ELog("Failed to append to CSV file: " + ex.Message);
}
var result = args.FileService.FileAppendAllText(CsvFile, EscapeForCsv(args.FileName) + "," + EscapeForCsv(dest) + Environment.NewLine);
if(result.IsFailed)
args.Logger?.ELog("Failed to append to CSV file: " + result.Error);
}
if (LogOnly)
return 1;
return args.MoveFile(dest.FullName) ? 1 : -1;
return args.MoveFile(dest) ? 1 : -1;
}
private string EscapeForCsv(string input)

View File

@@ -1,5 +1,6 @@
using FileFlows.Plugin;
using FileFlows.Plugin.Attributes;
using FileFlows.Plugin.Helpers;
namespace FileFlows.BasicNodes.File;
@@ -48,9 +49,9 @@ public class ReplaceOriginal : Node
{
args.Logger?.ILog("Working file is same as original, nothing to do.");
return 1;
}
var wf = new FileInfo(args.WorkingFile);
if (args.FileName.ToLower().EndsWith(wf.Extension.ToLower()))
};
var wfExtension = FileHelper.GetExtension(args.WorkingFile);
if (args.FileName.ToLower().EndsWith(wfExtension.ToLower()))
{
// easy replace
bool moved = args.MoveFile(args.FileName);
@@ -64,39 +65,37 @@ public class ReplaceOriginal : Node
args.Variables.TryGetValue("ORIGINAL_LAST_WRITE_UTC", out object oLastWriteUtc) &&
oCreateTimeUtc is DateTime dtCreateTimeUtc && oLastWriteUtc is DateTime dtLastWriteUtc)
{
Helpers.FileHelper.SetCreationTime(args.FileName, dtCreateTimeUtc);
Helpers.FileHelper.SetLastWriteTime(args.FileName, dtLastWriteUtc);
args.FileService.SetCreationTimeUtc(args.FileName, dtCreateTimeUtc);
args.FileService.SetLastWriteTimeUtc(args.FileName, dtLastWriteUtc);
}
}
else
{
// different extension, we will move the file, but then delete the original
string dest = Path.ChangeExtension(args.FileName, wf.Extension);
string dest = Path.ChangeExtension(args.FileName, wfExtension);
if(args.MoveFile(dest) == false)
{
args.Logger?.ELog("Failed to move file to: " + dest);
return -1;
}
if (dest.ToLower() != args.FileName.ToLower())
if (string.Equals(dest, args.FileName, StringComparison.CurrentCultureIgnoreCase) == false)
{
try
var result = args.FileService.FileDelete(args.FileName);
if (result.IsFailed)
{
System.IO.File.Delete(args.FileName);
}
catch (Exception ex)
{
args.Logger?.ELog("Failed to delete orginal (with different extension): " + ex.Message);
args.Logger?.ELog("Failed to delete original (with different extension): " + result.Error);
return -1;
}
}
if(PreserverOriginalDates && args.Variables.TryGetValue("ORIGINAL_CREATE_UTC", out object oCreateTimeUtc) &&
args.Variables.TryGetValue("ORIGINAL_LAST_WRITE_UTC", out object oLastWriteUtc) &&
oCreateTimeUtc is DateTime dtCreateTimeUtc && oLastWriteUtc is DateTime dtLastWriteUtc)
{
Helpers.FileHelper.SetCreationTime(dest, dtCreateTimeUtc);
Helpers.FileHelper.SetLastWriteTime(dest, dtLastWriteUtc);
args.FileService.SetCreationTimeUtc(args.FileName, dtCreateTimeUtc);
args.FileService.SetLastWriteTimeUtc(args.FileName, dtLastWriteUtc);
}
}

View File

@@ -11,7 +11,6 @@ public class Touch : Node
public override string Icon => "fas fa-hand-point-right";
public override string HelpUrl => "https://fileflows.com/docs/plugins/basic-nodes/touch";
[TextVariable(1)]
public string FileName { get; set; }
@@ -20,48 +19,14 @@ public class Touch : Node
string filename = args.ReplaceVariables(this.FileName ?? string.Empty, stripMissing: true);
if (string.IsNullOrEmpty(filename))
filename = args.WorkingFile;
if (IsDirectory(filename))
var result = args.FileService.Touch(filename);
if (result.IsFailed)
{
args.Logger?.ILog("Touching directory: " + filename);
try
{
var dir = new DirectoryInfo(filename);
Directory.SetLastWriteTimeUtc(filename, DateTime.UtcNow);
return 1;
}
catch (Exception ex)
{
args.Logger?.ELog("Failed to touch directory: " + ex.Message);
return -1;
}
args.Logger?.ELog("Failed to touch: " + result.Error);
return -1;
}
else
{
args.Logger?.ILog("Touching file: " + filename);
try
{
if (System.IO.File.Exists(filename))
System.IO.File.SetLastWriteTimeUtc(filename, DateTime.UtcNow);
else
System.IO.File.Create(filename);
return 1;
}
catch (Exception ex)
{
args.Logger?.ELog($"Failed to touch file: '{filename}' => {ex.Message}");
return -1;
}
}
}
private bool IsDirectory(string filename)
{
try
{
return new DirectoryInfo(filename).Exists;
}
catch (Exception) { return false; }
return 1;
}
}

View File

@@ -1,6 +1,7 @@
using System.ComponentModel;
using FileFlows.Plugin;
using FileFlows.Plugin.Attributes;
using FileFlows.Plugin.Helpers;
namespace FileFlows.BasicNodes.File;
@@ -129,15 +130,31 @@ public class SevenZip : Node
try
{
string itemToCompress = args.WorkingFile;
if (System.IO.Directory.Exists(args.WorkingFile))
if (Directory.Exists(args.WorkingFile))
{
if (args.IsRemote)
{
args.Logger?.ELog("Cannot 7-zip a remote folder");
return -1;
}
isDir = true;
itemToCompress = Path.Combine(args.WorkingFile, "*");
}
else if (System.IO.File.Exists(args.WorkingFile) == false)
else
{
args.Logger?.ELog("File or folder does not exist: " + args.WorkingFile);
return -1;
if (args.FileService.FileExists(args.WorkingFile))
{
args.Logger?.ELog("File does not exist: " + args.WorkingFile);
return 1;
}
var result = args.FileService.GetLocalPath(args.WorkingFile);
if (result.IsFailed)
{
args.Logger?.ELog("Failed to ensure file is local: " + result.Error);
return -1;
}
itemToCompress = result;
}
string sevenZip = args.GetToolPath("7zip")?.EmptyAsNull() ?? "7z";
@@ -149,7 +166,8 @@ public class SevenZip : Node
if (isDir)
destDir = new DirectoryInfo(args.LibraryPath).FullName;
else
destDir = new FileInfo(args.FileName)?.DirectoryName ?? String.Empty;
destDir = FileHelper.GetDirectory(args.FileName);
if (string.IsNullOrEmpty(destDir))
{
args.Logger?.ELog("Failed to get destination directory");
@@ -164,9 +182,15 @@ public class SevenZip : Node
destDir = args.ReplaceVariables(destDir, stripMissing: true);
destDir = destDir.TrimEnd(Path.PathSeparator);
// this converts it to the actual OS path
destDir = new DirectoryInfo(destDir).FullName;
args.CreateDirectoryIfNotExists(destDir);
var result = args.FileService.DirectoryCreate(destDir);
if (result.IsFailed)
{
args.Logger?.ELog("Failed creating directory: " + result.Error);
return -1;
}
}
args.Logger?.ILog("Destination Folder: " + destDir);
@@ -176,32 +200,31 @@ public class SevenZip : Node
if (isDir)
destFile = new DirectoryInfo(args.FileName).Name + ".7z";
else
destFile = new FileInfo(args.FileName).Name + ".7z";
destFile = FileHelper.GetShortFileName(args.FileName) + ".7z";
}
if (destFile.ToLower().EndsWith(".7z") == false)
destFile += ".7z";
destFile = Path.Combine(destDir, destFile);
destFile = destDir + args.FileService.PathSeparator + destFile;
args.Logger?.ILog($"Compressing '{args.WorkingFile}' to '{destFile}'");
int compression = CompressionLevel < 1 ? 5 : CompressionLevel;
if (System.IO.File.Exists(destFile))
if (args.FileService.FileExists(destFile).Is(true))
{
args.Logger?.ILog("Destination file already exists, deleting: " + destFile);
try
var result = args.FileService.FileDelete(destFile);
if (result.IsFailed)
{
System.IO.File.Delete(destFile);
}
catch (Exception ex)
{
args.Logger?.ILog("Failed to delete existing file: " + ex.Message);
args.Logger?.ILog("Failed to delete existing file: " + result.Error);
return -1;
}
}
string compressionMethod = CompressionMethod?.EmptyAsNull() ?? "lzma2";
string targetFile = args.IsRemote ? Path.Combine(args.TempPath, Guid.NewGuid() + ".7zip") : destFile;
args.Execute(new()
{
Command = sevenZip,
@@ -209,19 +232,30 @@ public class SevenZip : Node
{
"a", "-t7z", $"-m0={compressionMethod}",
$"-mx{compression}",
destFile, itemToCompress
targetFile, itemToCompress
}
});
if (System.IO.File.Exists(destFile))
if (System.IO.File.Exists(targetFile) == false)
{
args.SetWorkingFile(destFile);
args.Logger?.ILog("7z created at: " + destFile);
return 1;
args.Logger?.ELog("Failed to create 7z: " + destFile);
return -1;
}
args.Logger?.ELog("Failed to create 7z: " + destFile);
return -1;
if (targetFile != destFile)
{
// need to move the file
var result = args.FileService.FileMove(targetFile, destFile, true);
if (result.IsFailed)
{
args.Logger?.ELog("Failed to move 7z file: " + result.Error);
return -1;
}
}
args.SetWorkingFile(destFile);
args.Logger?.ILog("7z created at: " + destFile);
return 1;
}
catch (Exception ex)
{

Binary file not shown.

Binary file not shown.

View File

@@ -301,7 +301,7 @@ public class FfmpegBuilderExecutor: FfmpegBuilderNode
private static readonly bool IsMac = RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
private string[][] Decoders_h264(NodeParameters args)
{
bool noNvidia =