using System.Collections.ObjectModel; using View_by_Distance.Shared.Models; namespace View_by_Distance.Map.Models.Stateless; internal abstract class DecadeLogic { 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> locationContainers) { DateTime dateTime; FileInfo fileInfo; string halfDecade; string checkDirectory; string? yearDirectory; string yearDirectoryName; string? personNameDirectory; string personNameDirectoryName; string? personKeyFormattedDirectory; string? personKeyFormattedDirectoryName; foreach (LocationContainer 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))); } } }