New directory structure for Face and FaceParts

This commit is contained in:
2023-06-28 18:35:36 -07:00
parent d1c194197d
commit 34a02fd8bd
6 changed files with 139 additions and 166 deletions

View File

@ -80,62 +80,64 @@ public class CopyDistinct
return (directories, results);
}
private List<(FileHolder, string)> GetToDoCollection(ProgressBar progressBar, List<string> files)
private List<(FileHolder, string, string)> GetToDoCollection(ProgressBar progressBar, FileHolder[] fileHolders)
{
List<(FileHolder, string)> results = new();
List<(FileHolder, string, string)> results = new();
string checkFile;
string directory;
FileInfo fileInfo;
int directoryIndex;
FileHolder fileHolder;
string directoryName;
bool wrapped = false;
List<string> distinct = new();
bool nameWithoutExtensionIsIdFormat;
foreach (string file in files)
foreach (FileHolder fileHolder in fileHolders)
{
progressBar.Tick();
fileHolder = new(file);
if (fileHolder.ExtensionLowered == ".id" || fileHolder.ExtensionLowered == ".lsv" || fileHolder.DirectoryName is null)
continue;
if (files.Contains($"{fileHolder.FullName}.id"))
continue;
nameWithoutExtensionIsIdFormat = Shared.Models.Stateless.Methods.IProperty.NameWithoutExtensionIsIdFormat(fileHolder);
if (!nameWithoutExtensionIsIdFormat)
{
nameWithoutExtensionIsIdFormat = Shared.Models.Stateless.Methods.IProperty.NameWithoutExtensionIsIdFormat(_PropertyConfiguration.ValidImageFormatExtensions, fileHolder);
if (!nameWithoutExtensionIsIdFormat)
continue;
}
(_, directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, fileHolder.NameWithoutExtension);
directory = _FileGroups[_PropertyConfiguration.ResultContent][directoryIndex];
directoryName = Path.GetFileName(fileHolder.DirectoryName);
if (!fileHolder.Name.StartsWith(directoryName))
{
if (wrapped)
continue;
directory = _FileGroups[_PropertyConfiguration.ResultContent][directoryIndex];
}
else
{
if (!wrapped)
wrapped = true;
directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], directoryName);
}
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}{fileHolder.ExtensionLowered}");
if (distinct.Contains(checkFile))
{
for (int i = 1; i < int.MaxValue; i++)
{
fileInfo = new(checkFile);
if (fileHolder.Length != fileInfo.Length || fileHolder.LastWriteTime != fileInfo.LastWriteTime)
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}.{i}why{fileHolder.ExtensionLowered}");
else
if (!fileInfo.Exists || fileHolder.Length == fileInfo.Length && fileHolder.LastWriteTime == fileInfo.LastWriteTime)
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}.{i}dup{fileHolder.ExtensionLowered}");
else
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}.{i}why{fileHolder.ExtensionLowered}");
if (distinct.Contains(checkFile))
continue;
distinct.Add(checkFile);
results.Add(new(fileHolder, checkFile));
results.Add(new(fileHolder, directory, checkFile));
break;
}
continue;
}
distinct.Add(checkFile);
results.Add(new(fileHolder, checkFile));
results.Add(new(fileHolder, directory, checkFile));
}
return results;
}
private static List<string> Copy(ProgressBar progressBar, List<(FileHolder, string)> toDoCollection)
private static List<string> Copy(ProgressBar progressBar, List<(FileHolder, string, string)> toDoCollection)
{
List<string> results = new();
FileInfo fileInfo;
foreach ((FileHolder fileHolder, string to) in toDoCollection)
foreach ((FileHolder fileHolder, string _, string to) in toDoCollection)
{
progressBar.Tick();
fileInfo = new(to);
@ -161,12 +163,25 @@ public class CopyDistinct
const string fileSearchFilter = "*";
string message = nameof(CopyDistinct);
const string directorySearchFilter = "*";
List<string> distinctDirectories = new();
List<string[]> filesCollection = Shared.Models.Stateless.Methods.IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter);
(_, List<string> allFiles) = Get(filesCollection);
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
progressBar = new(allFiles.Count, message, options);
List<(FileHolder, string)> toDoCollection = GetToDoCollection(progressBar, allFiles);
FileHolder[] fileHolders = (from l in allFiles select new FileHolder(l)).OrderBy(l => l.LastWriteTime).ToArray();
List<(FileHolder, string, string)> toDoCollection = GetToDoCollection(progressBar, fileHolders);
progressBar.Dispose();
foreach ((FileHolder fileHolder, string directory, string to) in toDoCollection)
{
if (distinctDirectories.Contains(directory))
continue;
distinctDirectories.Add(directory);
}
foreach (string distinctDirectory in distinctDirectories)
{
if (!Directory.Exists(distinctDirectory))
_ = Directory.CreateDirectory(distinctDirectory);
}
log.Information($"Ready to Copy {toDoCollection.Count} file(s)?");
for (int y = 0; y < int.MaxValue; y++)
{