Filter same id
RelationLogic LookForAbandoned
This commit is contained in:
@ -841,37 +841,6 @@ internal abstract class MapLogic
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static void LookForAbandoned(List<int> distinctFilteredIds, string directory, string directoryName)
|
||||
{
|
||||
string fileNameWithoutExtension;
|
||||
bool nameWithoutExtensionIsIdFormat;
|
||||
List<string> renameCollection = new();
|
||||
bool nameWithoutExtensionIsPaddedIdFormat;
|
||||
int sortOrderOnlyLengthIndex = IDirectory.GetSortOrderOnlyLengthIndex();
|
||||
string[] distinctFilteredIdsValues = distinctFilteredIds.Select(l => l.ToString()).ToArray();
|
||||
string[] files = Directory.GetFiles(directory, "*", SearchOption.AllDirectories);
|
||||
foreach (string file in files)
|
||||
{
|
||||
fileNameWithoutExtension = Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(file)));
|
||||
nameWithoutExtensionIsIdFormat = IProperty.NameWithoutExtensionIsIdFormat(fileNameWithoutExtension);
|
||||
nameWithoutExtensionIsPaddedIdFormat = IDirectory.NameWithoutExtensionIsPaddedIdFormat(fileNameWithoutExtension, sortOrderOnlyLengthIndex);
|
||||
if (!nameWithoutExtensionIsIdFormat && !nameWithoutExtensionIsPaddedIdFormat)
|
||||
continue;
|
||||
if (distinctFilteredIdsValues.Contains(fileNameWithoutExtension))
|
||||
continue;
|
||||
renameCollection.Add(file);
|
||||
}
|
||||
if (renameCollection.Count > 0)
|
||||
{
|
||||
if (directoryName.Length == 2)
|
||||
IDirectory.MoveFiles(renameCollection, directoryName, $"{directoryName[0]}abd{directoryName[^1]}");
|
||||
else if (directoryName.Length == 4)
|
||||
IDirectory.MoveFiles(renameCollection, directoryName, $"{directoryName[..2]}abd{directoryName[^2..]}");
|
||||
else
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Record> GetRecords(Configuration configuration, bool? isDefault, string[] files, int directoryNumber, string personKeyFormatted, List<string> distinct, string? personDisplayDirectoryName)
|
||||
{
|
||||
List<Record> results = new();
|
||||
@ -1652,18 +1621,6 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
internal static void LookForAbandoned(string bResultsFullGroupDirectory, List<int> distinctFilteredIds)
|
||||
{
|
||||
string[] directories = Directory.GetDirectories(bResultsFullGroupDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string directory in directories)
|
||||
{
|
||||
string? directoryName = Path.GetFileName(directory);
|
||||
if (string.IsNullOrEmpty(directoryName) || (directoryName.Length != 2 && directoryName.Length != 4))
|
||||
continue;
|
||||
LookForAbandoned(distinctFilteredIds, directory, directoryName);
|
||||
}
|
||||
}
|
||||
|
||||
internal static ReadOnlyDictionary<int, List<int>> ConvertSkip(Dictionary<int, List<(string, int)>> skipCollection)
|
||||
{
|
||||
Dictionary<int, List<int>> results = new();
|
||||
@ -1712,168 +1669,6 @@ internal abstract class MapLogic
|
||||
return new(results);
|
||||
}
|
||||
|
||||
internal static string GetDecade(MappingFromItem mappingFromItem)
|
||||
{
|
||||
string result;
|
||||
string year;
|
||||
if (mappingFromItem.DateTimeOriginal is null)
|
||||
{
|
||||
year = mappingFromItem.MinimumDateTime.Year.ToString();
|
||||
result = year[3] > '4' ? $"#{year[..3]}+" : $"#{year[..3]}-";
|
||||
}
|
||||
else
|
||||
{
|
||||
year = mappingFromItem.DateTimeOriginal.Value.Year.ToString();
|
||||
result = year[3] > '4' ? $"^{year[..3]}+" : $"^{year[..3]}-";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static void SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, MappingFromItem mappingFromItem, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
{
|
||||
DateTime dateTime;
|
||||
FileInfo fileInfo;
|
||||
string halfDecade;
|
||||
string checkDirectory;
|
||||
string? yearDirectory;
|
||||
string yearDirectoryName;
|
||||
string? personNameDirectory;
|
||||
string personNameDirectoryName;
|
||||
string? personKeyFormattedDirectory;
|
||||
string? personKeyFormattedDirectoryName;
|
||||
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
|
||||
{
|
||||
fileInfo = new(locationContainer.File);
|
||||
if (!fileInfo.Exists)
|
||||
continue;
|
||||
dateTime = mappingFromItem.DateTimeOriginal is null ? mappingFromItem.MinimumDateTime : mappingFromItem.DateTimeOriginal.Value;
|
||||
if (fileInfo.CreationTime != dateTime)
|
||||
File.SetCreationTime(locationContainer.File, dateTime);
|
||||
if (!moveToDecade)
|
||||
continue;
|
||||
personNameDirectory = Path.GetDirectoryName(locationContainer.File);
|
||||
if (string.IsNullOrEmpty(personNameDirectory))
|
||||
continue;
|
||||
personNameDirectoryName = Path.GetFileName(personNameDirectory);
|
||||
yearDirectory = Path.GetDirectoryName(personNameDirectory);
|
||||
if (string.IsNullOrEmpty(yearDirectory))
|
||||
continue;
|
||||
yearDirectoryName = Path.GetFileName(yearDirectory);
|
||||
personKeyFormattedDirectory = Path.GetDirectoryName(yearDirectory);
|
||||
if (string.IsNullOrEmpty(personKeyFormattedDirectory))
|
||||
continue;
|
||||
personKeyFormattedDirectoryName = Path.GetFileName(personKeyFormattedDirectory);
|
||||
if (personKeyFormattedDirectoryName.Length != propertyConfiguration.PersonBirthdayFormat.Length)
|
||||
break;
|
||||
halfDecade = GetDecade(mappingFromItem);
|
||||
if (halfDecade == yearDirectoryName)
|
||||
continue;
|
||||
checkDirectory = Path.Combine(personKeyFormattedDirectory, halfDecade, personNameDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
File.Move(locationContainer.File, Path.Combine(checkDirectory, Path.GetFileName(locationContainer.File)));
|
||||
}
|
||||
}
|
||||
|
||||
private static ReadOnlyCollection<ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>>> GetCollections(List<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
{
|
||||
List<ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>>> results = new();
|
||||
List<LocationContainer<MetadataExtractor.Directory>>? collection;
|
||||
Dictionary<long, List<LocationContainer<MetadataExtractor.Directory>>> keyValuePairs = new();
|
||||
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
|
||||
{
|
||||
if (!locationContainer.FromDistanceContent)
|
||||
continue;
|
||||
if (!keyValuePairs.TryGetValue(locationContainer.PersonKey, out collection))
|
||||
{
|
||||
keyValuePairs.Add(locationContainer.PersonKey, new());
|
||||
if (!keyValuePairs.TryGetValue(locationContainer.PersonKey, out collection))
|
||||
throw new Exception();
|
||||
}
|
||||
collection.Add(locationContainer);
|
||||
}
|
||||
foreach (KeyValuePair<long, List<LocationContainer<MetadataExtractor.Directory>>> keyValuePair in keyValuePairs)
|
||||
results.Add(new(keyValuePair.Value));
|
||||
return new(results);
|
||||
}
|
||||
|
||||
private static string? GetDisplayDirectoryName(ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, long personKey, string personKeyFormatted)
|
||||
{
|
||||
string? result;
|
||||
PersonContainer? personContainer;
|
||||
List<PersonContainer>? collection;
|
||||
_ = readOnlyPersonKeyToPersonContainerCollection.TryGetValue(personKey, out collection);
|
||||
if (collection is not null)
|
||||
result = collection[0].DisplayDirectoryName;
|
||||
else
|
||||
{
|
||||
if (!readOnlyPersonKeyFormattedToPersonContainer.TryGetValue(personKeyFormatted, out personContainer))
|
||||
result = null;
|
||||
else
|
||||
result = personContainer.DisplayDirectoryName;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void AddDisplayDirectoryNames(Configuration configuration, string eDistanceContentDirectory, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection, ReadOnlyCollection<ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>>> collections)
|
||||
{
|
||||
bool isCounterPersonYear;
|
||||
string personKeyFormatted;
|
||||
string? displayDirectoryName;
|
||||
string? checkDirectory = Path.Combine(eDistanceContentDirectory, configuration.LocationContainerDebugDirectory);
|
||||
_ = IPath.DeleteEmptyDirectories(checkDirectory);
|
||||
foreach (ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> collection in collections)
|
||||
{
|
||||
if (configuration.LocationContainerDistanceTolerance is null)
|
||||
break;
|
||||
isCounterPersonYear = IPersonBirthday.IsCounterPersonYear(new DateTime(collection[0].PersonKey).Year);
|
||||
if (isCounterPersonYear)
|
||||
continue;
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, collection[0].PersonKey);
|
||||
checkDirectory = Path.Combine(eDistanceContentDirectory, configuration.LocationContainerDebugDirectory, personKeyFormatted);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
continue;
|
||||
displayDirectoryName = GetDisplayDirectoryName(readOnlyPersonKeyToPersonContainerCollection, readOnlyPersonKeyFormattedToPersonContainer, collection[0].PersonKey, personKeyFormatted);
|
||||
if (string.IsNullOrEmpty(displayDirectoryName))
|
||||
continue;
|
||||
foreach (string yearDirectory in Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly))
|
||||
{
|
||||
checkDirectory = Path.Combine(yearDirectory, displayDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
checkDirectory = Path.Combine(eDistanceContentDirectory, configuration.LocationContainerDebugDirectory, personKeyFormatted, displayDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
internal static void SaveMappedRelations(Configuration configuration, Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, string a2PeopleContentDirectory, string eDistanceContentDirectory, long ticks, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection)
|
||||
{
|
||||
bool isCounterPersonYear;
|
||||
string personKeyFormatted;
|
||||
string? displayDirectoryName;
|
||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||
string message = $") Save Mapped Relations - {totalSeconds} total second(s)";
|
||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||
ReadOnlyCollection<ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>>> collections = GetCollections(locationContainers);
|
||||
using ProgressBar progressBar = new(collections.Count, message, options);
|
||||
foreach (ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> collection in collections)
|
||||
{
|
||||
if (configuration.LocationContainerDistanceTolerance is null)
|
||||
break;
|
||||
progressBar.Tick();
|
||||
if (collection.Count == 0)
|
||||
continue;
|
||||
isCounterPersonYear = IPersonBirthday.IsCounterPersonYear(new DateTime(collection[0].PersonKey).Year);
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, collection[0].PersonKey);
|
||||
displayDirectoryName = GetDisplayDirectoryName(readOnlyPersonKeyToPersonContainerCollection, readOnlyPersonKeyFormattedToPersonContainer, collection[0].PersonKey, personKeyFormatted);
|
||||
distance.SaveMappedForOutputResolutions(configuration.LocationContainerDebugDirectory, a2PeopleContentDirectory, eDistanceContentDirectory, configuration.LocationContainerDistanceTolerance.Value, collection, collection[0].PersonKey, isCounterPersonYear, personKeyFormatted, displayDirectoryName);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(configuration.LocationContainerDebugDirectory))
|
||||
AddDisplayDirectoryNames(configuration, eDistanceContentDirectory, readOnlyPersonKeyFormattedToPersonContainer, readOnlyPersonKeyToPersonContainerCollection, collections);
|
||||
}
|
||||
|
||||
internal static bool? CanReMap(long[] jLinkResolvedPersonKeys, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers, MappingFromLocation mappingFromLocation)
|
||||
{
|
||||
bool? result;
|
||||
|
Reference in New Issue
Block a user