Empty file ISO Add date back for just .kanbn Removed HardcodedFileSearchAndSort Sync with 01-23 JsonToTsv System.Text.Json White-List Ready to move to Move Helper Remove Whitelist Force Start At Check for .git directory before ls Optional Allow root for unc path nuget bump PreVerify EnforceCodeStyleInBuild dotnet_analyzer_diagnostic HelperGit searchDelegate Host File AlertIfNewDeviceIsConnected AOT SetFrontMatterAndH1 Match Error Unknown with better logging Undo 04-05 WriteAppendToHostConfFile MonA IsKanbanIndex Dotnet Format Pre-commit NPM CreateWindowsShortcut Working directory Split description Copy tests Ready to test Delete after a couple of days GitConfigCleanUp knb Files
246 lines
11 KiB
C#
246 lines
11 KiB
C#
using File_Folder_Helper.Models;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
using WindowsShortcutFactory;
|
|
|
|
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 =
|
|
[
|
|
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.W,
|
|
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);
|
|
|
|
private void CreateWindowsShortcut()
|
|
{
|
|
object? assemblyName = AppContext.GetData("AssemblyName");
|
|
string sendToDirectory = Environment.GetFolderPath(Environment.SpecialFolder.SendTo);
|
|
string localApplicationData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
|
|
if (Directory.Exists(sendToDirectory) && Directory.Exists(localApplicationData) && assemblyName is string assemblyNameValue)
|
|
{
|
|
string shortcut = Path.Combine(sendToDirectory, $"{assemblyNameValue}.lnk");
|
|
string directory = Path.Combine(localApplicationData, _AppSettings.WorkingDirectoryName, assemblyNameValue);
|
|
if (!Directory.Exists(directory))
|
|
_ = Directory.CreateDirectory(directory);
|
|
if (!File.Exists(sendToDirectory))
|
|
{
|
|
WindowsShortcut windowsShortcut = new()
|
|
{
|
|
Arguments = "s X C:/ProgramData Day-Helper-2024-01-07 1",
|
|
Path = Path.Combine(directory, $"{assemblyNameValue}.exe"),
|
|
WorkingDirectory = AppContext.BaseDirectory
|
|
};
|
|
windowsShortcut.Save(shortcut);
|
|
windowsShortcut.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
|
|
{
|
|
if (!cancellationToken.IsCancellationRequested)
|
|
await Task.Delay(500, cancellationToken);
|
|
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.LogWarning("Must pass a argument!");
|
|
CreateWindowsShortcut();
|
|
}
|
|
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,");
|
|
// H
|
|
_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("M) Markdown Wiki Link Verification,");
|
|
_Logger.LogInformation("N) Create Note Files,");
|
|
_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~~,");
|
|
// U
|
|
// V
|
|
// W
|
|
_Logger.LogInformation("X) Day Helpers,");
|
|
_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.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]);
|
|
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]);
|
|
Helpers.HelperMarkdown.MarkdownWikiLinkVerification(_AppSettings, _Logger, _Args, cancellationToken);
|
|
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.ExtractKeyFileAndSetDateFromZipEntry(_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.X:
|
|
Helpers.HelperDay.Select(_AppSettings, _Logger, _Args, cancellationToken);
|
|
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();
|
|
}
|
|
|
|
} |