New directory structure for Face and FaceParts
This commit is contained in:
@ -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++)
|
||||
{
|
||||
|
Reference in New Issue
Block a user