file-folder-helper/Worker.cs
Mike Phares 229b508ae1 Dependency Injection Style
AOT Compiling
Switched to Secret from Development json file
Added Kanbn
Humanizer
HelperCreateNoteFiles.CleanExistingFiles
HelperPackageFilesByDate
Added SRP
Helper Hardcoded File Search and Sort
Set Date from Zip Entry
2023-07-08 10:05:52 -07:00

180 lines
7.7 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.H,
ConsoleKey.J,
ConsoleKey.K,
ConsoleKey.L,
ConsoleKey.M,
ConsoleKey.N,
ConsoleKey.R,
ConsoleKey.S,
ConsoleKey.T,
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.Any())
_Logger.LogInformation("Must pass a argument!");
else if (_Args[0].EndsWith(".kanbn") && Directory.Exists(_Args[0]))
Helpers.HelperKanbanMetadata.SetMetadata(_Logger, _AppSettings, _Args[0]);
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) Clipboard (Top Directory Only and File Name Without Extension),");
_Logger.LogInformation("F) Clipboard (All Directories and File Name Without Extension),");
_Logger.LogInformation("H) Hardcoded file search and sort,");
_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("R) Rename to old, copy, delete old");
_Logger.LogInformation("S) Set Date from Zip Entry");
_Logger.LogInformation("T) Too long rename");
_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.E:
case ConsoleKey.F:
Helpers.HelperSaveOrCopyContents.SaveOrCopyContents(_Logger, _Args[0], consoleKey);
break;
case ConsoleKey.H:
Helpers.HelperHardcodedFileSearchAndSort.HardcodedFileSearchAndSort(_Logger, _Args[0]);
break;
case ConsoleKey.J:
Helpers.HelperPackageFilesByDate.SetDateFromJsonEntry(_Logger, _Args[0]);
break;
case ConsoleKey.K:
Helpers.HelperKanbanMetadata.SetMetadata(_Logger, _AppSettings, _Args[0]);
break;
case ConsoleKey.L:
Helpers.HelperLogMerge.LogMerge(_Args[0]);
break;
case ConsoleKey.N:
Helpers.HelperCreateNoteFiles.CreateNoteFiles(_Args[0]);
break;
case ConsoleKey.M:
Helpers.HelperMarkdown.MarkdownWikiLinkVerification(_AppSettings, _Args[0]);
break;
case ConsoleKey.R:
Helpers.HelperRenameToOldMoveDeleteOldMerge.RenameToOldMoveDeleteOld(_Logger, _Args[0]);
break;
case ConsoleKey.S:
Helpers.HelperZipFilesByDate.SetDateFromZipEntry(_Logger, _Args[0]);
break;
case ConsoleKey.T:
Helpers.HelperTooLong.TooLong(_Args[0], delete: false);
Helpers.HelperTooLong.TooLong(_Args[0], delete: true);
break;
case ConsoleKey.Z:
Helpers.HelperZipFilesByDate.ZipFilesByDate(_Logger, _Args[0]);
break;
default:
switch (consoleKey)
{
case ConsoleKey.Delete:
for (int j = 1; j < 6; j++)
{
if (!Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(_Args[0]))
break;
}
break;
default:
throw new Exception();
}
break;
}
}
else
throw new Exception(_Args[0]);
}
catch (Exception ex)
{ _Logger.LogError(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); }
if (_IsSilent)
_Logger.LogInformation("Done. Bye");
else
{
_Logger.LogInformation("Done. Press 'Enter' to end");
_ = Console.ReadLine();
}
_Lifetime.StopApplication();
}
}