225 lines
10 KiB
C#
225 lines
10 KiB
C#
using File_Folder_Helper.Models;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace File_Folder_Helper;
|
|
|
|
public class Worker : BackgroundService
|
|
{
|
|
|
|
private readonly bool _IsSilent;
|
|
private readonly List<string> _Args;
|
|
private readonly ILogger<Worker> _Logger;
|
|
private readonly AppSettings _AppSettings;
|
|
private readonly ConsoleKey[] _ConsoleKeys;
|
|
private readonly IHostApplicationLifetime _Lifetime;
|
|
|
|
public Worker(ILogger<Worker> logger, IHostApplicationLifetime lifetime, List<string> args, AppSettings appSettings)
|
|
{
|
|
_Args = args;
|
|
_Logger = logger;
|
|
_Lifetime = lifetime;
|
|
_AppSettings = appSettings;
|
|
int silentIndex = args.IndexOf("s");
|
|
_IsSilent = silentIndex > -1;
|
|
if (_IsSilent)
|
|
args.RemoveAt(silentIndex);
|
|
_ConsoleKeys = new ConsoleKey[]
|
|
{
|
|
ConsoleKey.A,
|
|
ConsoleKey.B,
|
|
ConsoleKey.C,
|
|
ConsoleKey.D,
|
|
ConsoleKey.E,
|
|
ConsoleKey.F,
|
|
ConsoleKey.G,
|
|
ConsoleKey.H,
|
|
ConsoleKey.I,
|
|
ConsoleKey.J,
|
|
ConsoleKey.K,
|
|
ConsoleKey.L,
|
|
ConsoleKey.M,
|
|
ConsoleKey.N,
|
|
ConsoleKey.O,
|
|
ConsoleKey.P,
|
|
ConsoleKey.R,
|
|
ConsoleKey.S,
|
|
ConsoleKey.T,
|
|
ConsoleKey.U,
|
|
ConsoleKey.V,
|
|
ConsoleKey.X,
|
|
ConsoleKey.Y,
|
|
ConsoleKey.Z,
|
|
ConsoleKey.Delete
|
|
};
|
|
}
|
|
|
|
public override Task StartAsync(CancellationToken cancellationToken) =>
|
|
base.StartAsync(cancellationToken);
|
|
|
|
public override Task StopAsync(CancellationToken cancellationToken) =>
|
|
base.StopAsync(cancellationToken);
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
if (!stoppingToken.IsCancellationRequested)
|
|
await Task.Delay(500, stoppingToken);
|
|
if (_AppSettings is null)
|
|
throw new NullReferenceException(nameof(_AppSettings));
|
|
try
|
|
{
|
|
int? singleCharIndex = null;
|
|
ConsoleKey consoleKey = ConsoleKey.End;
|
|
for (int i = 0; i < _Args.Count; i++)
|
|
{
|
|
if (_Args[i].Length == 1 && Enum.TryParse(_Args[i], out consoleKey) && _ConsoleKeys.Contains(consoleKey))
|
|
{
|
|
singleCharIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
if (consoleKey is not ConsoleKey.End && !_ConsoleKeys.Contains(consoleKey))
|
|
consoleKey = ConsoleKey.End;
|
|
if (singleCharIndex is not null)
|
|
_Args.RemoveAt(singleCharIndex.Value);
|
|
if (_Args.Count == 0)
|
|
_Logger.LogInformation("Must pass a argument!");
|
|
else if (Directory.Exists(_Args[0]) && File.Exists(Path.Combine(_Args[0], string.Concat(Path.GetFileName(_Args[0]), ".dll"))))
|
|
Helpers.HelperILMerge.ILMerge(_Args[0]);
|
|
else if (Directory.Exists(_Args[0]))
|
|
{
|
|
for (int i = 0; i < int.MaxValue; i++)
|
|
{
|
|
if (_ConsoleKeys.Contains(consoleKey))
|
|
break;
|
|
_Logger.LogInformation("A) Save (Top Directory Only),");
|
|
_Logger.LogInformation("B) Save (All Directories),");
|
|
_Logger.LogInformation("C) Clipboard (Top Directory Only),");
|
|
_Logger.LogInformation("D) Clipboard (All Directories),");
|
|
_Logger.LogInformation("E) Everything delete recursive,");
|
|
_Logger.LogInformation("F) Find and delete all *.log.* files then empty directories,");
|
|
_Logger.LogInformation("G) Genealogical Data Communication,");
|
|
_Logger.LogInformation("H) Hardcoded file search and sort,");
|
|
_Logger.LogInformation("I) Ignore case and rename files to lowercase,");
|
|
_Logger.LogInformation("J) Set Date from Json Entry,");
|
|
_Logger.LogInformation("K) Kanban support,");
|
|
_Logger.LogInformation("L) Log Merge (APC Log [0-9(8)]_*.log),");
|
|
_Logger.LogInformation("N) Create Note Files,");
|
|
_Logger.LogInformation("M) Markdown Wiki Link Verification,");
|
|
_Logger.LogInformation("O) Oracle tnsNames.ora,");
|
|
_Logger.LogInformation("P) PDF parse,");
|
|
// Q
|
|
_Logger.LogInformation("R) Rename to old, copy, delete old,");
|
|
_Logger.LogInformation("S) Set Date from Zip Entry,");
|
|
_Logger.LogInformation("T) *Ticks ~~Too long rename~~,");
|
|
_Logger.LogInformation("U) Links for Hugo,");
|
|
_Logger.LogInformation("V) VSCode Hope Sort,");
|
|
// W
|
|
_Logger.LogInformation("X) Download,");
|
|
_Logger.LogInformation("Y) Zip file(s) by directory with file,");
|
|
_Logger.LogInformation("Z) Zip file(s) by date,");
|
|
_Logger.LogInformation("Delete) Delete empty directories,");
|
|
consoleKey = Console.ReadKey().Key;
|
|
_Logger.LogInformation(" ");
|
|
}
|
|
switch (consoleKey)
|
|
{
|
|
case ConsoleKey.A:
|
|
case ConsoleKey.B:
|
|
case ConsoleKey.C:
|
|
case ConsoleKey.D:
|
|
Helpers.HelperSaveOrCopyContents.SaveOrCopyContents(_Logger, _Args[0], consoleKey);
|
|
break;
|
|
case ConsoleKey.E:
|
|
Helpers.HelperDeleteEmptyDirectories.EverythingDeleteRecursive(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.F:
|
|
Helpers.HelperDeleteEmptyDirectories.DeleteOldLogFilesAndDeleteEmptyDirectories(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.G:
|
|
Helpers.HelperGenealogicalDataCommunication.FileSystemToGenealogicalDataCommunication(_AppSettings, _Logger, _Args);
|
|
break;
|
|
case ConsoleKey.H:
|
|
Helpers.HelperHardcodedFileSearchAndSort.HardcodedFileSearchAndSort(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.I:
|
|
Helpers.HelperSaveOrCopyContents.IgnoreCaseAndRenameFilesToLowercase(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.J:
|
|
Helpers.HelperPackageFilesByDate.SetDateFromJsonEntry(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.K:
|
|
Helpers.HelperKanbanMetadata.SetMetadata(_Logger, _AppSettings, _Args[0], addTicks: true);
|
|
break;
|
|
case ConsoleKey.L:
|
|
Helpers.HelperLogMerge.LogMerge(_Args[0]);
|
|
break;
|
|
case ConsoleKey.N:
|
|
Helpers.HelperCreateNoteFiles.CreateNoteFiles(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.M:
|
|
if (_Args[0].EndsWith(".kanbn") && Directory.Exists(_Args[0]))
|
|
Helpers.HelperKanbanMetadata.SetMetadata(_Logger, _AppSettings, _Args[0], addTicks: false);
|
|
Helpers.HelperMarkdown.MarkdownWikiLinkVerification(_AppSettings, _Logger, _Args);
|
|
break;
|
|
case ConsoleKey.O:
|
|
Helpers.HelperFindReplace.UpdateTnsNames(_Logger, _Args);
|
|
break;
|
|
case ConsoleKey.P:
|
|
Helpers.HelperPdfStripperWrapper.ParseSave(_Logger, _Args);
|
|
Helpers.HelperPdfStripperWrapper.ParseStrip(_Logger, _Args);
|
|
break;
|
|
case ConsoleKey.R:
|
|
Helpers.HelperRenameToOldMoveDeleteOldMerge.RenameToOldMoveDeleteOld(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.S:
|
|
_ = Helpers.HelperZipFilesBy.SetDateFromZipEntry(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.T:
|
|
Helpers.HelperTooLong.UpdateDateVerifyAndGetTicksDirectories(_Logger, _AppSettings, _Args[0]);
|
|
// Helpers.HelperTooLong.TooLong(_Args[0], delete: false);
|
|
// Helpers.HelperTooLong.TooLong(_Args[0], delete: true);
|
|
break;
|
|
case ConsoleKey.U:
|
|
Helpers.HelperMarkdown.MarkdownConvertLinksForHugo(_AppSettings, _Logger, _Args);
|
|
break;
|
|
case ConsoleKey.V:
|
|
Helpers.HelperVSCodePossibleExtension.Sort(_Logger, _Args);
|
|
break;
|
|
case ConsoleKey.X:
|
|
Helpers.HelperDownload.SaveJson(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.Y:
|
|
Helpers.HelperZipFilesBy.ZipFilesByDirectoryWithFile(_Logger, _Args[0]);
|
|
break;
|
|
case ConsoleKey.Z:
|
|
_ = Helpers.HelperZipFilesBy.ZipFilesByDate(_Logger, _Args[0]);
|
|
break;
|
|
default:
|
|
switch (consoleKey)
|
|
{
|
|
case ConsoleKey.Delete:
|
|
Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(_Logger, _Args[0]);
|
|
break;
|
|
default:
|
|
throw new Exception();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
throw new Exception(_Args[0]);
|
|
}
|
|
catch (Exception ex)
|
|
{ _Logger.LogError("{Message}{NewLine}{StackTrace}", ex.Message, Environment.NewLine, ex.StackTrace); }
|
|
if (_IsSilent)
|
|
_Logger.LogInformation("Done. Bye");
|
|
else
|
|
{
|
|
_Logger.LogInformation("Done. Press 'Enter' to end");
|
|
_ = Console.ReadLine();
|
|
}
|
|
_Lifetime.StopApplication();
|
|
}
|
|
|
|
} |