added-numbers-to-distinguish-has-ignore-keyword-and-has-date-time-original
moved-container-to-new-project-to-prepare-to-remove-property-file added-logic-to-rename-to-3-and-7-like-should-ignore-for-missing-date-time-original
This commit is contained in:
@ -22,7 +22,6 @@ internal abstract class DistanceLogic
|
||||
internal record TicksDirectory(DateTime AlternateDirectoryDateTime,
|
||||
string Directory,
|
||||
DateTime DirectoryDateTime,
|
||||
string DirectoryName,
|
||||
bool? IsLocationContainerDebugDirectory,
|
||||
float? TotalDays);
|
||||
|
||||
@ -86,53 +85,55 @@ internal abstract class DistanceLogic
|
||||
float? totalDays;
|
||||
long? next = null;
|
||||
string? checkDirectory;
|
||||
string ticksDirectoryName;
|
||||
DateTime directoryDateTime;
|
||||
DirectoryInfo directoryInfo;
|
||||
TicksDirectory ticksDirectory;
|
||||
long? lastDirectoryTicks = null;
|
||||
DateTime dateTime = DateTime.Now;
|
||||
DateTime alternateDirectoryDateTime;
|
||||
string ticksDirectoryNameFirstSegment;
|
||||
bool? isLocationContainerDebugDirectory;
|
||||
long month = dateTime.AddMonths(1).Ticks - dateTime.Ticks;
|
||||
for (int i = 1; i < 5; i++)
|
||||
_ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
||||
if (!Directory.Exists(eDistanceContentDirectory))
|
||||
_ = Directory.CreateDirectory(eDistanceContentDirectory);
|
||||
string[] ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string ticksDirectory in ticksDirectories)
|
||||
string[] ticksFullPaths = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string ticksFullPath in ticksFullPaths)
|
||||
{
|
||||
ticksDirectoryName = Path.GetFileName(ticksDirectory);
|
||||
if (ticksDirectoryName.Length < 3)
|
||||
ticksDirectoryNameFirstSegment = Path.GetFileName(ticksFullPath).Split('.')[0];
|
||||
if (ticksDirectoryNameFirstSegment.Length < 3)
|
||||
continue;
|
||||
if (!long.TryParse(ticksDirectoryName, out long directoryTicks))
|
||||
if (!long.TryParse(ticksDirectoryNameFirstSegment, out long directoryTicks))
|
||||
throw new NotSupportedException();
|
||||
if (next is null)
|
||||
next = new DateTime(directoryTicks).Ticks;
|
||||
else
|
||||
{
|
||||
next += month;
|
||||
checkDirectory = Path.GetDirectoryName(ticksDirectory);
|
||||
checkDirectory = Path.GetDirectoryName(ticksFullPath);
|
||||
if (string.IsNullOrEmpty(checkDirectory))
|
||||
{
|
||||
if (string.IsNullOrEmpty(checkDirectory))
|
||||
continue;
|
||||
checkDirectory = Path.Combine(checkDirectory, next.Value.ToString());
|
||||
if (ticksDirectory == checkDirectory || !checkDirectory.EndsWith(configuration.LocationContainerDirectoryPattern))
|
||||
if (ticksFullPath == checkDirectory || !checkDirectory.EndsWith(configuration.LocationContainerDirectoryPattern))
|
||||
continue;
|
||||
Directory.Move(ticksDirectory, checkDirectory);
|
||||
Directory.Move(ticksFullPath, checkDirectory);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
directoryInfo = new(ticksDirectory);
|
||||
directoryInfo = new(ticksFullPath);
|
||||
directoryDateTime = new DateTime(directoryTicks);
|
||||
if (directoryInfo.CreationTime.Ticks != directoryTicks)
|
||||
Directory.SetCreationTime(ticksDirectory, new DateTime(directoryTicks));
|
||||
Directory.SetCreationTime(ticksFullPath, new DateTime(directoryTicks));
|
||||
if (directoryInfo.LastWriteTime.Ticks != directoryTicks)
|
||||
Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks));
|
||||
Directory.SetLastWriteTime(ticksFullPath, new DateTime(directoryTicks));
|
||||
alternateDirectoryDateTime = new DateTime(directoryDateTime.Year, directoryDateTime.Month, directoryDateTime.Day).AddMonths(1);
|
||||
isLocationContainerDebugDirectory = configuration.LocationContainerDebugDirectory is null ? null : ticksDirectoryName.EndsWith(configuration.LocationContainerDebugDirectory);
|
||||
isLocationContainerDebugDirectory = configuration.LocationContainerDebugDirectory is null ? null : ticksDirectoryNameFirstSegment.EndsWith(configuration.LocationContainerDebugDirectory);
|
||||
totalDays = lastDirectoryTicks is null || new TimeSpan(dateTime.Ticks - directoryTicks).TotalDays < 1 ? null : (float)new TimeSpan(directoryTicks - lastDirectoryTicks.Value).TotalDays;
|
||||
results.Add(new(alternateDirectoryDateTime, ticksDirectory, new(directoryTicks), ticksDirectoryName, isLocationContainerDebugDirectory, totalDays));
|
||||
ticksDirectory = new(alternateDirectoryDateTime, ticksFullPath, new(directoryTicks), isLocationContainerDebugDirectory, totalDays);
|
||||
results.Add(ticksDirectory);
|
||||
if (directoryDateTime.Hour == 0 && directoryDateTime.Minute == 0 && directoryDateTime.Second == 0)
|
||||
continue;
|
||||
lastDirectoryTicks = directoryTicks;
|
||||
@ -216,9 +217,37 @@ internal abstract class DistanceLogic
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Record> GetRecords(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration configuration, bool? isDefault, string[] files, int directoryNumber, string personKeyFormatted, int? linksCount, List<string> distinct, string? personDisplayDirectoryName)
|
||||
private static string GetCheckFile(TicksDirectory ticksDirectory, string @enum, string fileName, string file)
|
||||
{
|
||||
string result;
|
||||
string checkDirectory;
|
||||
string directory = file;
|
||||
List<string> collection = [];
|
||||
for (int i = 0; i < file.Length; i++)
|
||||
{
|
||||
directory = Path.GetDirectoryName(directory) ?? throw new Exception();
|
||||
if (directory == ticksDirectory.Directory)
|
||||
break;
|
||||
collection.Add(Path.GetFileName(directory));
|
||||
}
|
||||
collection.Reverse();
|
||||
checkDirectory = $"{ticksDirectory.Directory}.{@enum}";
|
||||
foreach (string directoryName in collection)
|
||||
checkDirectory = Path.Combine(checkDirectory, directoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
result = Path.Combine(checkDirectory, fileName);
|
||||
if (File.Exists(result))
|
||||
throw new Exception($"File <{fileName}> already exists!");
|
||||
File.Move(file, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static List<Record> GetRecords(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration configuration, TicksDirectory ticksDirectory, bool? isDefault, string[] files, int directoryNumber, string personKeyFormatted, int? linksCount, List<string> distinct, string? personDisplayDirectoryName)
|
||||
{
|
||||
List<Record> results = [];
|
||||
string @enum;
|
||||
Record record;
|
||||
string fileName;
|
||||
string checkFile;
|
||||
FilePath filePath;
|
||||
@ -244,8 +273,26 @@ internal abstract class DistanceLogic
|
||||
File.Move(file, checkFile);
|
||||
continue;
|
||||
}
|
||||
if (file.StartsWith(ticksDirectory.Directory))
|
||||
{
|
||||
@enum = IPath.GetEnum(filePath).ToString();
|
||||
if (!ticksDirectory.Directory.EndsWith(@enum))
|
||||
{
|
||||
checkFile = GetCheckFile(ticksDirectory, @enum, fileName, file);
|
||||
fileHolder = IFileHolder.Get(checkFile);
|
||||
filePath = FilePath.Get(propertyConfiguration, fileHolder, index: null);
|
||||
if (filePath.Id is null)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
distinct.Add(fileName);
|
||||
results.Add(new(directoryNumber, isDefault, linksCount, filePath, personDisplayDirectoryName, personKeyFormatted));
|
||||
record = new(DirectoryNumber: directoryNumber,
|
||||
IsDefault: isDefault,
|
||||
LinksCount: linksCount,
|
||||
MappedFaceFilePath: filePath,
|
||||
PersonDisplayDirectoryName: personDisplayDirectoryName,
|
||||
PersonKeyFormatted: personKeyFormatted);
|
||||
results.Add(record);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
@ -311,6 +358,7 @@ internal abstract class DistanceLogic
|
||||
DateTime dateTime;
|
||||
TimeSpan timeSpan;
|
||||
int directoryNumber;
|
||||
List<Record> records;
|
||||
string? checkDirectory;
|
||||
ProgressBar progressBar;
|
||||
string[] yearDirectories;
|
||||
@ -340,8 +388,7 @@ internal abstract class DistanceLogic
|
||||
progressBar = new(ticksDirectories.Count, message, options);
|
||||
foreach (TicksDirectory ticksDirectory in ticksDirectories)
|
||||
{
|
||||
if (i == 1)
|
||||
progressBar.Tick();
|
||||
progressBar.Tick();
|
||||
personKeyFormattedDirectories = Directory.GetDirectories(ticksDirectory.Directory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personKeyFormattedDirectory in personKeyFormattedDirectories)
|
||||
{
|
||||
@ -368,23 +415,6 @@ internal abstract class DistanceLogic
|
||||
linksCount = null;
|
||||
else
|
||||
linksCount = GetLinksCount(yearDirectory);
|
||||
if (ticksDirectory.DirectoryName != configuration.LocationContainerDebugDirectory)
|
||||
{
|
||||
files = Directory.GetFiles(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
File.Delete(file);
|
||||
}
|
||||
if (ticksDirectory.DirectoryName == configuration.LocationContainerDebugDirectory)
|
||||
{
|
||||
isDefault = null;
|
||||
personDisplayDirectoryName = null;
|
||||
files = Directory.GetFiles(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
results.AddRange(GetRecords(propertyConfiguration, configuration, isDefault, files, directoryNumber, personKeyFormatted, linksCount, distinct, personDisplayDirectoryName));
|
||||
files = Directory.GetFiles(yearDirectory, "*.lnk", SearchOption.AllDirectories);
|
||||
foreach (string file in files)
|
||||
File.Delete(file);
|
||||
continue;
|
||||
}
|
||||
personNameDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
if (personNameDirectories.Length > 1)
|
||||
throw new NotSupportedException("Try deleting *.lnk files!");
|
||||
@ -467,7 +497,9 @@ internal abstract class DistanceLogic
|
||||
Directory.Move(personNameDirectory, personFirstInitialDirectory);
|
||||
files = Directory.GetFiles(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
}
|
||||
results.AddRange(GetRecords(propertyConfiguration, configuration, isDefault, files, directoryNumber, personKeyFormatted, linksCount, distinct, personDisplayDirectoryName));
|
||||
records = GetRecords(propertyConfiguration, configuration, ticksDirectory, isDefault, files, directoryNumber, personKeyFormatted, linksCount, distinct, personDisplayDirectoryName);
|
||||
if (records.Count > 0)
|
||||
results.AddRange(records);
|
||||
personNameLinkDirectories = Directory.GetDirectories(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personNameLinkDirectory in personNameLinkDirectories)
|
||||
{
|
||||
|
@ -13,17 +13,17 @@ namespace View_by_Distance.Map.Models.Stateless;
|
||||
internal abstract class MapLogic
|
||||
{
|
||||
|
||||
internal record Duplicate(long PersonKey,
|
||||
int Id,
|
||||
FilePath FilePath,
|
||||
float? Percent);
|
||||
|
||||
internal record MappedFile(long PersonKey,
|
||||
string PersonKeyFormatted,
|
||||
string? PersonDisplayDirectoryName,
|
||||
int? DirectoryNumber,
|
||||
FilePath FilePath);
|
||||
|
||||
internal record Duplicate(long PersonKey,
|
||||
int Id,
|
||||
FilePath FilePath,
|
||||
float? Percent);
|
||||
|
||||
internal record PersonKeyFormattedIdThenWholePercentages(string PersonKeyFormatted,
|
||||
string? PersonDisplayDirectoryName,
|
||||
bool? IsDefault,
|
||||
@ -188,6 +188,7 @@ internal abstract class MapLogic
|
||||
private static List<MappedFile> GetDisplayDirectoryAllFiles(string fileNameExtension, string personBirthdayFormat, ReadOnlyCollection<PersonContainer> personContainers)
|
||||
{
|
||||
List<MappedFile> results = [];
|
||||
MappedFile mappedFile;
|
||||
string personKeyFormatted;
|
||||
List<string> distinct = [];
|
||||
foreach (PersonContainer personContainer in personContainers)
|
||||
@ -202,7 +203,12 @@ internal abstract class MapLogic
|
||||
continue;
|
||||
distinct.Add(personContainer.DisplayDirectoryAllFilePaths[i].Name);
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(personBirthdayFormat, personContainer.Key.Value);
|
||||
results.Add(new(personContainer.Key.Value, personKeyFormatted, personContainer.DisplayDirectoryName, null, personContainer.DisplayDirectoryAllFilePaths[i]));
|
||||
mappedFile = new(PersonKey: personContainer.Key.Value,
|
||||
PersonKeyFormatted: personKeyFormatted,
|
||||
PersonDisplayDirectoryName: personContainer.DisplayDirectoryName,
|
||||
DirectoryNumber: null,
|
||||
FilePath: personContainer.DisplayDirectoryAllFilePaths[i]);
|
||||
results.Add(mappedFile);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
@ -462,6 +468,7 @@ internal abstract class MapLogic
|
||||
string checkFile;
|
||||
FilePath filePath;
|
||||
FileHolder fileHolder;
|
||||
MappedFile mappedFile;
|
||||
List<string> distinct = [];
|
||||
PersonBirthday? personBirthday;
|
||||
PersonContainer? personContainer;
|
||||
@ -481,7 +488,12 @@ internal abstract class MapLogic
|
||||
personDisplayDirectoryName = record.PersonDisplayDirectoryName;
|
||||
else
|
||||
personDisplayDirectoryName = personContainer.DisplayDirectoryName;
|
||||
results.Add(new(personKey, record.PersonKeyFormatted, personDisplayDirectoryName, record.DirectoryNumber, record.MappedFaceFilePath));
|
||||
mappedFile = new(PersonKey: personKey,
|
||||
PersonKeyFormatted: record.PersonKeyFormatted,
|
||||
PersonDisplayDirectoryName: personDisplayDirectoryName,
|
||||
DirectoryNumber: record.DirectoryNumber,
|
||||
FilePath: record.MappedFaceFilePath);
|
||||
results.Add(mappedFile);
|
||||
}
|
||||
for (int i = results.Count - 1; i > -1; i--)
|
||||
{
|
||||
@ -501,7 +513,11 @@ internal abstract class MapLogic
|
||||
File.Move(filePath.FullName, checkFile);
|
||||
fileHolder = IFileHolder.Get(checkFile);
|
||||
filePath = FilePath.Get(propertyConfiguration, fileHolder, index: null);
|
||||
results[i] = new(results[i].PersonKey, results[i].PersonKeyFormatted, results[i].PersonDisplayDirectoryName, results[i].DirectoryNumber, filePath);
|
||||
results[i] = new(PersonKey: results[i].PersonKey,
|
||||
PersonKeyFormatted: results[i].PersonKeyFormatted,
|
||||
PersonDisplayDirectoryName: results[i].PersonDisplayDirectoryName,
|
||||
DirectoryNumber: results[i].DirectoryNumber,
|
||||
FilePath: filePath);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
@ -791,6 +807,7 @@ internal abstract class MapLogic
|
||||
int? wholePercentages;
|
||||
List<int> wholePercentagesCollection;
|
||||
Dictionary<int, List<int>> idToWholePercentagesCollection = [];
|
||||
PersonKeyFormattedIdThenWholePercentages personKeyFormattedIdThenWholePercentages;
|
||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||
string message = $") {records.Count:000} join from ticks Director(ies) - C - {totalSeconds} total second(s)";
|
||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||
@ -808,7 +825,14 @@ internal abstract class MapLogic
|
||||
wholePercentagesCollection = idToWholePercentagesCollection[record.MappedFaceFilePath.Id.Value];
|
||||
wholePercentagesCollection.Add(wholePercentages.Value);
|
||||
idToWholePercentagesCollection[record.MappedFaceFilePath.Id.Value].Add(wholePercentages.Value);
|
||||
results.Add(new(record.PersonKeyFormatted, record.PersonDisplayDirectoryName, record.IsDefault, record.LinksCount, record.MappedFaceFilePath, record.MappedFaceFilePath.Id.Value, wholePercentages.Value));
|
||||
personKeyFormattedIdThenWholePercentages = new(PersonKeyFormatted: record.PersonKeyFormatted,
|
||||
PersonDisplayDirectoryName: record.PersonDisplayDirectoryName,
|
||||
IsDefault: record.IsDefault,
|
||||
LinksCount: record.LinksCount,
|
||||
MappedFaceFilePath: record.MappedFaceFilePath,
|
||||
Id: record.MappedFaceFilePath.Id.Value,
|
||||
WholePercentages: wholePercentages.Value);
|
||||
results.Add(personKeyFormattedIdThenWholePercentages);
|
||||
}
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
Reference in New Issue
Block a user