Save Url and Get New Root Directory

This commit is contained in:
2022-09-21 13:55:57 -07:00
parent 90244811ed
commit 192d2ad776
8 changed files with 107 additions and 27 deletions

View File

@ -24,6 +24,7 @@ public partial class DlibDotNet
private readonly C_Resize _Resize;
private readonly F_Random _Random;
private readonly E3_Rename _Rename;
private readonly IConsole _Console;
private readonly B_Metadata _Metadata;
private readonly Serilog.ILogger? _Log;
private readonly D2_FaceParts _FaceParts;
@ -38,6 +39,7 @@ public partial class DlibDotNet
public DlibDotNet(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console)
{
_Console = console;
string argZero;
string message;
_AppSettings = appSettings;
@ -50,7 +52,7 @@ public partial class DlibDotNet
_FilePropertiesKeyValuePairs = new Dictionary<string, List<Tuple<string, Shared.Models.Property>>>();
Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
_Log.Information(propertyConfiguration.RootDirectory);
Property.Models.Configuration.Verify(propertyConfiguration);
Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false);
Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
Verify(configuration);
VerifyExtra(args, propertyConfiguration, configuration);
@ -64,10 +66,7 @@ public partial class DlibDotNet
string propertyRoot = Property.Models.Stateless.IResult.GetResultsGroupDirectory(propertyConfiguration, nameof(A_Property), create: false);
_FirstRun = !Directory.Exists(propertyRoot);
_Metadata = new(configuration.ForceMetadataLastWriteTimeToCreationTime, configuration.PropertiesChangedForMetadata);
if (args.Count > 0)
argZero = Path.GetFullPath(args[0]);
else
argZero = Path.GetFullPath(propertyConfiguration.RootDirectory);
argZero = args.Count > 0 ? Path.GetFullPath(args[0]) : Path.GetFullPath(propertyConfiguration.RootDirectory);
_ArgZeroIsConfigurationRootDirectory = propertyConfiguration.RootDirectory == argZero;
_Log.Information(configuration.ModelDirectory);
(Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(configuration);
@ -666,7 +665,7 @@ public partial class DlibDotNet
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)
if (_Console.ReadKey() == ConsoleKey.Y)
break;
}
_Log.Information(". . .");
@ -756,6 +755,72 @@ public partial class DlibDotNet
mapLogic.SaveShortcuts(_Configuration.JuliePhares, distinctFilteredFaces);
}
private static Container? AreAllSameStartsWith(string argZero, Container[] containers)
{
Container? result = null;
string[] directoryNames = Shared.Models.Stateless.Methods.IPath.GetDirectoryNames(argZero);
if (directoryNames.Length > 2)
{
string directoryName;
string rootDirectoryName = directoryNames[^2];
if (!Directory.Exists(argZero))
throw new Exception();
foreach (Container container in containers)
{
if (container.SourceDirectory == argZero)
result = container;
directoryName = Path.GetFileName(container.SourceDirectory);
if (!directoryName.StartsWith(rootDirectoryName))
{
result = null;
break;
}
}
}
return result;
}
private string SaveUrlAndGetNewRootDirectory(Container container)
{
if (_Log is null)
throw new NullReferenceException(nameof(_Log));
string? result = Path.GetDirectoryName(Path.GetDirectoryName(container.SourceDirectory));
if (result is null)
throw new Exception();
Uri uri;
Item item;
string? line;
string fileName;
Task<byte[]> task;
string relativePath;
string extensionLowered;
string sourceDirectoryFile;
int length = result.Length;
HttpClient httpClient = new();
bool isValidImageFormatExtension;
for (int y = 0; y < int.MaxValue; y++)
{
_Log.Information("Enter a url for a image");
line = _Console.ReadLine();
if (string.IsNullOrEmpty(line))
break;
uri = new(line);
if (uri.HostNameType != UriHostNameType.Dns)
continue;
task = httpClient.GetByteArrayAsync(uri);
fileName = Path.GetFileName(uri.LocalPath);
sourceDirectoryFile = Path.Combine(container.SourceDirectory, fileName);
File.WriteAllBytes(sourceDirectoryFile, task.Result);
extensionLowered = Path.GetExtension(uri.LocalPath);
relativePath = Shared.Models.Stateless.Methods.IPath.GetRelativePath(sourceDirectoryFile, length, forceExtensionToLower: true);
isValidImageFormatExtension = _Configuration.PropertyConfiguration.ValidImageFormatExtensions.Contains(extensionLowered);
item = new(sourceDirectoryFile, relativePath, isValidImageFormatExtension);
container.Items.Add(item);
}
_Log.Information(". . .");
return result;
}
private void Search(long ticks, Model? model, PredictorModel? predictorModel, string argZero, string propertyRoot, PersonContainer[] personContainers)
{
int j;
@ -768,22 +833,30 @@ public partial class DlibDotNet
string dResultsFullGroupDirectory;
string eResultsFullGroupDirectory;
string d2ResultsFullGroupDirectory;
A_Property propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, model, predictorModel);
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
string message = $") Building Container(s) - {totalSeconds} total second(s)";
A_Property propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, model, predictorModel);
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
using (ProgressBar progressBar = new(1, message, options))
{
progressBar.Tick();
if (string.IsNullOrEmpty(_Configuration.PropertyConfiguration.RootDirectory))
(j, f, t, containers) = A_Property.Get(_Configuration.PropertyConfiguration, propertyLogic);
else
(j, f, t, containers) = Property.Models.Stateless.Container.GetContainers(_Configuration.PropertyConfiguration, _FirstRun, propertyLogic);
(j, f, t, containers) = Property.Models.Stateless.Container.GetContainers(_Configuration.PropertyConfiguration, _FirstRun, propertyLogic);
}
Container? container = AreAllSameStartsWith(argZero, containers);
if (_ArgZeroIsConfigurationRootDirectory && container is not null)
{
string? newRootDirectory = SaveUrlAndGetNewRootDirectory(container);
for (int i = 1; i < 10; i++)
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Property.Models.Stateless.IResult.GetResultsGroupDirectory(_Configuration.PropertyConfiguration, string.Empty, create: true));
argZero = newRootDirectory;
_Configuration.PropertyConfiguration.ChangeRootDirectory(newRootDirectory);
propertyRoot = Property.Models.Stateless.IResult.GetResultsGroupDirectory(_Configuration.PropertyConfiguration, nameof(A_Property), create: false);
propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, model, predictorModel);
}
FullDoWork(argZero, model, predictorModel, propertyRoot, ticks, propertyLogic, t, containers);
foreach (string outputResolution in _Configuration.OutputResolutions)
{
if (_FirstRun)
if (_FirstRun || container is not null)
break;
(aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, eResultsFullGroupDirectory) = GetResultsFullGroupDirectories(model, predictorModel, outputResolution);
if (_ArgZeroIsConfigurationRootDirectory && _Configuration.SaveResizedSubfiles && outputResolution == _Configuration.OutputResolutions[0] && _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution) && _Exceptions.Count == 0)