Serilog
This commit is contained in:
		| @ -33,7 +33,6 @@ | ||||
|         <SupportedPlatform Include="browser" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|     </ItemGroup> | ||||
|  | ||||
| @ -12,7 +12,6 @@ namespace View_by_Distance.Compare; | ||||
| public class Compare | ||||
| { | ||||
|  | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly IsEnvironment _IsEnvironment; | ||||
|     private readonly Models.Configuration _Configuration; | ||||
| @ -38,7 +37,6 @@ public class Compare | ||||
|         _RenameCFindReplace = new(); | ||||
|         _SpellingFindReplace = new(); | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _Log = Serilog.Log.ForContext<Compare>(); | ||||
|         _FileKeyValuePairs = new List<KeyValuePair<string, string>>(); | ||||
|         _FilePropertiesKeyValuePairs = new Dictionary<string, List<Tuple<string, Shared.Models.Property>>>(); | ||||
|         string searchPattern = "*"; | ||||
| @ -107,7 +105,7 @@ public class Compare | ||||
|         (_, groupCollection) = Property.Models.Stateless.Container.GetGroupCollection(propertyConfiguration.RootDirectory, searchPattern, topDirectories); | ||||
|         if (appSettings.MaxDegreeOfParallelism < 2) | ||||
|             ticks = LogDelta(ticks, nameof(Property.Models.Stateless.Container.GetGroupCollection)); | ||||
|         _Log.Information($"{nameof(Property.Models.Stateless.Container.GetGroupCollection)} has finished"); | ||||
|         _Logger?.LogInformation($"{nameof(Property.Models.Stateless.Container.GetGroupCollection)} has finished"); | ||||
|         _Configuration = configuration; | ||||
|         List<string> missingVerifyToSeasonCollection = GetMissingVerifyToSeasonCollection(topDirectories, groupCollection); | ||||
|         if (missingVerifyToSeasonCollection.Any()) | ||||
| @ -120,7 +118,7 @@ public class Compare | ||||
|             if (appSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(Property.Models.Stateless.Container.GetGroupCollection)); | ||||
|         } | ||||
|         _Log.Information($"{nameof(PossiblyRename)} has finished"); | ||||
|         _Logger?.LogInformation($"{nameof(PossiblyRename)} has finished"); | ||||
|         if (PossiblyRenameB(topDirectories, groupCollection)) | ||||
|         { | ||||
|             topDirectories.Clear(); | ||||
| @ -129,7 +127,7 @@ public class Compare | ||||
|             if (appSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(Property.Models.Stateless.Container.GetGroupCollection)); | ||||
|         } | ||||
|         _Log.Information($"{nameof(PossiblyRenameB)} has finished"); | ||||
|         _Logger?.LogInformation($"{nameof(PossiblyRenameB)} has finished"); | ||||
|         if (PossiblyRenameC(topDirectories, groupCollection)) | ||||
|         { | ||||
|             topDirectories.Clear(); | ||||
| @ -138,7 +136,7 @@ public class Compare | ||||
|             if (appSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(Property.Models.Stateless.Container.GetGroupCollection)); | ||||
|         } | ||||
|         _Log.Information($"{nameof(PossiblyRenameC)} has finished"); | ||||
|         _Logger?.LogInformation($"{nameof(PossiblyRenameC)} has finished"); | ||||
|         if (PossiblyCorrect(topDirectories, groupCollection)) | ||||
|         { | ||||
|             topDirectories.Clear(); | ||||
| @ -147,11 +145,11 @@ public class Compare | ||||
|             if (appSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(Property.Models.Stateless.Container.GetGroupCollection)); | ||||
|         } | ||||
|         _Log.Information($"{nameof(PossiblyCorrect)} has finished"); | ||||
|         _Logger?.LogInformation($"{nameof(PossiblyCorrect)} has finished"); | ||||
|         string[] dbFiles = Directory.GetFiles(propertyConfiguration.RootDirectory, "*.db", SearchOption.AllDirectories); | ||||
|         foreach (string dbFile in dbFiles) | ||||
|             File.Delete(dbFile); | ||||
|         _Log.Information("deleting *.db files has finished"); | ||||
|         _Logger?.LogInformation("deleting *.db files has finished"); | ||||
|         if (dbFiles.Any()) | ||||
|         { | ||||
|             topDirectories.Clear(); | ||||
| @ -175,14 +173,14 @@ public class Compare | ||||
|         } | ||||
|         if (!isSilent) | ||||
|         { | ||||
|             _Log.Information("First pass completed"); | ||||
|             _Logger?.LogInformation("First pass completed"); | ||||
|             for (int y = 0; y < int.MaxValue; y++) | ||||
|             { | ||||
|                 _Log.Information("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 _Logger?.LogInformation("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 if (Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                     break; | ||||
|             } | ||||
|             _Log.Information(". . ."); | ||||
|             _Logger?.LogInformation(". . ."); | ||||
|         } | ||||
|         if (!isSilent) | ||||
|         { | ||||
| @ -192,51 +190,51 @@ public class Compare | ||||
|                 ConsoleKey? consoleKey = null; | ||||
|                 for (int y = 0; y < int.MaxValue; y++) | ||||
|                 { | ||||
|                     _Log.Information($"Execute {nameof(ChangeExtensionFromDeleteToJson)} \"Y(es)\" or \"N(o)\"?"); | ||||
|                     _Logger?.LogInformation($"Execute {nameof(ChangeExtensionFromDeleteToJson)} \"Y(es)\" or \"N(o)\"?"); | ||||
|                     consoleKey = Console.ReadKey().Key; | ||||
|                     if (consoleKey is ConsoleKey.Y or ConsoleKey.N) | ||||
|                         break; | ||||
|                 } | ||||
|                 _Log.Information(". . ."); | ||||
|                 _Logger?.LogInformation(". . ."); | ||||
|                 if (consoleKey == ConsoleKey.Y) | ||||
|                     ChangeExtensionFromDeleteToJson(aPropertySingletonDirectory); | ||||
|             } | ||||
|         } | ||||
|         if (!isSilent) | ||||
|         { | ||||
|             _Log.Information("Second pass completed"); | ||||
|             _Logger?.LogInformation("Second pass completed"); | ||||
|             for (int y = 0; y < int.MaxValue; y++) | ||||
|             { | ||||
|                 _Log.Information("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 _Logger?.LogInformation("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 if (Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                     break; | ||||
|             } | ||||
|             _Log.Information(". . ."); | ||||
|             _Logger?.LogInformation(". . ."); | ||||
|         } | ||||
|         string aPropertyContentCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(propertyConfiguration, nameof(A_Property), "[()]"); | ||||
|         ThirdPassToMove(propertyConfiguration, mapLogic, propertyLogic, containers, aPropertyContentCollectionDirectory); | ||||
|         if (!isSilent) | ||||
|         { | ||||
|             _Log.Information("Third pass completed"); | ||||
|             _Logger?.LogInformation("Third pass completed"); | ||||
|             for (int y = 0; y < int.MaxValue; y++) | ||||
|             { | ||||
|                 _Log.Information("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 _Logger?.LogInformation("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 if (Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                     break; | ||||
|             } | ||||
|             _Log.Information(". . ."); | ||||
|             _Logger?.LogInformation(". . ."); | ||||
|         } | ||||
|         FourthPassCreateWindowsShortcuts(propertyConfiguration, mapLogic, propertyLogic, containers, saveToCollection: false, keepAll: false); | ||||
|         if (!isSilent) | ||||
|         { | ||||
|             _Log.Information("Fourth pass completed"); | ||||
|             _Logger?.LogInformation("Fourth pass completed"); | ||||
|             for (int y = 0; y < int.MaxValue; y++) | ||||
|             { | ||||
|                 _Log.Information("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 _Logger?.LogInformation("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|                 if (Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                     break; | ||||
|             } | ||||
|             _Log.Information(". . ."); | ||||
|             _Logger?.LogInformation(". . ."); | ||||
|         } | ||||
|         SaveDiffFilesOrSaveLogAndMoveFiles(propertyConfiguration); | ||||
|         string currentYearDirectory = Path.Combine(propertyConfiguration.RootDirectory, $". {DateTime.Now:yyyy}"); | ||||
| @ -387,8 +385,6 @@ public class Compare | ||||
|     private long LogDelta(long ticks, string? methodName) | ||||
|     { | ||||
|         long result; | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         double delta = new TimeSpan(DateTime.Now.Ticks - ticks).TotalMilliseconds; | ||||
|         _Log.Debug($"{methodName} took {Math.Floor(delta)} millisecond(s)"); | ||||
|         result = DateTime.Now.Ticks; | ||||
| @ -438,21 +434,19 @@ public class Compare | ||||
|  | ||||
|     private void SaveDiffFilesOrSaveLogAndMoveFiles(Property.Models.Configuration configuration) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         if (_Configuration?.PropertyConfiguration is null) | ||||
|             throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration)); | ||||
|         string aPropertySingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(A_Property), "{}"); | ||||
|         _Log.Information(aPropertySingletonDirectory); | ||||
|         _Log.Information("to"); | ||||
|         _Log.Information(_Configuration.DiffPropertyDirectory); | ||||
|         _Logger?.LogInformation(aPropertySingletonDirectory); | ||||
|         _Logger?.LogInformation("to"); | ||||
|         _Logger?.LogInformation(_Configuration.DiffPropertyDirectory); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             _Log.Information("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|             _Logger?.LogInformation("Press \"Y\" key to continue or close console if compare not needed"); | ||||
|             if (Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                 break; | ||||
|         } | ||||
|         _Log.Information(". . ."); | ||||
|         _Logger?.LogInformation(". . ."); | ||||
|         int loadLessThan = 7; | ||||
|         string diffRootDirectory; | ||||
|         ConsoleKey? consoleKey = null; | ||||
| @ -486,27 +480,27 @@ public class Compare | ||||
|         } | ||||
|         for (int x = 0; x < int.MaxValue; x++) | ||||
|         { | ||||
|             _Log.Information($"Press \"D\" key to {nameof(PropertyCompare.Models.PropertyCompareLogic.SaveDiffFiles)}"); | ||||
|             _Log.Information($"Press \"M\" key to {nameof(PropertyCompare.Models.PropertyCompareLogic.SaveLogAndMoveFiles)}"); | ||||
|             _Log.Information("Press \"End\" key when ready to skip"); | ||||
|             _Logger?.LogInformation($"Press \"D\" key to {nameof(PropertyCompare.Models.PropertyCompareLogic.SaveDiffFiles)}"); | ||||
|             _Logger?.LogInformation($"Press \"M\" key to {nameof(PropertyCompare.Models.PropertyCompareLogic.SaveLogAndMoveFiles)}"); | ||||
|             _Logger?.LogInformation("Press \"End\" key when ready to skip"); | ||||
|             consoleKey = Console.ReadKey().Key; | ||||
|             if (consoleKey is ConsoleKey.D or ConsoleKey.M or ConsoleKey.End) | ||||
|                 break; | ||||
|         } | ||||
|         _Log.Information(". . ."); | ||||
|         _Logger?.LogInformation(". . ."); | ||||
|         if (consoleKey.HasValue && consoleKey.Value == ConsoleKey.D) | ||||
|             propertyCompareLogic.SaveDiffFiles(aPropertyCollectionDirectory, loadLessThan, propertyCompareCollection, diffPropertyCompareCollection); | ||||
|         else if (consoleKey.HasValue && consoleKey.Value == ConsoleKey.M) | ||||
|         { | ||||
|             for (int x = 0; x < int.MaxValue; x++) | ||||
|             { | ||||
|                 _Log.Information($"Press \"0 - {loadLessThan}\" key when ready to continue"); | ||||
|                 _Log.Information("Press \"End\" key when ready to skip"); | ||||
|                 _Logger?.LogInformation($"Press \"0 - {loadLessThan}\" key when ready to continue"); | ||||
|                 _Logger?.LogInformation("Press \"End\" key when ready to skip"); | ||||
|                 consoleKey = Console.ReadKey().Key; | ||||
|                 if (consoleKey.Value is ConsoleKey.D0 or ConsoleKey.D1 or ConsoleKey.D2 or ConsoleKey.D3 or ConsoleKey.D4 or ConsoleKey.D5 or ConsoleKey.D6 or ConsoleKey.End) | ||||
|                     break; | ||||
|             } | ||||
|             _Log.Information(". . ."); | ||||
|             _Logger?.LogInformation(". . ."); | ||||
|             int i = int.Parse(consoleKey.Value.ToString()[1..]); | ||||
|             propertyCompareLogic.SaveLogAndMoveFiles(aPropertyCollectionDirectory, loadLessThan, propertyCompareCollection, diffPropertyCompareCollection, i); | ||||
|         } | ||||
| @ -717,8 +711,6 @@ public class Compare | ||||
|  | ||||
|     private void CreateWindowsShortcuts((long Ticks, string FilteredSourceDirectoryFile, string PropertyDirectory, int PropertyId)[] collection, bool keepAll) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         int z = 0; | ||||
|         string fileName; | ||||
|         WindowsShortcut windowsShortcut; | ||||
| @ -755,8 +747,6 @@ public class Compare | ||||
|  | ||||
|     private void ThirdPassToMove(Property.Models.Configuration configuration, Map.Models.MapLogic mapLogic, A_Property propertyLogic, Shared.Models.Container[] containers, string aPropertyContentCollectionDirectory) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         if (_Configuration?.PropertyConfiguration is null) | ||||
|             throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration)); | ||||
|         int stay = 0; | ||||
| @ -809,16 +799,16 @@ public class Compare | ||||
|             if (!Directory.Exists(distinctDirectory)) | ||||
|                 _ = Directory.CreateDirectory(distinctDirectory); | ||||
|         } | ||||
|         _Log.Information($"{stay} file(s) are staying and {fileMoveCollection.Count} file(s) will be moved"); | ||||
|         _Logger?.LogInformation($"{stay} file(s) are staying and {fileMoveCollection.Count} file(s) will be moved"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             _Log.Information($"Press \"M\" key to {nameof(File.Move)}"); | ||||
|             _Log.Information("Press \"End\" key when ready to skip or close console if compare not needed"); | ||||
|             _Logger?.LogInformation($"Press \"M\" key to {nameof(File.Move)}"); | ||||
|             _Logger?.LogInformation("Press \"End\" key when ready to skip or close console if compare not needed"); | ||||
|             consoleKey = Console.ReadKey().Key; | ||||
|             if (consoleKey is ConsoleKey.M or ConsoleKey.End) | ||||
|                 break; | ||||
|         } | ||||
|         _Log.Information(". . ."); | ||||
|         _Logger?.LogInformation(". . ."); | ||||
|         if (consoleKey.HasValue && consoleKey.Value == ConsoleKey.M) | ||||
|         { | ||||
|             foreach (string fileMove in fileMoveCollection) | ||||
| @ -833,8 +823,6 @@ public class Compare | ||||
|  | ||||
|     private void FourthPassCreateWindowsShortcuts(Property.Models.Configuration configuration, Map.Models.MapLogic mapLogic, A_Property propertyLogic, Shared.Models.Container[] containers, bool saveToCollection, bool keepAll) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         int stay = 0; | ||||
|         ConsoleKey? consoleKey = null; | ||||
|         long ticks = DateTime.Now.Ticks; | ||||
| @ -863,16 +851,16 @@ public class Compare | ||||
|             } | ||||
|         } | ||||
|         collection = propertyLogic.GetPropertyIds(directoryInfoCollection, saveToCollection); | ||||
|         _Log.Information($"{stay} file(s) are staying and {fileMoveCollection.Count} file(s) will be moved"); | ||||
|         _Logger?.LogInformation($"{stay} file(s) are staying and {fileMoveCollection.Count} file(s) will be moved"); | ||||
|         for (int x = 0; x < int.MaxValue; x++) | ||||
|         { | ||||
|             _Log.Information($"Press \"S\" key to {nameof(CreateWindowsShortcuts)}"); | ||||
|             _Log.Information("Press \"End\" key when ready to skip or close console if compare not needed"); | ||||
|             _Logger?.LogInformation($"Press \"S\" key to {nameof(CreateWindowsShortcuts)}"); | ||||
|             _Logger?.LogInformation("Press \"End\" key when ready to skip or close console if compare not needed"); | ||||
|             consoleKey = Console.ReadKey().Key; | ||||
|             if (consoleKey is ConsoleKey.M or ConsoleKey.End) | ||||
|                 break; | ||||
|         } | ||||
|         _Log.Information(". . ."); | ||||
|         _Logger?.LogInformation(". . ."); | ||||
|         if (consoleKey.HasValue && consoleKey.Value == ConsoleKey.S) | ||||
|             CreateWindowsShortcuts(collection, keepAll); | ||||
|     } | ||||
|  | ||||
| @ -37,10 +37,6 @@ | ||||
|         <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Compare.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,5 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Compare.Models; | ||||
| @ -11,9 +10,8 @@ namespace View_by_Distance.Compare; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -29,9 +27,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -40,31 +35,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             Compare _ = new(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             Compare _ = new(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -39,10 +39,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\Property\Property.csproj" /> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using View_by_Distance.Copy.Distinct.Models; | ||||
| using View_by_Distance.Shared.Models; | ||||
| @ -19,7 +19,7 @@ public class CopyDistinct | ||||
|     private readonly IReadOnlyDictionary<string, string[]> _FileGroups; | ||||
|     private readonly Property.Models.Configuration _PropertyConfiguration; | ||||
|  | ||||
|     public CopyDistinct(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public CopyDistinct(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -29,15 +29,14 @@ public class CopyDistinct | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
|         _ConfigurationRoot = configurationRoot; | ||||
|         ILogger? log = Log.ForContext<CopyDistinct>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _Configuration = configuration; | ||||
|         log.Information(propertyConfiguration.RootDirectory); | ||||
|         logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         (bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack) = Verify(); | ||||
|         _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, new string[] { appSettings.ResultDirectoryKey }); | ||||
|         List<string> lines = CopyDistinctFilesInDirectories(log, move, filesCollection, anyLenFiles, moveBack); | ||||
|         List<string> lines = CopyDistinctFilesInDirectories(logger, move, filesCollection, anyLenFiles, moveBack); | ||||
|         if (lines.Any()) | ||||
|             File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); | ||||
|         _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); | ||||
| @ -154,7 +153,7 @@ public class CopyDistinct | ||||
|         return (distinctDirectories.ToArray(), results); | ||||
|     } | ||||
|  | ||||
|     private List<string> CopyDistinctFilesInDirectories(ILogger log, bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack) | ||||
|     private List<string> CopyDistinctFilesInDirectories(ILogger<Program>? logger, bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack) | ||||
|     { | ||||
|         List<string> results = new(); | ||||
|         ProgressBar progressBar; | ||||
| @ -184,30 +183,30 @@ public class CopyDistinct | ||||
|                 _ = Directory.CreateDirectory(distinctDirectory); | ||||
|         } | ||||
|         if (move) | ||||
|             log.Information($"Ready to Move {toDoCollection.Count} file(s)?"); | ||||
|             logger?.LogInformation($"Ready to Move {toDoCollection.Count} file(s)?"); | ||||
|         else if (!moveBack) | ||||
|             log.Information($"Ready to Copy {toDoCollection.Count} file(s)?"); | ||||
|             logger?.LogInformation($"Ready to Copy {toDoCollection.Count} file(s)?"); | ||||
|         else | ||||
|             log.Information($"Ready to Move back {toDoCollection.Count} file(s)?"); | ||||
|             logger?.LogInformation($"Ready to Move back {toDoCollection.Count} file(s)?"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             if (move) | ||||
|                 log.Information("Press \"Y\" key to move file(s), \"N\" key to log file(s) or close console to not move files"); | ||||
|                 logger?.LogInformation("Press \"Y\" key to move file(s), \"N\" key to log file(s) or close console to not move files"); | ||||
|             else if (!moveBack) | ||||
|                 log.Information("Press \"Y\" key to copy file(s), \"N\" key to log file(s) or close console to not copy files"); | ||||
|                 logger?.LogInformation("Press \"Y\" key to copy file(s), \"N\" key to log file(s) or close console to not copy files"); | ||||
|             else | ||||
|                 log.Information("Press \"Y\" key to move back file(s), \"N\" key to log file(s) or close console to not move back files"); | ||||
|                 logger?.LogInformation("Press \"Y\" key to move back file(s), \"N\" key to log file(s) or close console to not move back files"); | ||||
|             consoleKey = System.Console.ReadKey().Key; | ||||
|             if (consoleKey is ConsoleKey.Y or ConsoleKey.N) | ||||
|                 break; | ||||
|         } | ||||
|         log.Information(". . ."); | ||||
|         logger?.LogInformation(". . ."); | ||||
|         if (consoleKey is null || consoleKey.Value != ConsoleKey.Y) | ||||
|         { | ||||
|             if (move || moveBack) | ||||
|                 log.Information("Nothing moved!"); | ||||
|                 logger?.LogInformation("Nothing moved!"); | ||||
|             else | ||||
|                 log.Information("Nothing copied!"); | ||||
|                 logger?.LogInformation("Nothing copied!"); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
| @ -215,9 +214,9 @@ public class CopyDistinct | ||||
|             results.AddRange(Shared.Models.Stateless.Methods.IDirectory.CopyOrMove(toDoCollection, move, moveBack, () => progressBar.Tick())); | ||||
|             progressBar.Dispose(); | ||||
|             if (move || moveBack) | ||||
|                 log.Information("Done moving"); | ||||
|                 logger?.LogInformation("Done moving"); | ||||
|             else | ||||
|                 log.Information("Done copying"); | ||||
|                 logger?.LogInformation("Done copying"); | ||||
|         } | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Copy.Distinct.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Copy.Distinct.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Copy.Distinct; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new CopyDistinct(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new CopyDistinct(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -39,10 +39,6 @@ | ||||
|         <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" /> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using System.Globalization; | ||||
| using System.Text; | ||||
| @ -13,15 +14,15 @@ namespace View_by_Distance.Date.Group; | ||||
| public class DateGroup | ||||
| { | ||||
|  | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly List<string> _Exceptions; | ||||
|     private readonly ILogger<Program>? _Logger; | ||||
|     private readonly IsEnvironment _IsEnvironment; | ||||
|     private readonly Models.Configuration _Configuration; | ||||
|     private readonly List<KeyValuePair<string, string>> _FileKeyValuePairs; | ||||
|     private readonly Dictionary<string, List<Tuple<string, Shared.Models.Property>>> _FilePropertiesKeyValuePairs; | ||||
|  | ||||
|     public DateGroup(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public DateGroup(List<string> args, ILogger<Program>? logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -29,15 +30,15 @@ public class DateGroup | ||||
|         { } | ||||
|         if (console is null) | ||||
|         { } | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _Exceptions = new List<string>(); | ||||
|         _Log = Serilog.Log.ForContext<DateGroup>(); | ||||
|         _FileKeyValuePairs = new List<KeyValuePair<string, string>>(); | ||||
|         _FilePropertiesKeyValuePairs = new Dictionary<string, List<Tuple<string, Shared.Models.Property>>>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _Log.Information(propertyConfiguration.RootDirectory); | ||||
|         _Logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Property.Models.Configuration.Verify(propertyConfiguration, requireExist: true); | ||||
|         Verify(configuration); | ||||
|         bool reverse = false; | ||||
| @ -49,12 +50,8 @@ public class DateGroup | ||||
|         string[] dbFiles = Directory.GetFiles(propertyConfiguration.RootDirectory, "*.db", SearchOption.AllDirectories); | ||||
|         foreach (string dbFile in dbFiles) | ||||
|             File.Delete(dbFile); | ||||
|         if (true || appSettings.MaxDegreeOfParallelism < 2) | ||||
|             ticks = LogDelta(ticks, nameof(File.Delete)); | ||||
|         for (int i = 1; i < 10; i++) | ||||
|             _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); | ||||
|         if (true || appSettings.MaxDegreeOfParallelism < 2) | ||||
|             ticks = LogDelta(ticks, nameof(Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories)); | ||||
|         string destinationRoot = Property.Models.Stateless.IResult.GetResultsGroupDirectory(propertyConfiguration, "Z) Moved"); | ||||
|         string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A_Property)); | ||||
|         string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); | ||||
| @ -67,8 +64,6 @@ public class DateGroup | ||||
|         if (propertyConfiguration.PopulatePropertyId && (configuration.ByCreateDateShortcut || configuration.ByHash) && Shared.Models.Stateless.Methods.IProperty.Any(containers)) | ||||
|         { | ||||
|             propertyLogic.SavePropertyParallelWork(ticks, metadata, t, containers); | ||||
|             if (appSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(A_Property.SavePropertyParallelWork)); | ||||
|             if (propertyLogic.ExceptionsDirectories.Any()) | ||||
|                 throw new Exception(); | ||||
|         } | ||||
| @ -133,17 +128,6 @@ public class DateGroup | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private long LogDelta(long ticks, string? methodName) | ||||
|     { | ||||
|         long result; | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         double delta = new TimeSpan(DateTime.Now.Ticks - ticks).TotalMilliseconds; | ||||
|         _Log.Debug($"{methodName} took {Math.Floor(delta)} millisecond(s)"); | ||||
|         result = DateTime.Now.Ticks; | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> GetMoveFileCollection(string destinationDirectory, string topDirectory, Item[] filteredItems) | ||||
|     { | ||||
|         List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> results = new(); | ||||
| @ -376,8 +360,6 @@ public class DateGroup | ||||
|  | ||||
|     private void MoveFiles(Property.Models.Configuration configuration, string destinationRoot, Container[] containers) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         string checkDirectory; | ||||
|         bool hasDuplicate; | ||||
|         string fullFileName; | ||||
| @ -410,14 +392,14 @@ public class DateGroup | ||||
|                     _ = Directory.CreateDirectory(checkDirectory); | ||||
|             } | ||||
|         } | ||||
|         _Log.Information($"Ready to move {fileMoveCollectionAll.Length} file(s)?"); | ||||
|         _Logger?.LogInformation($"Ready to move {fileMoveCollectionAll.Length} file(s)?"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             _Log.Information("Press \"Y\" key to move file(s) or close console to not move files"); | ||||
|             _Logger?.LogInformation("Press \"Y\" key to move file(s) or close console to not move files"); | ||||
|             if (System.Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                 break; | ||||
|         } | ||||
|         _Log.Information(". . ."); | ||||
|         _Logger?.LogInformation(". . ."); | ||||
|         int moved = 0; | ||||
|         foreach ((Item item, long lastWriteTimeTicks, long minimumDateTimeTicks, string[] destination) in fileMoveCollectionAll) | ||||
|         { | ||||
| @ -454,14 +436,14 @@ public class DateGroup | ||||
|             } | ||||
|         } | ||||
|         _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(destinationRoot); | ||||
|         _Log.Information($"{moved} file(s) moved"); | ||||
|         _Logger?.LogInformation($"{moved} file(s) moved"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             _Log.Information("Press \"Y\" key to move file(s) back or close console to leave them moved"); | ||||
|             _Logger?.LogInformation("Press \"Y\" key to move file(s) back or close console to leave them moved"); | ||||
|             if (System.Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                 break; | ||||
|         } | ||||
|         _Log.Information(". . ."); | ||||
|         _Logger?.LogInformation(". . ."); | ||||
|         foreach ((Item item, long lastWriteTimeTicks, long minimumDateTimeTicks, string[] destination) in fileMoveCollectionAll) | ||||
|         { | ||||
|             fullFileName = Path.Combine(destination); | ||||
| @ -472,7 +454,7 @@ public class DateGroup | ||||
|             File.Move(fullFileName, item.ImageFileHolder.FullName); | ||||
|             moved += 1; | ||||
|         } | ||||
|         _Log.Information($"Done moving back {moved} file(s)"); | ||||
|         _Logger?.LogInformation($"Done moving back {moved} file(s)"); | ||||
|         for (int i = 1; i < 10; i++) | ||||
|             _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(configuration.RootDirectory); | ||||
|     } | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Date.Group.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Date.Group.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Date.Group; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -79,31 +77,28 @@ public class Program | ||||
|                 throw new Exception("Chelsea"); | ||||
| #nullable restore | ||||
|             Shared.Models.Console console = new(); | ||||
|             DateGroup _ = new(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             DateGroup _ = new(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -38,10 +38,6 @@ | ||||
|         <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using View_by_Distance.Delete.By.Distinct.Models; | ||||
| using View_by_Distance.Property.Models; | ||||
| @ -11,28 +11,27 @@ namespace View_by_Distance.Delete.By.Distinct; | ||||
| public class DeleteByDistinct | ||||
| { | ||||
|  | ||||
|     public DeleteByDistinct(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public DeleteByDistinct(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
|         if (console is null) | ||||
|         { } | ||||
|         long ticks = DateTime.Now.Ticks; | ||||
|         ILogger? log = Log.ForContext<DeleteByDistinct>(); | ||||
|         Dictionary<string, List<string>> keyValuePairs = new(); | ||||
|         Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; | ||||
|         log.Information(configuration.RootDirectory); | ||||
|         logger?.LogInformation(configuration.RootDirectory); | ||||
|         if (!appSettings.TicksForLong && !appSettings.SizeForLong) | ||||
|             throw new Exception("Check appSettings file!"); | ||||
|         bool compareIsPopulatedAndNotTheSame = !string.IsNullOrEmpty(appSettings.CompareRootDirectory) && appSettings.CompareRootDirectory != configuration.RootDirectory; | ||||
|         Work(appSettings, ticks, log, configuration.RootDirectory, nameof(configuration.RootDirectory), options, keyValuePairs, logOnly: compareIsPopulatedAndNotTheSame); | ||||
|         Work(appSettings, ticks, logger, configuration.RootDirectory, nameof(configuration.RootDirectory), options, keyValuePairs, logOnly: compareIsPopulatedAndNotTheSame); | ||||
|         if (compareIsPopulatedAndNotTheSame) | ||||
|             Work(appSettings, ticks, log, appSettings.CompareRootDirectory, nameof(appSettings.CompareRootDirectory), options, keyValuePairs, logOnly: false); | ||||
|             Work(appSettings, ticks, logger, appSettings.CompareRootDirectory, nameof(appSettings.CompareRootDirectory), options, keyValuePairs, logOnly: false); | ||||
|         _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(appSettings.CompareRootDirectory); | ||||
|     } | ||||
|  | ||||
|     private static void Work(AppSettings appSettings, long ticks, ILogger log, string directory, string variable, ProgressBarOptions options, Dictionary<string, List<string>> keyValuePairs, bool logOnly) | ||||
|     private static void Work(AppSettings appSettings, long ticks, ILogger<Program>? logger, string directory, string variable, ProgressBarOptions options, Dictionary<string, List<string>> keyValuePairs, bool logOnly) | ||||
|     { | ||||
|         string check; | ||||
|         string logFile; | ||||
| @ -48,7 +47,7 @@ public class DeleteByDistinct | ||||
|         List<string> deletedDirectories = new(); | ||||
|         Dictionary<long, List<string>> longToCollectionB = new(); | ||||
|         List<(string Source, string Destination)> renameFiles = new(); | ||||
|         log.Information($"Gathering {appSettings.SearchPattern} files from <{directory}>"); | ||||
|         logger?.LogInformation($"Gathering {appSettings.SearchPattern} files from <{directory}>"); | ||||
|         (string directory, string[] files)[] leftCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(directory, appSettings.SearchPattern).ToArray(); | ||||
|         totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); | ||||
|         message = $") Looking for duplicates from <{directory}> - {totalSeconds} total second(s)"; | ||||
| @ -105,21 +104,21 @@ public class DeleteByDistinct | ||||
|             } | ||||
|         } | ||||
|         progressBar.Dispose(); | ||||
|         log.Information(". . ."); | ||||
|         logger?.LogInformation(". . ."); | ||||
|         logFile = $"{ticks}-{variable}-Files-A.lsv"; | ||||
|         if (!logOnly) | ||||
|             File.WriteAllLines(Path.Combine(directory, logFile), deletedFiles); | ||||
|         if (deletedFiles.Any() && !logOnly) | ||||
|         { | ||||
|             log.Information($"Ready to delete {deletedFiles.Count} from {variable} {appSettings.SearchPattern} file(s)? See <{logFile}>"); | ||||
|             logger?.LogInformation($"Ready to delete {deletedFiles.Count} from {variable} {appSettings.SearchPattern} file(s)? See <{logFile}>"); | ||||
|             for (int y = 0; y < int.MaxValue; y++) | ||||
|             { | ||||
|                 log.Information("Press \"Y\" key to delete file(s), \"N\" key to log file(s) or close console to not delete files"); | ||||
|                 logger?.LogInformation("Press \"Y\" key to delete file(s), \"N\" key to log file(s) or close console to not delete files"); | ||||
|                 consoleKey = Console.ReadKey().Key; | ||||
|                 if (consoleKey is ConsoleKey.Y or ConsoleKey.N) | ||||
|                     break; | ||||
|             } | ||||
|             log.Information(". . ."); | ||||
|             logger?.LogInformation(". . ."); | ||||
|             if (consoleKey is not null && consoleKey.Value == ConsoleKey.Y) | ||||
|             { | ||||
|                 foreach (string file in deletedFiles) | ||||
| @ -150,7 +149,7 @@ public class DeleteByDistinct | ||||
|                     deletedDirectories.AddRange(collection); | ||||
|                 } | ||||
|                 progressBar.Dispose(); | ||||
|                 log.Information(". . ."); | ||||
|                 logger?.LogInformation(". . ."); | ||||
|                 logFile = $"{ticks + 1}-{variable}-Directories.lsv"; | ||||
|                 File.WriteAllLines(Path.Combine(directory, logFile), deletedDirectories.Distinct()); | ||||
|             } | ||||
| @ -161,15 +160,15 @@ public class DeleteByDistinct | ||||
|             File.WriteAllLines(Path.Combine(directory, logFile), renameFiles.Select(l => l.Source)); | ||||
|             logFile = $"{ticks}-{variable}-Files-C.lsv"; | ||||
|             File.WriteAllLines(Path.Combine(directory, logFile), renameFiles.Select(l => l.Destination)); | ||||
|             log.Information($"Ready to rename to match {renameFiles.Count} from {variable} {appSettings.SearchPattern} file(s)? See <{logFile}>"); | ||||
|             logger?.LogInformation($"Ready to rename to match {renameFiles.Count} from {variable} {appSettings.SearchPattern} file(s)? See <{logFile}>"); | ||||
|             for (int y = 0; y < int.MaxValue; y++) | ||||
|             { | ||||
|                 log.Information("Press \"Y\" key to rename to match file(s), \"N\" key to log file(s) or close console to not rename to match files"); | ||||
|                 logger?.LogInformation("Press \"Y\" key to rename to match file(s), \"N\" key to log file(s) or close console to not rename to match files"); | ||||
|                 consoleKey = Console.ReadKey().Key; | ||||
|                 if (consoleKey is ConsoleKey.Y or ConsoleKey.N) | ||||
|                     break; | ||||
|             } | ||||
|             log.Information(". . ."); | ||||
|             logger?.LogInformation(". . ."); | ||||
|             if (consoleKey is not null && consoleKey.Value == ConsoleKey.Y) | ||||
|             { | ||||
|                 foreach ((string source, string destination) in renameFiles) | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Delete.By.Distinct.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Delete.By.Distinct.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Delete.By.Distinct; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new DeleteByDistinct(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new DeleteByDistinct(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -38,10 +38,6 @@ | ||||
|         <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using View_by_Distance.Delete.By.Relative.Models; | ||||
| using View_by_Distance.Property.Models; | ||||
| using View_by_Distance.Shared.Models.Methods; | ||||
| @ -10,7 +10,7 @@ namespace View_by_Distance.Delete.By.Relative; | ||||
| public class DeleteByRelative | ||||
| { | ||||
|  | ||||
|     public DeleteByRelative(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public DeleteByRelative(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -20,9 +20,8 @@ public class DeleteByRelative | ||||
|         string checkFileName; | ||||
|         string searchPattern = "*"; | ||||
|         long ticks = DateTime.Now.Ticks; | ||||
|         ILogger? log = Log.ForContext<DeleteByRelative>(); | ||||
|         Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         log.Information(configuration.RootDirectory); | ||||
|          logger?.LogInformation(configuration.RootDirectory); | ||||
|         int length = configuration.RootDirectory.Length; | ||||
|         if (string.IsNullOrEmpty(appSettings.CompareRootDirectory) || Path.GetFullPath(appSettings.CompareRootDirectory) == Path.GetFullPath(configuration.RootDirectory)) | ||||
|             throw new Exception("Check AppSettings file!"); | ||||
| @ -60,14 +59,14 @@ public class DeleteByRelative | ||||
|         File.WriteAllLines(deleteLog, deleteFiles); | ||||
|         if (deleteFiles.Count > 0) | ||||
|         { | ||||
|             log.Information($"Ready to delete {deleteFiles.Count} file(s)? See <{deleteLog}>"); | ||||
|              logger?.LogInformation($"Ready to delete {deleteFiles.Count} file(s)? See <{deleteLog}>"); | ||||
|             for (int y = 0; y < int.MaxValue; y++) | ||||
|             { | ||||
|                 log.Information("Press \"Y\" key to delete file(s) or close console to not delete files"); | ||||
|                  logger?.LogInformation("Press \"Y\" key to delete file(s) or close console to not delete files"); | ||||
|                 if (Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                     break; | ||||
|             } | ||||
|             log.Information(". . ."); | ||||
|              logger?.LogInformation(". . ."); | ||||
|             foreach (string deleteFile in deleteFiles) | ||||
|             { | ||||
|                 File.Delete(deleteFile); | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Delete.By.Relative.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Delete.By.Relative.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Delete.By.Relative; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new DeleteByRelative(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new DeleteByRelative(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -35,7 +35,6 @@ | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Humanizer.Core" Version="2.14.1" /> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|     </ItemGroup> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Distance.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,7 +1,6 @@ | ||||
| using ShellProgressBar; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Text.Json; | ||||
| using View_by_Distance.Distance.Models.Stateless; | ||||
| using View_by_Distance.FaceRecognitionDotNet; | ||||
| using View_by_Distance.Property.Models.Stateless; | ||||
| using View_by_Distance.Shared.Models; | ||||
| @ -17,7 +16,6 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory> | ||||
|     private readonly List<string> _Moved; | ||||
|     private readonly List<double?> _Debug; | ||||
|     private readonly List<string> _Renamed; | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly int _FaceConfidencePercent; | ||||
|     private readonly bool _DistanceRenameToMatch; | ||||
|     private readonly bool _DistanceMoveUnableToMatch; | ||||
| @ -35,7 +33,6 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory> | ||||
|         _AllMappedFaceFiles = new(); | ||||
|         _AllMappedFaceFileNames = new(); | ||||
|         _DuplicateMappedFaceFiles = new(); | ||||
|         _Log = Serilog.Log.ForContext<E_Distance>(); | ||||
|         _DistanceRenameToMatch = distanceRenameToMatch; | ||||
|         _FaceConfidencePercent = faceConfidencePercent; | ||||
|         _DistanceMoveUnableToMatch = distanceMoveUnableToMatch; | ||||
| @ -298,16 +295,13 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory> | ||||
|  | ||||
|     public void Clear() | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         double?[] debug = (from l in _Debug where l is null or not 0 select l).ToArray(); | ||||
|         if (debug.Length > 0) | ||||
|         { | ||||
|             string debugMessage = $"{_Debug.Count - debug.Length} - {debug.Min()} - {_Debug.Max()}"; | ||||
|             _Log.Info(debugMessage); | ||||
|         } | ||||
|         if (_DuplicateMappedFaceFiles.Count > 0) | ||||
|             _Log.Info($"Renamed {_DuplicateMappedFaceFiles.Count} to *.dup file(s)"); | ||||
|         // double?[] debug = (from l in _Debug where l is null or not 0 select l).ToArray(); | ||||
|         // if (debug.Length > 0) | ||||
|         // { | ||||
|         //     string debugMessage = $"{_Debug.Count - debug.Length} - {debug.Min()} - {_Debug.Max()}"; | ||||
|         // } | ||||
|         // if (_DuplicateMappedFaceFiles.Count > 0) | ||||
|         //     _Log.Info($"Renamed {_DuplicateMappedFaceFiles.Count} to *.dup file(s)"); | ||||
|         if (_Moved.Count > 0 || _Renamed.Count > 0) | ||||
|             throw new NotImplementedException("Restart!"); | ||||
|         _Debug.Clear(); | ||||
|  | ||||
| @ -30,10 +30,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\Shared\View-by-Distance.Shared.csproj" /> | ||||
|  | ||||
| @ -1,6 +1,5 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Globalization; | ||||
| using System.Reflection; | ||||
| @ -14,7 +13,6 @@ namespace View_by_Distance.Drag_Drop_Explorer; | ||||
| public partial class DragDropExplorer : Form | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly Calendar _Calendar; | ||||
|     private readonly TextBox _PathTextBox; | ||||
|     private readonly TextBox _JsonTextBox; | ||||
| @ -27,13 +25,11 @@ public partial class DragDropExplorer : Form | ||||
|     public DragDropExplorer() | ||||
|     { | ||||
|         InitializeComponent(); | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         IsEnvironment isEnvironment; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         _Calendar = new CultureInfo("en-US").Calendar; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -48,11 +44,6 @@ public partial class DragDropExplorer : Form | ||||
|             throw new Exception("Working path name must have parentDirectory value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<DragDropExplorer>(); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
| @ -130,7 +121,6 @@ public partial class DragDropExplorer : Form | ||||
|                 _FirstTextBox.Text = string.Empty; | ||||
|                 _PathTextBox.Text = string.Empty; | ||||
|                 _JsonTextBox.Text = string.Empty; | ||||
|                 _Logger.Information("No data"); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|  | ||||
| @ -30,10 +30,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|     <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|  | ||||
| @ -1,6 +1,5 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using System.Text.Json; | ||||
| @ -13,7 +12,6 @@ namespace View_by_Distance.Drag.Drop.Move; | ||||
| public partial class DragDropMove : Form | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly TextBox _PathTextBox; | ||||
|     private readonly TextBox _JsonTextBox; | ||||
|     private readonly TextBox _FirstTextBox; | ||||
| @ -25,12 +23,10 @@ public partial class DragDropMove : Form | ||||
|     public DragDropMove() | ||||
|     { | ||||
|         InitializeComponent(); | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         IsEnvironment isEnvironment; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -45,11 +41,6 @@ public partial class DragDropMove : Form | ||||
|             throw new Exception("Working path name must have parentDirectory value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<DragDropMove>(); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
| @ -186,7 +177,6 @@ public partial class DragDropMove : Form | ||||
|                 _FirstTextBox.Text = string.Empty; | ||||
|                 _PathTextBox.Text = string.Empty; | ||||
|                 _JsonTextBox.Text = string.Empty; | ||||
|                 _Logger.Information("No data"); | ||||
|             } | ||||
|         } | ||||
|         catch (Exception) | ||||
|  | ||||
| @ -31,10 +31,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\FaceRecognitionDotNet\FaceRecognitionDotNet.csproj" /> | ||||
|  | ||||
| @ -1,6 +1,5 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Drag_Drop.Models; | ||||
| @ -14,7 +13,6 @@ namespace View_by_Distance.Drag_Drop; | ||||
| public partial class DragDropSearch : Form | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly TextBox _TextBox; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly ProgressBar _ProgressBar; | ||||
| @ -29,14 +27,12 @@ public partial class DragDropSearch : Form | ||||
|     public DragDropSearch() | ||||
|     { | ||||
|         InitializeComponent(); | ||||
|         ILogger logger; | ||||
|         _IdToItem = new(); | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         IsEnvironment isEnvironment; | ||||
|         Models.Configuration configuration; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Property.Models.Configuration propertyConfiguration; | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
| @ -51,14 +47,9 @@ public partial class DragDropSearch : Form | ||||
|             throw new Exception("Working path name must have parentDirectory value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<DragDropSearch>(); | ||||
|         propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         (_, _, string resizeFileNameExtension) = C_Resize.GetTuple(configuration.OutputExtension, configuration.OutputQuality); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _Configuration = configuration; | ||||
|         _IsEnvironment = isEnvironment; | ||||
| @ -128,14 +119,6 @@ public partial class DragDropSearch : Form | ||||
|                 continue; | ||||
|             _IdToItem.Add(item.Property.Id.Value, item); | ||||
|         } | ||||
|         if (_Logger is null) | ||||
|             throw new NullReferenceException(nameof(_Logger)); | ||||
|         _Logger.Debug((_AppSettings is null).ToString()); | ||||
|         _Logger.Debug((_Configuration is null).ToString()); | ||||
|         _Logger.Debug((_IsEnvironment is null).ToString()); | ||||
|         _Logger.Debug((_WorkingDirectory is null).ToString()); | ||||
|         _Logger.Debug((_ConfigurationRoot is null).ToString()); | ||||
|         _Logger.Debug((_PropertyConfiguration is null).ToString()); | ||||
|     } | ||||
|  | ||||
|     public static string? GetFaceEncoding(string file) | ||||
| @ -179,8 +162,6 @@ public partial class DragDropSearch : Form | ||||
|             { | ||||
|                 Text = item.ImageFileHolder.Name; | ||||
|                 _TextBox.Text = item.ImageFileHolder.FullName; | ||||
|                 if (item.ImageFileHolder.DirectoryName is not null) | ||||
|                     _Logger.Information(item.ImageFileHolder.DirectoryName); | ||||
|                 if (!string.IsNullOrEmpty(item.ImageFileHolder.DirectoryName)) | ||||
|                     _ = Process.Start("explorer.exe", string.Concat("\"", item.ImageFileHolder.DirectoryName, "\"")); | ||||
|             } | ||||
|  | ||||
| @ -31,10 +31,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\Metadata\Metadata.csproj" /> | ||||
|  | ||||
| @ -1,6 +1,5 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Drawing.Imaging; | ||||
| using System.Reflection; | ||||
| @ -24,7 +23,6 @@ public partial class DragDropSetPropertyItem : Form | ||||
|                           short? PropertyItemType, | ||||
|                           string? Value); | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly TextBox _PathTextBox; | ||||
|     private readonly TextBox _JsonTextBox; | ||||
|     private readonly TextBox _FirstTextBox; | ||||
| @ -37,12 +35,10 @@ public partial class DragDropSetPropertyItem : Form | ||||
|     public DragDropSetPropertyItem() | ||||
|     { | ||||
|         InitializeComponent(); | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         IsEnvironment isEnvironment; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -55,14 +51,9 @@ public partial class DragDropSetPropertyItem : Form | ||||
|             throw new Exception("Working path name must have parentDirectory setTo!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<DragDropSetPropertyItem>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
| @ -107,11 +98,8 @@ public partial class DragDropSetPropertyItem : Form | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void SetMessage(string message) | ||||
|     { | ||||
|         _Logger.Information(message); | ||||
|     private void SetMessage(string message) => | ||||
|         _JsonTextBox.Text = message; | ||||
|     } | ||||
|  | ||||
|     private List<Record> GetRecords(ASCIIEncoding asciiEncoding, int tagId, List<string> files) | ||||
|     { | ||||
|  | ||||
| @ -37,10 +37,6 @@ | ||||
|         <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using System.Text; | ||||
| using System.Text.Json; | ||||
| @ -14,7 +14,7 @@ namespace View_by_Distance.Duplicate.Search; | ||||
| public class DuplicateSearch | ||||
| { | ||||
|  | ||||
|     public DuplicateSearch(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public DuplicateSearch(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -22,9 +22,8 @@ public class DuplicateSearch | ||||
|         { } | ||||
|         string searchPattern = "*"; | ||||
|         long ticks = DateTime.Now.Ticks; | ||||
|         ILogger? log = Log.ForContext<DuplicateSearch>(); | ||||
|         Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         log.Information(configuration.RootDirectory); | ||||
|         logger?.LogInformation(configuration.RootDirectory); | ||||
|         if (appSettings.IndexOnly) | ||||
|             WriteIndexData(ticks, configuration, searchPattern); | ||||
|         else | ||||
| @ -38,9 +37,9 @@ public class DuplicateSearch | ||||
|             Dictionary<int, List<MappingFromItem?>> idToCollection = GetIdToCollection(argZero, configuration, argZeroIsConfigurationRootDirectory, containers, destinationRoot, preloadIds); | ||||
|             int duplicates = (from l in idToCollection where l.Value.Count > 1 select 1).Sum(); | ||||
|             if (duplicates == 0) | ||||
|                 log.Information($"Found {duplicates} duplicate file(s)"); | ||||
|                 logger?.LogInformation($"Found {duplicates} duplicate file(s)"); | ||||
|             else | ||||
|                 QuestionMove(ticks, log, destinationRoot, idToCollection, duplicates); | ||||
|                 QuestionMove(ticks, logger, destinationRoot, idToCollection, duplicates); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -61,7 +60,7 @@ public class DuplicateSearch | ||||
|         File.WriteAllText(Path.Combine(alongSideDirectory, $"{directoryName}-{ticks}.json"), json); | ||||
|     } | ||||
|  | ||||
|     private static void Move(ILogger log, long ticks, string destinationRoot, List<(FileHolder ImageFileHolder, string Destination)> collection) | ||||
|     private static void Move(ILogger<Program>? logger, long ticks, string destinationRoot, List<(FileHolder ImageFileHolder, string Destination)> collection) | ||||
|     { | ||||
|         StringBuilder stringBuilder = new(); | ||||
|         foreach ((FileHolder fileHolder, string destination) in collection) | ||||
| @ -70,28 +69,28 @@ public class DuplicateSearch | ||||
|             _ = stringBuilder.AppendLine(destination); | ||||
|         } | ||||
|         _ = Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(destinationRoot, $"{ticks}file(s).lsv"), stringBuilder.ToString(), updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null); | ||||
|         log.Information($"Ready to move {collection.Count} file(s)?"); | ||||
|         logger?.LogInformation($"Ready to move {collection.Count} file(s)?"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             log.Information("Press \"Y\" key to move file(s) or close console to not move files"); | ||||
|             logger?.LogInformation("Press \"Y\" key to move file(s) or close console to not move files"); | ||||
|             if (System.Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                 break; | ||||
|         } | ||||
|         log.Information(". . ."); | ||||
|         logger?.LogInformation(". . ."); | ||||
|         foreach ((FileHolder fileHolder, string destination) in collection) | ||||
|         { | ||||
|             try | ||||
|             { File.Move(fileHolder.FullName, destination); } | ||||
|             catch (Exception exception) | ||||
|             { log.Error(exception, $"Failed to move <{fileHolder.FullName}>"); } | ||||
|             { logger?.LogError(exception, $"Failed to move <{fileHolder.FullName}>"); } | ||||
|         } | ||||
|         log.Information($"{collection.Count} file(s) moved"); | ||||
|         logger?.LogInformation($"{collection.Count} file(s) moved"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             log.Information("Press \"Y\" key to move file(s) back or close console to leave them moved"); | ||||
|             logger?.LogInformation("Press \"Y\" key to move file(s) back or close console to leave them moved"); | ||||
|             if (System.Console.ReadKey().Key != ConsoleKey.Y) | ||||
|                 continue; | ||||
|             log.Information(". . ."); | ||||
|             logger?.LogInformation(". . ."); | ||||
|             foreach ((FileHolder fileHolder, string destination) in collection) | ||||
|             { | ||||
|                 if (!File.Exists(destination)) | ||||
| @ -101,27 +100,27 @@ public class DuplicateSearch | ||||
|                 try | ||||
|                 { File.Move(destination, fileHolder.FullName); } | ||||
|                 catch (Exception exception) | ||||
|                 { log.Error(exception, $"Failed to move <{destination}>"); } | ||||
|                 { logger?.LogError(exception, $"Failed to move <{destination}>"); } | ||||
|             } | ||||
|         } | ||||
|         log.Information(". . ."); | ||||
|         logger?.LogInformation(". . ."); | ||||
|     } | ||||
|  | ||||
|     private static void QuestionMove(long ticks, ILogger log, string destinationRoot, Dictionary<int, List<MappingFromItem?>> idToCollection, int duplicates) | ||||
|     private static void QuestionMove(long ticks, ILogger<Program>? logger, string destinationRoot, Dictionary<int, List<MappingFromItem?>> idToCollection, int duplicates) | ||||
|     { | ||||
|         int[] ids = (from l in idToCollection orderby l.Key where l.Value.Any(m => m is not null) select l.Key).ToArray(); | ||||
|         _ = Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(destinationRoot, $"{ticks}-id(s).lsv"), string.Join(Environment.NewLine, ids), updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null); | ||||
|         string json = JsonSerializer.Serialize(idToCollection, new JsonSerializerOptions { WriteIndented = true }); | ||||
|         _ = Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(destinationRoot, $"{ticks}.json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null); | ||||
|         log.Information($"Found {duplicates} duplicate file(s)"); | ||||
|         logger?.LogInformation($"Found {duplicates} duplicate file(s)"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             log.Information("Press \"Y\" key to continue or close console to leave them moved"); | ||||
|             logger?.LogInformation("Press \"Y\" key to continue or close console to leave them moved"); | ||||
|             if (System.Console.ReadKey().Key != ConsoleKey.Y) | ||||
|                 continue; | ||||
|             log.Information(". . ."); | ||||
|             logger?.LogInformation(". . ."); | ||||
|             List<(FileHolder ImageFileHolder, string Destination)> collection = GetCollectionAndCreateDirectories(idToCollection); | ||||
|             Move(log, ticks, destinationRoot, collection); | ||||
|             Move(logger, ticks, destinationRoot, collection); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Duplicate.Search.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Duplicate.Search.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Duplicate.Search; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new DuplicateSearch(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new DuplicateSearch(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -33,7 +33,6 @@ | ||||
|         <SupportedPlatform Include="browser" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Face.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,11 +1,9 @@ | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Diagnostics; | ||||
| using System.Drawing; | ||||
| using System.Drawing.Imaging; | ||||
| using System.Reflection; | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
| using View_by_Distance.Face.Models.Stateless; | ||||
| using View_by_Distance.FaceRecognitionDotNet; | ||||
| using View_by_Distance.Metadata.Models; | ||||
| using View_by_Distance.Property.Models; | ||||
| @ -31,7 +29,6 @@ public class D_Face | ||||
|  | ||||
|     private readonly Model _Model; | ||||
|     private readonly string _ArgZero; | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly bool _OverrideForFaceImages; | ||||
|     private readonly bool _LoadPhotoPrismLocations; | ||||
|     private readonly ImageCodecInfo _ImageCodecInfo; | ||||
| @ -75,7 +72,6 @@ public class D_Face | ||||
|         _ImageCodecInfo = imageCodecInfo; | ||||
|         _EncoderParameters = encoderParameters; | ||||
|         _FileNameExtension = filenameExtension; | ||||
|         _Log = Serilog.Log.ForContext<D_Face>(); | ||||
|         _HiddenImageCodecInfo = hiddenImageCodecInfo; | ||||
|         _OverrideForFaceImages = overrideForFaceImages; | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
| @ -219,8 +215,6 @@ public class D_Face | ||||
|  | ||||
|     private List<Shared.Models.Face> GetFaces(string outputResolution, Shared.Models.Property property, MappingFromItem mappingFromItem, Dictionary<string, int[]> outputResolutionToResize, List<Location>? locations) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         if (_PropertyConfiguration.NumberOfJitters is null) | ||||
|             throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters)); | ||||
|         if (_PropertyConfiguration.NumberOfTimesToUpsample is null) | ||||
| @ -230,10 +224,7 @@ public class D_Face | ||||
|         try | ||||
|         { unknownImage = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName); } | ||||
|         catch (Exception) | ||||
|         { | ||||
|             unknownImage = null; | ||||
|             _Log.Info(string.Concat(new StackFrame().GetMethod()?.Name, " <", mappingFromItem.ResizedFileHolder.FullName, ">")); | ||||
|         } | ||||
|         { unknownImage = null; } | ||||
|         if (unknownImage is not null) | ||||
|         { | ||||
|             (int outputResolutionWidth, int outputResolutionHeight, int outputResolutionOrientation) = Resize.Models.Stateless.Methods.IResize.Get(outputResolution, outputResolutionToResize); | ||||
|  | ||||
| @ -33,7 +33,6 @@ | ||||
|         <SupportedPlatform Include="browser" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.FaceParts.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -22,7 +22,6 @@ public class D2_FaceParts | ||||
|     protected readonly string _FileNameExtension; | ||||
|     public string FileNameExtension => _FileNameExtension; | ||||
|  | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly ImageCodecInfo _ImageCodecInfo; | ||||
|     private readonly bool _CheckDFaceAndUpWriteDates; | ||||
|     private readonly bool _OverrideForFaceLandmarkImages; | ||||
| @ -38,7 +37,6 @@ public class D2_FaceParts | ||||
|         _EncoderParameters = encoderParameters; | ||||
|         _FileNameExtension = filenameExtension; | ||||
|         _AngleBracketCollection = new List<string>(); | ||||
|         _Log = Serilog.Log.ForContext<D2_FaceParts>(); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates; | ||||
|         _OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages; | ||||
| @ -131,10 +129,10 @@ public class D2_FaceParts | ||||
|         // it will be after rotation. | ||||
|         PointF[] points = | ||||
|         { | ||||
|                 new PointF(0, 0), | ||||
|                 new PointF(bitmap.Width, 0), | ||||
|                 new PointF(bitmap.Width, bitmap.Height), | ||||
|                 new PointF(0, bitmap.Height), | ||||
|                 new (0, 0), | ||||
|                 new (bitmap.Width, 0), | ||||
|                 new (bitmap.Width, bitmap.Height), | ||||
|                 new (0, bitmap.Height), | ||||
|             }; | ||||
|         rotate_at_origin.TransformPoints(points); | ||||
|         float xMinimum, xMaximum, yMinimum, yMaximum; | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using ShellProgressBar; | ||||
| using System.Collections.ObjectModel; | ||||
| @ -29,11 +30,11 @@ public partial class DlibDotNet | ||||
|     private readonly F_Random _Random; | ||||
|     private readonly IConsole _Console; | ||||
|     private readonly E_Distance _Distance; | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly IBlurHasher _BlurHasher; | ||||
|     private readonly D2_FaceParts _FaceParts; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly List<string> _Exceptions; | ||||
|     private readonly ILogger<Program>? _Logger; | ||||
|     private readonly IsEnvironment _IsEnvironment; | ||||
|     private readonly bool _PropertyRootExistedBefore; | ||||
|     private readonly Models.Configuration _Configuration; | ||||
| @ -43,6 +44,7 @@ public partial class DlibDotNet | ||||
|  | ||||
|     public DlibDotNet( | ||||
|         List<string> args, | ||||
|         ILogger<Program> logger, | ||||
|         IsEnvironment isEnvironment, | ||||
|         IConfigurationRoot configurationRoot, | ||||
|         AppSettings appSettings, | ||||
| @ -51,6 +53,7 @@ public partial class DlibDotNet | ||||
|         IConsole console) | ||||
|     { | ||||
|         string message; | ||||
|         _Logger = logger; | ||||
|         _Console = console; | ||||
|         _AppSettings = appSettings; | ||||
|         _IsEnvironment = isEnvironment; | ||||
| @ -59,11 +62,10 @@ public partial class DlibDotNet | ||||
|         _JLinkResolvedDirectories = new(); | ||||
|         if (ticks.ToString().Last() == '0') | ||||
|             ticks += 1; | ||||
|         _Log = Serilog.Log.ForContext<DlibDotNet>(); | ||||
|         ReadOnlyCollection<PersonContainer> personContainers; | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _Log.Information(propertyConfiguration.RootDirectory); | ||||
|         _Logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false); | ||||
|         Verify(configuration); | ||||
|         VerifyExtra(args, propertyConfiguration, configuration); | ||||
| @ -78,7 +80,7 @@ public partial class DlibDotNet | ||||
|         _ArgZeroIsConfigurationRootDirectory = propertyConfiguration.RootDirectory == argZero; | ||||
|         if (!Directory.Exists(argZero)) | ||||
|             _ = Directory.CreateDirectory(argZero); | ||||
|         _Log.Information(configuration.ModelDirectory); | ||||
|         _Logger?.LogInformation(configuration.ModelDirectory); | ||||
|         { | ||||
|             (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetPngLowQuality(); | ||||
|             (ImageCodecInfo hiddenImageCodecInfo, EncoderParameters hiddenEncoderParameters, string hiddenFileNameExtension) = C_Resize.GetGifLowQuality(); | ||||
| @ -149,15 +151,15 @@ public partial class DlibDotNet | ||||
|         if (!_PropertyRootExistedBefore && !_IsEnvironment.Development && _Exceptions.Count == 0 && _ArgZeroIsConfigurationRootDirectory) | ||||
|         { | ||||
|             string d2FacePartsRootDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(propertyConfiguration, nameof(D2_FaceParts)); | ||||
|             _Log.Information(string.Concat("Cleaning <", d2FacePartsRootDirectory, ">")); | ||||
|             _Logger?.LogInformation(string.Concat("Cleaning <", d2FacePartsRootDirectory, ">")); | ||||
|             Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(d2FacePartsRootDirectory, ticks); | ||||
|         } | ||||
|         message = $"There were {_Exceptions.Count} exception(s) thrown! {Environment.NewLine}{string.Join(Environment.NewLine, _Exceptions)}"; | ||||
|         _Log.Information(message); | ||||
|         _Logger?.LogInformation(message); | ||||
|         if (_Exceptions.Count != 0) | ||||
|             throw new Exception(message); | ||||
|         if (_PropertyRootExistedBefore) | ||||
|             _Log.Information("First run completed. Run again if wanted"); | ||||
|             _Logger?.LogInformation("First run completed. Run again if wanted"); | ||||
|     } | ||||
|  | ||||
|     private static void Verify(Models.Configuration configuration) | ||||
| @ -427,8 +429,6 @@ public partial class DlibDotNet | ||||
|     private string SaveUrlAndGetNewRootDirectory(string[] files) | ||||
|     { | ||||
|         string result; | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         if (files.Length == 0) | ||||
|             throw new NotSupportedException(); | ||||
|         string? sourceDirectory = Path.GetDirectoryName(files.First()); | ||||
| @ -448,7 +448,7 @@ public partial class DlibDotNet | ||||
|         int length = result.Length; | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             _Log.Information("Enter fileNameToCollection url for fileNameToCollection image"); | ||||
|             _Logger?.LogInformation("Enter fileNameToCollection url for fileNameToCollection image"); | ||||
|             line = _Console.ReadLine(); | ||||
|             if (string.IsNullOrEmpty(line)) | ||||
|                 break; | ||||
| @ -466,14 +466,12 @@ public partial class DlibDotNet | ||||
|             _ = new Item(fileHolder, relativePath, isValidImageFormatExtension); | ||||
|             // container.Items.Add(item); | ||||
|         } | ||||
|         _Log.Information(". . ."); | ||||
|         _Logger?.LogInformation(". . ."); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private void FullDoWork(string argZero, string propertyRoot, long ticks, string aResultsFullGroupDirectory, string bResultsFullGroupDirectory, int t, Container[] containers, A_Property propertyLogic, B_Metadata metadata, Dictionary<int, List<MappingFromPhotoPrism>> fileNameToCollection, MapLogic mapLogic) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         int total; | ||||
|         int notMapped; | ||||
|         string message; | ||||
| @ -542,11 +540,11 @@ public partial class DlibDotNet | ||||
|                 { | ||||
|                     for (int y = 0; y < int.MaxValue; y++) | ||||
|                     { | ||||
|                         _Log.Information("Press \"Y\" key when ready to continue or close console"); | ||||
|                         _Logger?.LogInformation("Press \"Y\" key when ready to continue or close console"); | ||||
|                         if (_Console.ReadKey() == ConsoleKey.Y) | ||||
|                             break; | ||||
|                     } | ||||
|                     _Log.Information(". . ."); | ||||
|                     _Logger?.LogInformation(". . ."); | ||||
|                 } | ||||
|                 total += container.Items.Count; | ||||
|             } | ||||
| @ -741,37 +739,22 @@ public partial class DlibDotNet | ||||
|  | ||||
|     private void LogItemPropertyIsNull(Item item) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         if (!item.SourceDirectoryFileHolder.Exists) | ||||
|             _Log.Information(string.Concat("NoJson <", item.ImageFileHolder.FullName, '>')); | ||||
|             _Logger?.LogInformation(string.Concat("NoJson <", item.ImageFileHolder.FullName, '>')); | ||||
|         else if (item.FileSizeChanged.HasValue && item.FileSizeChanged.Value) | ||||
|             _Log.Information(string.Concat("FileSizeChanged <", item.ImageFileHolder.FullName, '>')); | ||||
|             _Logger?.LogInformation(string.Concat("FileSizeChanged <", item.ImageFileHolder.FullName, '>')); | ||||
|         else if (item.LastWriteTimeChanged.HasValue && item.LastWriteTimeChanged.Value) | ||||
|             _Log.Information(string.Concat("LastWriteTimeChanged <", item.ImageFileHolder.FullName, '>')); | ||||
|             _Logger?.LogInformation(string.Concat("LastWriteTimeChanged <", item.ImageFileHolder.FullName, '>')); | ||||
|         else if (item.Moved.HasValue && item.Moved.Value) | ||||
|             _Log.Information(string.Concat("Moved <", item.ImageFileHolder.FullName, '>')); | ||||
|             _Logger?.LogInformation(string.Concat("Moved <", item.ImageFileHolder.FullName, '>')); | ||||
|     } | ||||
|  | ||||
|     private void LogNameWithoutExtensionIsIdFormatBut(Item item) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         _Log.Information($"Name without extension is Id format but doesn't match id <{item.ImageFileHolder.FullName}>"); | ||||
|         _Logger?.LogInformation($"Name without extension is Id format but doesn't match id <{item.ImageFileHolder.FullName}>"); | ||||
|         File.Move(item.ImageFileHolder.FullName, $"{item.ImageFileHolder.FullName}.rename"); | ||||
|     } | ||||
|  | ||||
|     private long LogDelta(long ticks, string? methodName) | ||||
|     { | ||||
|         long result; | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         double delta = new TimeSpan(DateTime.Now.Ticks - ticks).TotalMilliseconds; | ||||
|         _Log.Debug($"{methodName} took {Math.Floor(delta)} millisecond(s)"); | ||||
|         result = DateTime.Now.Ticks; | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private int GetNotMappedCountAndUpdateMappingFromPersonThenSetMapping(MapLogic mapLogic, Item item, bool? isFocusRelativePath, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers, MappingFromItem mappingFromItem, List<MappingFromPhotoPrism>? mappingFromPhotoPrismCollection, List<Shared.Models.Face> faces) | ||||
|     { | ||||
|         int result; | ||||
| @ -985,8 +968,6 @@ public partial class DlibDotNet | ||||
|         MappingFromItem mappingFromItem = IMappingFromItem.GetMappingFromItem(containerDateTimes, item, resizedFileHolder); | ||||
|         Map.Models.Stateless.Methods.IMapLogic.SetCreationTimeMaybeMoveToDecade(_Configuration.PropertyConfiguration, _Configuration.MoveToDecade && _Configuration.LocationContainerDistanceTolerance is null, mappingFromItem, locationContainers); | ||||
|         ReadOnlyDictionary<string, MetadataExtractorDirectory> metadataExtractorDirectories = metadata.GetMetadataCollection(subFileTuples, parseExceptions, changesFrom, mappingFromItem); | ||||
|         if (_AppSettings.MaxDegreeOfParallelism < 2) | ||||
|             ticks = LogDelta(ticks, nameof(B_Metadata.GetMetadataCollection)); | ||||
|         if (_AppSettings.Places.Count > 0) | ||||
|         { | ||||
|             float latitude; | ||||
| @ -1010,14 +991,8 @@ public partial class DlibDotNet | ||||
|             } | ||||
|         } | ||||
|         Dictionary<string, int[]> outputResolutionToResize = _Resize.GetResizeKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, subFileTuples, parseExceptions, item.Property, mappingFromItem); | ||||
|         if (_AppSettings.MaxDegreeOfParallelism < 2) | ||||
|             ticks = LogDelta(ticks, nameof(C_Resize.GetResizeKeyValuePairs)); | ||||
|         if (_Configuration.SaveResizedSubfiles) | ||||
|         { | ||||
|             _Resize.SaveResizedSubfile(_Configuration.PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize); | ||||
|             if (_AppSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(C_Resize.SaveResizedSubfile)); | ||||
|         } | ||||
|         if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution)) | ||||
|             faces = new(); | ||||
|         else if (!mappingFromItem.ResizedFileHolder.Exists && !File.Exists(mappingFromItem.ResizedFileHolder.FullName)) | ||||
| @ -1028,14 +1003,10 @@ public partial class DlibDotNet | ||||
|             if (!fileNameToCollection.TryGetValue(mappingFromItem.Id, out mappingFromPhotoPrismCollection)) | ||||
|                 mappingFromPhotoPrismCollection = null; | ||||
|             faces = _Faces.GetFaces(outputResolution, dResultsFullGroupDirectory, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionToResize, locationContainers, mappingFromPhotoPrismCollection); | ||||
|             if (_AppSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(D_Face.GetFaces)); | ||||
|             result = GetNotMappedCountAndUpdateMappingFromPersonThenSetMapping(mapLogic, item, isFocusRelativePath, locationContainers, mappingFromItem, mappingFromPhotoPrismCollection, faces); | ||||
|             List<(Shared.Models.Face, FileInfo?, string, bool Saved)> faceCollection = _Faces.SaveFaces(_FaceParts.FileNameExtension, dResultsFullGroupDirectory, subFileTuples, parseExceptions, mappingFromItem, faces); | ||||
|             if (_Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution)) | ||||
|                 _FaceParts.CopyFacesAndSaveFaceLandmarkImage(facePartsCollectionDirectory, mappingFromItem, faceCollection); | ||||
|             if (_AppSettings.MaxDegreeOfParallelism < 2) | ||||
|                 ticks = LogDelta(ticks, nameof(D_Face.SaveFaces)); | ||||
|             if ((_Configuration.DistanceMoveUnableToMatch || _Configuration.DistanceRenameToMatch) | ||||
|                 && _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution) | ||||
|                 && locationContainers is not null && faceCollection.All(l => !l.Saved)) | ||||
| @ -1046,8 +1017,6 @@ public partial class DlibDotNet | ||||
|                 bool saveRotated = false; | ||||
|                 string sourceDirectorySegment = Property.Models.Stateless.IResult.GetRelativePath(_Configuration.PropertyConfiguration, container.SourceDirectory); | ||||
|                 _FaceParts.SaveFaceLandmarkImages(_Configuration.PropertyConfiguration, subFileTuples, parseExceptions, mappingFromItem, faces, saveRotated); | ||||
|                 if (_AppSettings.MaxDegreeOfParallelism < 2) | ||||
|                     ticks = LogDelta(ticks, nameof(D2_FaceParts.SaveFaceLandmarkImages)); | ||||
|             } | ||||
|         } | ||||
|         lock (sourceDirectoryChanges) | ||||
| @ -1073,8 +1042,6 @@ public partial class DlibDotNet | ||||
|                                          Item[] filteredItems, | ||||
|                                          string message) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         int result = 0; | ||||
|         int exceptionsCount = 0; | ||||
|         ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; | ||||
| @ -1108,10 +1075,9 @@ public partial class DlibDotNet | ||||
|                    if (!anyPropertiesChangedForX && (i == 0 || sourceDirectoryChanges.Count > 0)) | ||||
|                        progressBar.Tick(); | ||||
|                } | ||||
|                catch (Exception ex) | ||||
|                catch (Exception) | ||||
|                { | ||||
|                    exceptionsCount++; | ||||
|                    _Log.Error(string.Concat(container.SourceDirectory, Environment.NewLine, ex.Message, Environment.NewLine, ex.StackTrace), ex); | ||||
|                    if (exceptionsCount == filteredItems.Length) | ||||
|                        throw new Exception(string.Concat("All in [", container.SourceDirectory, "] failed!")); | ||||
|                } | ||||
| @ -1173,8 +1139,6 @@ public partial class DlibDotNet | ||||
|  | ||||
|     private void SaveFaceDistances(long ticks, MapLogic mapLogic, string dFacesContentDirectory, string d2FacePartsContentDirectory, string d2FacePartsContentCollectionDirectory, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping, ReadOnlyCollection<FaceDistance> faceDistanceEncodings, ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         int? useFiltersCounter = null; | ||||
|         DistanceLimits distanceLimits; | ||||
|         ReadOnlyCollection<SortingContainer> sortingContainers; | ||||
| @ -1183,7 +1147,7 @@ public partial class DlibDotNet | ||||
|         distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaPermyriadTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh); | ||||
|         filteredFaceDistanceContainers = E_Distance.FilteredPostLoadFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits); | ||||
|         if (filteredFaceDistanceContainers.Length == 0) | ||||
|             _Log.Information("All images have been filtered!"); | ||||
|             _Logger?.LogInformation("All images have been filtered!"); | ||||
|         else | ||||
|         { | ||||
|             sortingContainers = E_Distance.SetFaceMappingSortingCollectionThenGetSortedSortingContainers(_AppSettings.MaxDegreeOfParallelism, _MapConfiguration, ticks, mapLogic, distanceLimits, faceDistanceEncodings, filteredFaceDistanceContainers); | ||||
| @ -1194,7 +1158,7 @@ public partial class DlibDotNet | ||||
|                     distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaPermyriadTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh, useFiltersCounter); | ||||
|                     filteredFaceDistanceContainers = E_Distance.FilteredPostLoadFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits); | ||||
|                     if (filteredFaceDistanceContainers.Length == 0) | ||||
|                         _Log.Information("All images have been filtered!"); | ||||
|                         _Logger?.LogInformation("All images have been filtered!"); | ||||
|                     else | ||||
|                     { | ||||
|                         sortingContainers = E_Distance.SetFaceMappingSortingCollectionThenGetSortedSortingContainers(_AppSettings.MaxDegreeOfParallelism, _MapConfiguration, ticks, mapLogic, distanceLimits, faceDistanceEncodings, filteredFaceDistanceContainers); | ||||
|  | ||||
| @ -41,10 +41,6 @@ | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|     </ItemGroup> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Instance.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -9,14 +9,12 @@ namespace View_by_Distance.Instance.Models; | ||||
| internal class F_Random | ||||
| { | ||||
|  | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly Configuration _Configuration; | ||||
|     private readonly JsonSerializerOptions _WriteIndentedJsonSerializerOptions; | ||||
|  | ||||
|     internal F_Random(Configuration configuration) | ||||
|     { | ||||
|         _Configuration = configuration; | ||||
|         _Log = Serilog.Log.ForContext<F_Random>(); | ||||
|         _WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = false }; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Instance.Models; | ||||
| @ -10,9 +12,8 @@ namespace View_by_Distance.Instance; | ||||
|  | ||||
| public class Program | ||||
| { | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -27,9 +28,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -38,31 +36,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             DlibDotNet _ = new(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             DlibDotNet _ = new(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -35,7 +35,6 @@ | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Humanizer.Core" Version="2.14.1" /> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|  | ||||
| @ -210,7 +210,6 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic | ||||
|     } | ||||
|  | ||||
|     private readonly long _Ticks; | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly Configuration? _Configuration; | ||||
|     private readonly string _EDistanceContentTicksDirectory; | ||||
|     private readonly ReadOnlyDictionary<long, int> _PersonKeyToCount; | ||||
| @ -225,10 +224,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic | ||||
|     { | ||||
|         _Ticks = ticks; | ||||
|         _Configuration = configuration; | ||||
|         _Log = Serilog.Log.ForContext<MapLogic>(); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         if (_Log is null) | ||||
|         { } | ||||
|         ReadOnlyDictionary<long, int> readOnlyPersonKeyToCount; | ||||
|         List<PersonContainer> notMappedPersonContainers = new(); | ||||
|         Dictionary<int, List<(string, int)>> skipCollection = new(); | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Map.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -39,10 +39,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|     <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using System.Text; | ||||
| using System.Text.Json; | ||||
| @ -19,7 +19,7 @@ public class MetadataQuery | ||||
|     private readonly IConfigurationRoot _ConfigurationRoot; | ||||
|     private readonly Property.Models.Configuration _PropertyConfiguration; | ||||
|  | ||||
|     public MetadataQuery(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public MetadataQuery(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -30,14 +30,13 @@ public class MetadataQuery | ||||
|         long ticks = DateTime.Now.Ticks; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
|         _ConfigurationRoot = configurationRoot; | ||||
|         ILogger? log = Log.ForContext<MetadataQuery>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _Configuration = configuration; | ||||
|         log.Information(propertyConfiguration.RootDirectory); | ||||
|          logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Verify(); | ||||
|         MetadataQueryFilesInDirectories(log, ticks); | ||||
|         MetadataQueryFilesInDirectories(logger, ticks); | ||||
|     } | ||||
|  | ||||
|     private void Verify() | ||||
| @ -122,10 +121,10 @@ public class MetadataQuery | ||||
|         return keyValuePairs; | ||||
|     } | ||||
|  | ||||
|     private void MetadataQueryFilesInDirectories(ILogger log, long ticks) | ||||
|     private void MetadataQueryFilesInDirectories(ILogger<Program>? logger, long ticks) | ||||
|     { | ||||
|         List<(string FileName, string Count, string TagGroup, string TagIdName, string Value)> collection = GetCollection(ticks); | ||||
|         log.Information($"Ready to query {collection.Count} entries?"); | ||||
|          logger?.LogInformation($"Ready to query {collection.Count} entries?"); | ||||
|         IEnumerable<(string FileName, string Count, string TagGroup, string TagIdName, string Value)> enumerable() | ||||
|         { | ||||
|             foreach ((string FileName, string Count, string TagGroup, string TagIdName, string Value) l in collection) | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Metadata.Query.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Metadata.Query.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Metadata.Query; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new MetadataQuery(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new MetadataQuery(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -34,7 +34,6 @@ | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|  | ||||
							
								
								
									
										29
									
								
								Metadata/Models/Avi.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Metadata/Models/Avi.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace View_by_Distance.Metadata.Models; | ||||
|  | ||||
|  public record Avi(string? FramesPerSecond1, | ||||
|                    string? SamplesPerSecond2, | ||||
|                    string? Duration3, | ||||
|                    string? VideoCodec4, | ||||
|                    string? AudioCodec5, | ||||
|                    string? Width6, | ||||
|                    string? Height7, | ||||
|                    string? Streams8, | ||||
|                    string? DateTimeOriginal320) | ||||
| { | ||||
|  | ||||
|     public override string ToString() | ||||
|     { | ||||
|         string result = JsonSerializer.Serialize(this, AviSourceGenerationContext.Default.Avi); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true)] | ||||
| [JsonSerializable(typeof(Avi))] | ||||
| public partial class AviSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
| @ -16,7 +16,6 @@ namespace View_by_Distance.Metadata.Models; | ||||
| public class B_Metadata : IMetadata<MetadataExtractor.Directory> | ||||
| { | ||||
|  | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly bool _PropertiesChangedForMetadata; | ||||
|     private readonly IPropertyConfiguration _PropertyConfiguration; | ||||
|     private readonly bool _ForceMetadataLastWriteTimeToCreationTime; | ||||
| @ -26,7 +25,6 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory> | ||||
|     public B_Metadata(IPropertyConfiguration propertyConfiguration) | ||||
|     { | ||||
|         _PropertiesChangedForMetadata = false; | ||||
|         _Log = Serilog.Log.ForContext<B_Metadata>(); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _ForceMetadataLastWriteTimeToCreationTime = false; | ||||
|         _WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; | ||||
| @ -35,7 +33,6 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory> | ||||
|  | ||||
|     public B_Metadata(IPropertyConfiguration propertyConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata, string bResultsFullGroupDirectory) | ||||
|     { | ||||
|         _Log = Serilog.Log.ForContext<B_Metadata>(); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _PropertiesChangedForMetadata = propertiesChangedForMetadata; | ||||
|         _ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; | ||||
|  | ||||
							
								
								
									
										194
									
								
								Metadata/Models/Exif.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								Metadata/Models/Exif.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,194 @@ | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace View_by_Distance.Metadata.Models; | ||||
|  | ||||
|  public record Exif(string? InteropIndex1, | ||||
|                     string? Noise37389, | ||||
|                     string? FocalPlaneXResolutionTiffEp37390, | ||||
|                     string? FocalPlaneYResolutionTiffEp37391, | ||||
|                     string? ImageNumber37393, | ||||
|                     string? SecurityClassification37394, | ||||
|                     string? ImageHistory37395, | ||||
|                     string? SubjectLocationTiffEp37396, | ||||
|                     string? ExposureIndexTiffEp37397, | ||||
|                     string? SpatialFreqResponseTiffEp37388, | ||||
|                     string? StandardIdTiffEp37398, | ||||
|                     string? UserComment37510, | ||||
|                     string? SubsecondTime37520, | ||||
|                     string? SubsecondTimeOriginal37521, | ||||
|                     string? SubsecondTimeDigitized37522, | ||||
|                     string? WinTitle40091, | ||||
|                     string? WinComment40092, | ||||
|                     string? WinAuthor40093, | ||||
|                     string? WinKeywords40094, | ||||
|                     string? Makernote37500, | ||||
|                     string? WinSubject40095, | ||||
|                     string? FlashEnergyTiffEp37387, | ||||
|                     string? Flash37385, | ||||
|                     string? IsoSpeedLatitudeYYY34868, | ||||
|                     string? IsoSpeedLatitudeZZZ34869, | ||||
|                     string? ExifVersion36864, | ||||
|                     string? DateTimeOriginal36867, | ||||
|                     string? DateTimeDigitized36868, | ||||
|                     string? TimeZone36880, | ||||
|                     string? TimeZoneOriginal36881, | ||||
|                     string? TimeZoneDigitized36882, | ||||
|                     string? FocalLength37386, | ||||
|                     string? ComponentsConfiguration37121, | ||||
|                     string? ShutterSpeed37377, | ||||
|                     string? Aperture37378, | ||||
|                     string? BrightnessValue37379, | ||||
|                     string? ExposureBias37380, | ||||
|                     string? MaxAperture37381, | ||||
|                     string? SubjectDistance37382, | ||||
|                     string? MeteringMode37383, | ||||
|                     string? WhiteBalance37384, | ||||
|                     string? CompressedAverageBitsPerPixel37122, | ||||
|                     string? IsoSpeed34867, | ||||
|                     string? FlashpixVersion40960, | ||||
|                     string? ExifImageWidth40962, | ||||
|                     string? Sharpness41994, | ||||
|                     string? DeviceSettingDescription41995, | ||||
|                     string? SubjectDistanceRange41996, | ||||
|                     string? ImageUniqueId42016, | ||||
|                     string? CameraOwnerName42032, | ||||
|                     string? BodySerialNumber42033, | ||||
|                     string? LensSpecification42034, | ||||
|                     string? LensMake42035, | ||||
|                     string? Saturation41993, | ||||
|                     string? LensModel42036, | ||||
|                     string? GdalMetadata42112, | ||||
|                     string? GdalNoData42113, | ||||
|                     string? Gamma42240, | ||||
|                     string? PrintImageMatchingInfo50341, | ||||
|                     string? PanasonicTitle50898, | ||||
|                     string? PanasonicTitle250899, | ||||
|                     string? Padding59932, | ||||
|                     string? Lens65002, | ||||
|                     string? LensSerialNumber42037, | ||||
|                     string? ColorSpace40961, | ||||
|                     string? Contrast41992, | ||||
|                     string? SceneCaptureType41990, | ||||
|                     string? ExifImageHeight40963, | ||||
|                     string? RelatedSoundFile40964, | ||||
|                     string? FlashEnergy41483, | ||||
|                     string? SpatialFreqResponse41484, | ||||
|                     string? FocalPlaneXResolution41486, | ||||
|                     string? FocalPlaneYResolution41487, | ||||
|                     string? FocalPlaneResolutionUnit41488, | ||||
|                     string? SubjectLocation41492, | ||||
|                     string? GainControl41991, | ||||
|                     string? ExposureIndex41493, | ||||
|                     string? FileSource41728, | ||||
|                     string? SceneType41729, | ||||
|                     string? CfaPattern41730, | ||||
|                     string? CustomRendered41985, | ||||
|                     string? ExposureMode41986, | ||||
|                     string? WhiteBalanceMode41987, | ||||
|                     string? DigitalZoomRatio41988, | ||||
|                     string? Film35MMEquivFocalLength41989, | ||||
|                     string? SensingMethod41495, | ||||
|                     string? RecommendedExposureIndex34866, | ||||
|                     string? StandardOutputSensitivity34865, | ||||
|                     string? SensitivityType34864, | ||||
|                     string? YResolution283, | ||||
|                     string? PlanarConfiguration284, | ||||
|                     string? PageName285, | ||||
|                     string? ResolutionUnit296, | ||||
|                     string? PageNumber297, | ||||
|                     string? TransferFunction301, | ||||
|                     string? Software305, | ||||
|                     string? DateTime306, | ||||
|                     string? XResolution282, | ||||
|                     string? Artist315, | ||||
|                     string? Predictor317, | ||||
|                     string? WhitePoint318, | ||||
|                     string? PrimaryChromaticities319, | ||||
|                     string? TileWidth322, | ||||
|                     string? TileLength323, | ||||
|                     string? TileOffsets324, | ||||
|                     string? TileByteCounts325, | ||||
|                     string? SubIfdOffset330, | ||||
|                     string? HostComputer316, | ||||
|                     string? ExtraSamples338, | ||||
|                     string? MaxSampleValue281, | ||||
|                     string? StripByteCounts279, | ||||
|                     string? InteropVersion2, | ||||
|                     string? NewSubfileType254, | ||||
|                     string? SubfileType255, | ||||
|                     string? ImageWidth256, | ||||
|                     string? ImageHeight257, | ||||
|                     string? BitsPerSample258, | ||||
|                     string? Compression259, | ||||
|                     string? PhotometricInterpretation262, | ||||
|                     string? MinSampleValue280, | ||||
|                     string? Thresholding263, | ||||
|                     string? DocumentName269, | ||||
|                     string? ImageDescription270, | ||||
|                     string? Make271, | ||||
|                     string? Model272, | ||||
|                     string? StripOffsets273, | ||||
|                     string? Orientation274, | ||||
|                     string? SamplesPerPixel277, | ||||
|                     string? RowsPerStrip278, | ||||
|                     string? FillOrder266, | ||||
|                     string? SampleFormat339, | ||||
|                     string? TransferRange342, | ||||
|                     string? JpegTables347, | ||||
|                     string? FNumber33437, | ||||
|                     string? PixelScale33550, | ||||
|                     string? IptcNaa33723, | ||||
|                     string? ModelTiePoint33922, | ||||
|                     string? PhotoshopSettings34377, | ||||
|                     string? InterColorProfile34675, | ||||
|                     string? GeoTiffGeoKeys34735, | ||||
|                     string? GeoTiffGeoDoubleParams34736, | ||||
|                     string? ExposureTime33434, | ||||
|                     string? GeoTiffGeoAsciiParams34737, | ||||
|                     string? SpectralSensitivity34852, | ||||
|                     string? IsoEquivalent34855, | ||||
|                     string? OptoElectricConversionFunction34856, | ||||
|                     string? Interlace34857, | ||||
|                     string? TimeZoneOffsetTiffEp34858, | ||||
|                     string? SelfTimerModeTiffEp34859, | ||||
|                     string? TimeZoneOffset34858, | ||||
|                     string? SelfTimerMode34859, | ||||
|                     string? ExposureProgram34850, | ||||
|                     string? Copyright33432, | ||||
|                     string? BatteryLevel33423, | ||||
|                     string? CfaPattern233422, | ||||
|                     string? JpegProc512, | ||||
|                     string? JpegRestartInterval515, | ||||
|                     string? JpegLosslessPredictors517, | ||||
|                     string? JpegPointTransforms518, | ||||
|                     string? JpegQTables519, | ||||
|                     string? JpegDcTables520, | ||||
|                     string? JpegAcTables521, | ||||
|                     string? YCbCrCoefficients529, | ||||
|                     string? YCbCrSubsampling530, | ||||
|                     string? YCbCrPositioning531, | ||||
|                     string? ReferenceBlackWhite532, | ||||
|                     string? StripRowCounts559, | ||||
|                     string? ApplicationNotes700, | ||||
|                     string? RelatedImageFileFormat4096, | ||||
|                     string? RelatedImageWidth4097, | ||||
|                     string? RelatedImageHeight4098, | ||||
|                     string? Rating18246, | ||||
|                     string? RatingPercent18249, | ||||
|                     string? CfaRepeatPatternDim33421) | ||||
| { | ||||
|  | ||||
|     public override string ToString() | ||||
|     { | ||||
|         string result = JsonSerializer.Serialize(this, ExifSourceGenerationContext.Default.Exif); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true)] | ||||
| [JsonSerializable(typeof(Exif))] | ||||
| public partial class ExifSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
							
								
								
									
										36
									
								
								Metadata/Models/QuickTimeMovieHeader.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								Metadata/Models/QuickTimeMovieHeader.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace View_by_Distance.Metadata.Models; | ||||
|  | ||||
|  public record QuickTimeMovieHeader(string? Version1, | ||||
|                                     string? NextTrackId16, | ||||
|                                     string? CurrentTime15, | ||||
|                                     string? SelectionDuration14, | ||||
|                                     string? SelectionTime13, | ||||
|                                     string? PosterTime12, | ||||
|                                     string? PreviewDuration11, | ||||
|                                     string? PreviewTime10, | ||||
|                                     string? Matrix9, | ||||
|                                     string? PreferredVolume8, | ||||
|                                     string? PreferredRate7, | ||||
|                                     string? Duration6, | ||||
|                                     string? TimeScale5, | ||||
|                                     string? Modified4, | ||||
|                                     string? Created3, | ||||
|                                     string? Flags2) | ||||
| { | ||||
|  | ||||
|     public override string ToString() | ||||
|     { | ||||
|         string result = JsonSerializer.Serialize(this, QuickTimeMovieHeaderSourceGenerationContext.Default.QuickTimeMovieHeader); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true)] | ||||
| [JsonSerializable(typeof(QuickTimeMovieHeader))] | ||||
| public partial class QuickTimeMovieHeaderSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
							
								
								
									
										33
									
								
								Metadata/Models/QuickTimeTrackHeader.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Metadata/Models/QuickTimeTrackHeader.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| using System.Text.Json; | ||||
| using System.Text.Json.Serialization; | ||||
|  | ||||
| namespace View_by_Distance.Metadata.Models; | ||||
|  | ||||
|  public record QuickTimeTrackHeader(string? Version1, | ||||
|                                     string? Flags2, | ||||
|                                     string? Created3, | ||||
|                                     string? Modified4, | ||||
|                                     string? TrackId5, | ||||
|                                     string? Duration6, | ||||
|                                     string? Layer7, | ||||
|                                     string? AlternateGroup8, | ||||
|                                     string? Volume9, | ||||
|                                     string? Width10, | ||||
|                                     string? Height11, | ||||
|                                     string? Matrix12, | ||||
|                                     string? Rotation13) | ||||
| { | ||||
|  | ||||
|     public override string ToString() | ||||
|     { | ||||
|         string result = JsonSerializer.Serialize(this, QuickTimeTrackHeaderSourceGenerationContext.Default.QuickTimeTrackHeader); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| [JsonSourceGenerationOptions(WriteIndented = true)] | ||||
| [JsonSerializable(typeof(QuickTimeTrackHeader))] | ||||
| public partial class QuickTimeTrackHeaderSourceGenerationContext : JsonSerializerContext | ||||
| { | ||||
| } | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Metadata.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -39,10 +39,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|     <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using View_by_Distance.Mirror.Length.Models; | ||||
| using View_by_Distance.Shared.Models.Methods; | ||||
| @ -17,7 +17,7 @@ public class MirrorLength | ||||
|     private readonly IConfigurationRoot _ConfigurationRoot; | ||||
|     private readonly Property.Models.Configuration _PropertyConfiguration; | ||||
|  | ||||
|     public MirrorLength(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public MirrorLength(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -28,14 +28,13 @@ public class MirrorLength | ||||
|         long ticks = DateTime.Now.Ticks; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
|         _ConfigurationRoot = configurationRoot; | ||||
|         ILogger? log = Log.ForContext<MirrorLength>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _Configuration = configuration; | ||||
|         log.Information(propertyConfiguration.RootDirectory); | ||||
|         logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Verify(); | ||||
|         MirrorLengthFilesInDirectories(log, ticks); | ||||
|         MirrorLengthFilesInDirectories(logger, ticks); | ||||
|     } | ||||
|  | ||||
|     private void Verify() | ||||
| @ -189,7 +188,7 @@ public class MirrorLength | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void MirrorLengthFilesInDirectories(ILogger log, long ticks) | ||||
|     private void MirrorLengthFilesInDirectories(ILogger<Program>? logger, long ticks) | ||||
|     { | ||||
|         string message = nameof(MirrorLength); | ||||
|         List<(string, string, int)> collectionForMarkDown; | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Mirror.Length.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Mirror.Length.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Mirror.Length; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new MirrorLength(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new MirrorLength(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Move.By.Id.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -39,10 +39,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\Property\Property.csproj" /> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using System.Text; | ||||
| using View_by_Distance.Move.By.Id.Models; | ||||
| @ -20,7 +20,7 @@ public class MoveById | ||||
|     private readonly IConfigurationRoot _ConfigurationRoot; | ||||
|     private readonly Property.Models.Configuration _PropertyConfiguration; | ||||
|  | ||||
|     public MoveById(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public MoveById(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -30,7 +30,6 @@ public class MoveById | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
|         _ConfigurationRoot = configurationRoot; | ||||
|         ILogger? log = Log.ForContext<MoveById>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
| @ -39,7 +38,7 @@ public class MoveById | ||||
|         string? comparePathRoot = Path.GetDirectoryName(appSettings.ComparePathsFile); | ||||
|         if (comparePathRoot is null || comparePathRoot == propertyConfiguration.RootDirectory) | ||||
|             throw new Exception("Nested isn't allowed!"); | ||||
|         log.Information(propertyConfiguration.RootDirectory); | ||||
|          logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false); | ||||
|         Verify(); | ||||
|         string json = File.ReadAllText(appSettings.ComparePathsFile); | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Move.By.Id.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Move.By.Id; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -28,9 +29,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -39,31 +37,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new MoveById(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new MoveById(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Offset.Date.Time.Original.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -39,10 +39,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|     <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using System.Drawing; | ||||
| using System.Drawing.Imaging; | ||||
| @ -30,7 +30,7 @@ public class OffsetDateTimeOriginal | ||||
|     private readonly IConfigurationRoot _ConfigurationRoot; | ||||
|     private readonly Property.Models.Configuration _PropertyConfiguration; | ||||
|  | ||||
|     public OffsetDateTimeOriginal(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public OffsetDateTimeOriginal(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -40,14 +40,13 @@ public class OffsetDateTimeOriginal | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
|         _ConfigurationRoot = configurationRoot; | ||||
|         ILogger? log = Log.ForContext<OffsetDateTimeOriginal>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _Configuration = configuration; | ||||
|         log.Information(propertyConfiguration.RootDirectory); | ||||
|         logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Verify(); | ||||
|         List<string> lines = OffsetDateTimeOriginalFilesInDirectories(log); | ||||
|         List<string> lines = OffsetDateTimeOriginalFilesInDirectories(logger); | ||||
|         if (lines.Any()) | ||||
|             File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); | ||||
|     } | ||||
| @ -154,7 +153,7 @@ public class OffsetDateTimeOriginal | ||||
|  | ||||
| #pragma warning restore CA1416 | ||||
|  | ||||
|     private void DateFix(ILogger log, string sourceDirectory) | ||||
|     private void DateFix(ILogger<Program>? logger, string sourceDirectory) | ||||
|     { | ||||
|         string checkDirectory; | ||||
|         ASCIIEncoding asciiEncoding = new(); | ||||
| @ -166,14 +165,14 @@ public class OffsetDateTimeOriginal | ||||
|         { | ||||
|             checkDirectory = Path.Combine(sourceDirectory, "1"); | ||||
|             if (!Directory.Exists(checkDirectory)) | ||||
|                 log.Error($"<{checkDirectory}> doesn't exist!"); | ||||
|                 logger?.LogError($"<{checkDirectory}> doesn't exist!"); | ||||
|             else | ||||
|             { | ||||
|                 string badDirectory = Path.Combine(sourceDirectory, "Bad"); | ||||
|                 string targetDirectory = Path.Combine(sourceDirectory, "Target"); | ||||
|                 string[] minimumDirectory = Directory.GetDirectories(targetDirectory, "*", SearchOption.TopDirectoryOnly); | ||||
|                 if (minimumDirectory.Length != 1) | ||||
|                     log.Error($"<{checkDirectory}> doesn't exist!"); | ||||
|                     logger?.LogError($"<{checkDirectory}> doesn't exist!"); | ||||
|                 else | ||||
|                 { | ||||
|                     string format = "yyyy-MM-dd"; | ||||
| @ -181,7 +180,7 @@ public class OffsetDateTimeOriginal | ||||
|                     string[] badFiles = !Directory.Exists(badDirectory) ? Array.Empty<string>() : Directory.GetFiles(badDirectory, "*", SearchOption.TopDirectoryOnly); | ||||
|                     string[] targetFiles = !Directory.Exists(targetDirectory) ? Array.Empty<string>() : Directory.GetFiles(targetDirectory, "*", SearchOption.TopDirectoryOnly); | ||||
|                     if (badFiles.Length != 1 || targetFiles.Length != 1 || maximumDirectory.Length != 1) | ||||
|                         log.Error("bad file(s) or target file(s) or maximum directory doesn't equal 1!"); | ||||
|                         logger?.LogError("bad file(s) or target file(s) or maximum directory doesn't equal 1!"); | ||||
|                     else | ||||
|                     { | ||||
|                         int? badId; | ||||
| @ -213,7 +212,7 @@ public class OffsetDateTimeOriginal | ||||
|                         if (!targetDateTimes.Any() || targetId is null) | ||||
|                             throw new Exception(targetMessage); | ||||
|                         if (badDateTimeOriginal is null || targetDateTimeOriginal is null) | ||||
|                             log.Error("Date is null!"); | ||||
|                             logger?.LogError("Date is null!"); | ||||
|                         else | ||||
|                         { | ||||
|                             TimeSpan timeSpan = new(targetDateTimeOriginal.Value.Ticks - badDateTimeOriginal.Value.Ticks); | ||||
| @ -225,10 +224,10 @@ public class OffsetDateTimeOriginal | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private List<string> OffsetDateTimeOriginalFilesInDirectories(ILogger log) | ||||
|     private List<string> OffsetDateTimeOriginalFilesInDirectories(ILogger<Program>? logger) | ||||
|     { | ||||
|         List<string> results = new(); | ||||
|         DateFix(log, _PropertyConfiguration.RootDirectory); | ||||
|         DateFix(logger, _PropertyConfiguration.RootDirectory); | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Offset.Date.Time.Original.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Offset.Date.Time.Original; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new OffsetDateTimeOriginal(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new OffsetDateTimeOriginal(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.PhotoPrism.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -35,7 +35,6 @@ | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Humanizer.Core" Version="2.14.1" /> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="WindowsShortcutFactory" Version="1.1.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.PrepareForOld.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -35,10 +35,6 @@ | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.PrepareForOld.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.PrepareForOld; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -43,27 +41,24 @@ public class Program | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.PropertyCompare.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -34,7 +34,6 @@ | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|     </ItemGroup> | ||||
|  | ||||
| @ -15,7 +15,6 @@ public class A_Property | ||||
|     public bool Reverse { get; } | ||||
|     public List<string> ExceptionsDirectories => _ExceptionsDirectories; | ||||
|  | ||||
|     private readonly Serilog.ILogger? _Log; | ||||
|     private readonly string _OutputExtension; | ||||
|     private readonly int _MaxDegreeOfParallelism; | ||||
|     private readonly ASCIIEncoding _ASCIIEncoding; | ||||
| @ -31,7 +30,6 @@ public class A_Property | ||||
|         _OutputExtension = outputExtension; | ||||
|         _ASCIIEncoding = new ASCIIEncoding(); | ||||
|         _Configuration = propertyConfiguration; | ||||
|         _Log = Serilog.Log.ForContext<A_Property>(); | ||||
|         _AngleBracketCollection = new List<string>(); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _MaxDegreeOfParallelism = maxDegreeOfParallelism; | ||||
| @ -44,17 +42,6 @@ public class A_Property | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private long LogDelta(long ticks, string? methodName) | ||||
|     { | ||||
|         long result; | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         double delta = new TimeSpan(DateTime.Now.Ticks - ticks).TotalMilliseconds; | ||||
|         _Log.Debug($"{methodName} took {Math.Floor(delta)} millisecond(s)"); | ||||
|         result = DateTime.Now.Ticks; | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private Shared.Models.Property GetImageProperty(Shared.Models.Methods.IMetadata<MetadataExtractor.Directory> metadata, Item item, List<Tuple<string, DateTime>> sourceDirectoryFileTuples, List<string> parseExceptions, bool isIgnoreExtension) | ||||
|     { | ||||
|         Shared.Models.Property? result; | ||||
| @ -252,8 +239,6 @@ public class A_Property | ||||
|  | ||||
|     public void SavePropertyParallelWork(long ticks, Shared.Models.Methods.IMetadata<MetadataExtractor.Directory> metadata, int t, Container[] containers) | ||||
|     { | ||||
|         if (_Log is null) | ||||
|             throw new NullReferenceException(nameof(_Log)); | ||||
|         int total = 0; | ||||
|         string message; | ||||
|         int totalSeconds; | ||||
| @ -277,22 +262,10 @@ public class A_Property | ||||
|             totalSeconds = (int)Math.Truncate(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); | ||||
|             message = $"{i + 1:000} [{container.Items.Count:000}] / {containersLength:000} - {total} / {t} total - {totalSeconds} total second(s) - {outputResolution} - {container.SourceDirectory}"; | ||||
|             SavePropertyParallelWork(_MaxDegreeOfParallelism, metadata, exceptions, sourceDirectoryChanges, container, container.Items, message); | ||||
|             foreach (Exception exception in exceptions) | ||||
|                 _Log.Error(string.Concat(container.SourceDirectory, Environment.NewLine, exception.Message, Environment.NewLine, exception.StackTrace), exception); | ||||
|             if (exceptions.Count == container.Items.Count) | ||||
|                 throw new Exception(string.Concat("All in [", container.SourceDirectory, "]failed!")); | ||||
|             if (exceptions.Count != 0) | ||||
|                 _ExceptionsDirectories.Add(container.SourceDirectory); | ||||
|             if (Directory.GetFiles(propertyRoot, "*.txt", SearchOption.TopDirectoryOnly).Any()) | ||||
|             { | ||||
|                 for (int y = 0; y < int.MaxValue; y++) | ||||
|                 { | ||||
|                     _Log.Information("Press \"Y\" key when ready to continue or close console"); | ||||
|                     if (System.Console.ReadKey().Key == ConsoleKey.Y) | ||||
|                         break; | ||||
|                 } | ||||
|                 _Log.Information(". . ."); | ||||
|             } | ||||
|             total += container.Items.Count; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Property.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -40,9 +40,8 @@ | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|         <PackageReference Include="ShellProgressBar" Version="5.2.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|     </ItemGroup> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Rename.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Rename.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Rename; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -28,9 +29,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -39,31 +37,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new Rename(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new Rename(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -1,7 +1,7 @@ | ||||
| using CliWrap; | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using System.Text; | ||||
| using View_by_Distance.Metadata.Models; | ||||
| @ -31,7 +31,7 @@ public class Rename | ||||
|     private readonly IConfigurationRoot _ConfigurationRoot; | ||||
|     private readonly Property.Models.Configuration _PropertyConfiguration; | ||||
|  | ||||
|     public Rename(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public Rename(List<string> args, ILogger<Program>? logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -41,15 +41,14 @@ public class Rename | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
|         _ConfigurationRoot = configurationRoot; | ||||
|         ILogger? log = Log.ForContext<Rename>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _Configuration = configuration; | ||||
|         log.Information(propertyConfiguration.RootDirectory); | ||||
|         logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false); | ||||
|         Verify(); | ||||
|         List<string> lines = RenameFilesInDirectories(log); | ||||
|         List<string> lines = RenameFilesInDirectories(logger); | ||||
|         if (lines.Any()) | ||||
|         { | ||||
|             File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); | ||||
| @ -73,7 +72,7 @@ public class Rename | ||||
|             throw new NullReferenceException(nameof(_PropertyConfiguration)); | ||||
|     } | ||||
|  | ||||
|     private List<string> RenameFilesInDirectories(ILogger log) | ||||
|     private List<string> RenameFilesInDirectories(ILogger? logger) | ||||
|     { | ||||
|         List<string> results = new(); | ||||
|         string message; | ||||
| @ -159,24 +158,24 @@ public class Rename | ||||
|             File.WriteAllText($"{to}.paddedId", $"{to}{Environment.NewLine}{fileHolder.FullName}"); | ||||
|         } | ||||
|         ConsoleKey? consoleKey = null; | ||||
|         log.Information($"Ready to Move {verifiedToDoCollection.Count} files[i](s)?"); | ||||
|         logger?.LogInformation($"Ready to Move {verifiedToDoCollection.Count} files[i](s)?"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             log.Information("Press \"Y\" key to move files[i](s), \"N\" key to log files[i](s) or close console to not move files"); | ||||
|             logger?.LogInformation("Press \"Y\" key to move files[i](s), \"N\" key to log files[i](s) or close console to not move files"); | ||||
|             consoleKey = System.Console.ReadKey().Key; | ||||
|             if (consoleKey is ConsoleKey.Y or ConsoleKey.N) | ||||
|                 break; | ||||
|         } | ||||
|         log.Information(". . ."); | ||||
|         logger?.LogInformation(". . ."); | ||||
|         if (consoleKey is null || consoleKey.Value != ConsoleKey.Y) | ||||
|             log.Information("Nothing moved!"); | ||||
|             logger?.LogInformation("Nothing moved!"); | ||||
|         else | ||||
|         { | ||||
|             message = ") Renaming files"; | ||||
|             progressBar = new(count, message, options); | ||||
|             results.AddRange(Move(progressBar, verifiedToDoCollection)); | ||||
|             progressBar.Dispose(); | ||||
|             log.Information("Done Moving"); | ||||
|             logger?.LogInformation("Done Moving"); | ||||
|         } | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
| @ -40,10 +40,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\Metadata\Metadata.csproj" /> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Resize.Models.Stateless; | ||||
|  | ||||
| internal static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -33,7 +33,6 @@ | ||||
|         <SupportedPlatform Include="browser" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|         <PackageReference Include="MetadataExtractor" Version="2.8.0" /> | ||||
|         <PackageReference Include="System.Drawing.Common" Version="7.0.0" /> | ||||
|         <PackageReference Include="System.Text.Json" Version="7.0.2" /> | ||||
|  | ||||
| @ -1,10 +0,0 @@ | ||||
| namespace View_by_Distance.Set.Created.Date.Models.Stateless; | ||||
|  | ||||
| public static class SerilogExtensionMethods | ||||
| { | ||||
|  | ||||
|     internal static void Warn(this Serilog.ILogger log, string messageTemplate) => log.Warning(messageTemplate); | ||||
|  | ||||
|     internal static void Info(this Serilog.ILogger log, string messageTemplate) => log.Information(messageTemplate); | ||||
|  | ||||
| } | ||||
| @ -1,6 +1,8 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Set.Created.Date.Models; | ||||
| @ -11,9 +13,8 @@ namespace View_by_Distance.Set.Created.Date; | ||||
| public class Program | ||||
| { | ||||
|  | ||||
|     public static void Secondary(List<string> args) | ||||
|     public static void Secondary(ILogger<Program> logger, List<string> args) | ||||
|     { | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
|         IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); | ||||
| @ -30,9 +31,6 @@ public class Program | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         ILogger log = Log.ForContext<Program>(); | ||||
|         int silentIndex = args.IndexOf("s"); | ||||
|         if (silentIndex > -1) | ||||
|             args.RemoveAt(silentIndex); | ||||
| @ -41,31 +39,28 @@ public class Program | ||||
|             if (args is null) | ||||
|                 throw new Exception("args is null!"); | ||||
|             Shared.Models.Console console = new(); | ||||
|             _ = new SetCreatedDate(args, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|             _ = new SetCreatedDate(args, logger, isEnvironment, configurationRoot, appSettings, workingDirectory, silentIndex > -1, console); | ||||
|         } | ||||
|         catch (Exception ex) | ||||
|         { | ||||
|             log.Fatal(string.Concat(ex.Message, Environment.NewLine, ex.StackTrace)); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             Log.CloseAndFlush(); | ||||
|             logger?.LogError(ex, "Error!"); | ||||
|         } | ||||
|         if (silentIndex > -1) | ||||
|             log.Debug("Done. Bye"); | ||||
|             logger?.LogDebug("Done. Bye"); | ||||
|         else | ||||
|         { | ||||
|             log.Debug("Done. Press 'Enter' to end"); | ||||
|             logger?.LogDebug("Done. Press 'Enter' to end"); | ||||
|             _ = Console.ReadLine(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         ILogger<Program>? logger = Host.CreateDefaultBuilder(args).Build().Services.GetRequiredService<ILogger<Program>>(); | ||||
|         if (args is not null) | ||||
|             Secondary(args.ToList()); | ||||
|             Secondary(logger, args.ToList()); | ||||
|         else | ||||
|             Secondary(new List<string>()); | ||||
|             Secondary(logger, new List<string>()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -39,10 +39,6 @@ | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" /> | ||||
|     <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|     <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\Metadata\Metadata.csproj" /> | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using ShellProgressBar; | ||||
| using System.Text; | ||||
| using View_by_Distance.Metadata.Models; | ||||
| @ -23,7 +23,7 @@ public class SetCreatedDate | ||||
|     private readonly IReadOnlyDictionary<string, string[]> _FileGroups; | ||||
|     private readonly Property.Models.Configuration _PropertyConfiguration; | ||||
|  | ||||
|     public SetCreatedDate(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     public SetCreatedDate(List<string> args, ILogger<Program> logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) | ||||
|     { | ||||
|         if (isSilent) | ||||
|         { } | ||||
| @ -33,16 +33,15 @@ public class SetCreatedDate | ||||
|         _IsEnvironment = isEnvironment; | ||||
|         _WorkingDirectory = workingDirectory; | ||||
|         _ConfigurationRoot = configurationRoot; | ||||
|         ILogger? log = Log.ForContext<SetCreatedDate>(); | ||||
|         Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         string[] directories = new string[] { propertyConfiguration.ResultContent }; | ||||
|         _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, directories); | ||||
|         Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         _PropertyConfiguration = propertyConfiguration; | ||||
|         _Configuration = configuration; | ||||
|         log.Information(propertyConfiguration.RootDirectory); | ||||
|         logger?.LogInformation(propertyConfiguration.RootDirectory); | ||||
|         Verify(); | ||||
|         List<string> lines = SetCreatedDateFilesInDirectories(log); | ||||
|         List<string> lines = SetCreatedDateFilesInDirectories(logger); | ||||
|         File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); | ||||
|         if (lines.Count == 0) | ||||
|             _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); | ||||
| @ -139,7 +138,7 @@ public class SetCreatedDate | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     private List<string> SetCreatedDateFilesInDirectories(ILogger log) | ||||
|     private List<string> SetCreatedDateFilesInDirectories(ILogger<Program>? logger) | ||||
|     { | ||||
|         List<string> results = new(); | ||||
|         ProgressBar progressBar; | ||||
| @ -154,23 +153,23 @@ public class SetCreatedDate | ||||
|         progressBar = new(count, message, options); | ||||
|         List<Record> toDoCollection = GetToDoCollection(progressBar, filesCollection); | ||||
|         progressBar.Dispose(); | ||||
|         log.Information($"Ready to set created date {toDoCollection.Count} file(s)?"); | ||||
|         logger?.LogInformation($"Ready to set created date {toDoCollection.Count} file(s)?"); | ||||
|         for (int y = 0; y < int.MaxValue; y++) | ||||
|         { | ||||
|             log.Information("Press \"Y\" key to set created date file(s), \"N\" key to log file(s) or close console to not set created date files"); | ||||
|             logger?.LogInformation("Press \"Y\" key to set created date file(s), \"N\" key to log file(s) or close console to not set created date files"); | ||||
|             consoleKey = System.Console.ReadKey().Key; | ||||
|             if (consoleKey is ConsoleKey.Y or ConsoleKey.N) | ||||
|                 break; | ||||
|         } | ||||
|         log.Information(". . ."); | ||||
|         logger?.LogInformation(". . ."); | ||||
|         if (consoleKey is null || consoleKey.Value != ConsoleKey.Y) | ||||
|             log.Information("Nothing set!"); | ||||
|             logger?.LogInformation("Nothing set!"); | ||||
|         else | ||||
|         { | ||||
|             progressBar = new(count, message, options); | ||||
|             results.AddRange(SetCreatedDateForeach(progressBar, toDoCollection)); | ||||
|             progressBar.Dispose(); | ||||
|             log.Information("Done setting created date"); | ||||
|             logger?.LogInformation("Done setting created date"); | ||||
|         } | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
| @ -35,10 +35,6 @@ | ||||
|         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" /> | ||||
|         <PackageReference Include="MSTest.TestAdapter" Version="3.0.2" /> | ||||
|         <PackageReference Include="MSTest.TestFramework" Version="3.0.2" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <ProjectReference Include="..\BlurHash\BlurHash.csproj" /> | ||||
|  | ||||
| @ -2,7 +2,6 @@ using Humanizer; | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Drawing; | ||||
| using System.Reflection; | ||||
| @ -16,7 +15,6 @@ namespace View_by_Distance.Tests; | ||||
| public partial class UnitTestCalculations | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly string _WorkingDirectory; | ||||
|     private readonly Configuration _Configuration; | ||||
| @ -26,13 +24,11 @@ public partial class UnitTestCalculations | ||||
|  | ||||
|     public UnitTestCalculations() | ||||
|     { | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         Configuration configuration; | ||||
|         IsEnvironment isEnvironment; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Property.Models.Configuration propertyConfiguration; | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
| @ -46,13 +42,8 @@ public partial class UnitTestCalculations | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<UnitTestCalculations>(); | ||||
|         propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _Configuration = configuration; | ||||
|         _IsEnvironment = isEnvironment; | ||||
| @ -71,7 +62,6 @@ public partial class UnitTestCalculations | ||||
|     [TestMethod] | ||||
|     public void TestMethodNull() | ||||
|     { | ||||
|         Assert.IsFalse(_Logger is null); | ||||
|         Assert.IsFalse(_AppSettings is null); | ||||
|         Assert.IsFalse(_Configuration is null); | ||||
|         Assert.IsFalse(_IsEnvironment is null); | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Shared.Models.Stateless.Methods; | ||||
| @ -13,7 +12,6 @@ namespace View_by_Distance.Tests; | ||||
| public class UnitTestExample | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly string _WorkingDirectory; | ||||
|     private readonly Configuration _Configuration; | ||||
| @ -23,13 +21,11 @@ public class UnitTestExample | ||||
|  | ||||
|     public UnitTestExample() | ||||
|     { | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         Configuration configuration; | ||||
|         IsEnvironment isEnvironment; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Property.Models.Configuration propertyConfiguration; | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
| @ -43,13 +39,8 @@ public class UnitTestExample | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<UnitTestExample>(); | ||||
|         propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _Configuration = configuration; | ||||
|         _IsEnvironment = isEnvironment; | ||||
| @ -61,7 +52,6 @@ public class UnitTestExample | ||||
|     [TestMethod] | ||||
|     public void TestMethodNull() | ||||
|     { | ||||
|         Assert.IsFalse(_Logger is null); | ||||
|         Assert.IsFalse(_AppSettings is null); | ||||
|         Assert.IsFalse(_Configuration is null); | ||||
|         Assert.IsFalse(_IsEnvironment is null); | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Globalization; | ||||
| using System.Reflection; | ||||
| @ -15,7 +14,6 @@ namespace View_by_Distance.Tests; | ||||
| public partial class UnitTestHardCoded | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly string _WorkingDirectory; | ||||
|     private readonly Configuration _Configuration; | ||||
| @ -25,13 +23,11 @@ public partial class UnitTestHardCoded | ||||
|  | ||||
|     public UnitTestHardCoded() | ||||
|     { | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         Configuration configuration; | ||||
|         IsEnvironment isEnvironment; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Property.Models.Configuration propertyConfiguration; | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
| @ -45,13 +41,8 @@ public partial class UnitTestHardCoded | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<UnitTestHardCoded>(); | ||||
|         propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _Configuration = configuration; | ||||
|         _IsEnvironment = isEnvironment; | ||||
| @ -70,7 +61,6 @@ public partial class UnitTestHardCoded | ||||
|     [TestMethod] | ||||
|     public void TestMethodNull() | ||||
|     { | ||||
|         Assert.IsFalse(_Logger is null); | ||||
|         Assert.IsFalse(_AppSettings is null); | ||||
|         Assert.IsFalse(_Configuration is null); | ||||
|         Assert.IsFalse(_IsEnvironment is null); | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Diagnostics; | ||||
| using System.Drawing.Imaging; | ||||
| @ -20,7 +19,6 @@ namespace View_by_Distance.Tests; | ||||
| public class UnitTestResize | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly string _WorkingDirectory; | ||||
|     private readonly IsEnvironment _IsEnvironment; | ||||
| @ -30,13 +28,11 @@ public class UnitTestResize | ||||
|  | ||||
|     public UnitTestResize() | ||||
|     { | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         IsEnvironment isEnvironment; | ||||
|         Models.Configuration configuration; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Property.Models.Configuration propertyConfiguration; | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
| @ -50,14 +46,9 @@ public class UnitTestResize | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<UnitTestResize>(); | ||||
|         propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _Configuration = configuration; | ||||
|         _IsEnvironment = isEnvironment; | ||||
| @ -76,7 +67,6 @@ public class UnitTestResize | ||||
|     [TestMethod] | ||||
|     public void TestMethodNull() | ||||
|     { | ||||
|         Assert.IsFalse(_Logger is null); | ||||
|         Assert.IsFalse(_AppSettings is null); | ||||
|         Assert.IsFalse(_Configuration is null); | ||||
|         Assert.IsFalse(_IsEnvironment is null); | ||||
| @ -154,7 +144,6 @@ public class UnitTestResize | ||||
|         (string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution); | ||||
|         (string aResultsFullGroupDirectory, string bResultsFullGroupDirectory) = GetResultsFullGroupDirectories(); | ||||
|         Shared.Models.Methods.IBlurHasher blurHasher = new BlurHash.Models.C2_BlurHasher(_PropertyConfiguration); | ||||
|         _Logger.Information(_Configuration.ModelDirectory); | ||||
|         A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory); | ||||
|         string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); | ||||
|         if (!Directory.Exists(aPropertySingletonDirectory)) | ||||
|  | ||||
| @ -34,10 +34,6 @@ | ||||
|         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" /> | ||||
|         <PackageReference Include="MSTest.TestAdapter" Version="3.0.2" /> | ||||
|         <PackageReference Include="MSTest.TestFramework" Version="3.0.2" /> | ||||
|         <PackageReference Include="Serilog.Settings.Configuration" Version="7.0.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> | ||||
|         <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> | ||||
|         <PackageReference Include="Serilog" Version="2.12.0" /> | ||||
|     </ItemGroup> | ||||
|     <ItemGroup> | ||||
|         <ProjectReference Include="..\BlurHash\BlurHash.csproj" /> | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
| using Phares.Shared; | ||||
| using Serilog; | ||||
| using System.Diagnostics; | ||||
| using System.Reflection; | ||||
| using View_by_Distance.Shared.Models.Stateless.Methods; | ||||
| @ -13,7 +12,6 @@ namespace View_by_Distance.Tests; | ||||
| public class UnitTestExample | ||||
| { | ||||
|  | ||||
|     private readonly ILogger _Logger; | ||||
|     private readonly AppSettings _AppSettings; | ||||
|     private readonly string _WorkingDirectory; | ||||
|     private readonly Configuration _Configuration; | ||||
| @ -23,13 +21,11 @@ public class UnitTestExample | ||||
|  | ||||
|     public UnitTestExample() | ||||
|     { | ||||
|         ILogger logger; | ||||
|         AppSettings appSettings; | ||||
|         string workingDirectory; | ||||
|         Configuration configuration; | ||||
|         IsEnvironment isEnvironment; | ||||
|         IConfigurationRoot configurationRoot; | ||||
|         LoggerConfiguration loggerConfiguration = new(); | ||||
|         Property.Models.Configuration propertyConfiguration; | ||||
|         Assembly assembly = Assembly.GetExecutingAssembly(); | ||||
|         bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); | ||||
| @ -43,13 +39,8 @@ public class UnitTestExample | ||||
|             throw new Exception("Working directory name must have a value!"); | ||||
|         workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); | ||||
|         Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); | ||||
|         _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); | ||||
|         Log.Logger = loggerConfiguration.CreateLogger(); | ||||
|         logger = Log.ForContext<UnitTestExample>(); | ||||
|         propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); | ||||
|         configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); | ||||
|         logger.Information("Complete"); | ||||
|         _Logger = logger; | ||||
|         _AppSettings = appSettings; | ||||
|         _Configuration = configuration; | ||||
|         _IsEnvironment = isEnvironment; | ||||
| @ -61,7 +52,6 @@ public class UnitTestExample | ||||
|     [TestMethod] | ||||
|     public void TestMethodNull() | ||||
|     { | ||||
|         Assert.IsFalse(_Logger is null); | ||||
|         Assert.IsFalse(_AppSettings is null); | ||||
|         Assert.IsFalse(_Configuration is null); | ||||
|         Assert.IsFalse(_IsEnvironment is null); | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user