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, DateOnly? dateOnly) { string result; string year; if (mappingFromItem is null && dateOnly is null) throw new NotSupportedException(); if (dateOnly is not null) { year = dateOnly.Value.Year.ToString(); result = year[3] > '4' ? $"#{year[..3]}+" : $"#{year[..3]}-"; } else if (mappingFromItem is null) throw new NotSupportedException(); else 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 SetCreationTime(MappingFromItem mappingFromItem, ReadOnlyCollection locationContainers) { DateTime dateTime; foreach (LocationContainer locationContainer in locationContainers) { dateTime = mappingFromItem.DateTimeOriginal is null ? mappingFromItem.MinimumDateTime : mappingFromItem.DateTimeOriginal.Value; if (locationContainer.CreationDateOnly.Year != dateTime.Year || locationContainer.CreationDateOnly.Month != dateTime.Month || locationContainer.CreationDateOnly.Day != dateTime.Day) { if (!File.Exists(locationContainer.FilePath.FullName)) continue; File.SetCreationTime(locationContainer.FilePath.FullName, dateTime); } } } internal static void MoveToDecade(Property.Models.Configuration propertyConfiguration, MappingFromItem mappingFromItem, ReadOnlyCollection locationContainers) { string halfDecade; string checkDirectory; string? yearDirectory; string yearDirectoryName; string personNameDirectoryName; string? personKeyFormattedDirectory; string? personKeyFormattedDirectoryName; foreach (LocationContainer locationContainer in locationContainers) { if (string.IsNullOrEmpty(locationContainer.FilePath.DirectoryName)) continue; personNameDirectoryName = Path.GetFileName(locationContainer.FilePath.DirectoryName); yearDirectory = Path.GetDirectoryName(locationContainer.FilePath.DirectoryName); 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, null); if (halfDecade == yearDirectoryName) continue; checkDirectory = Path.Combine(personKeyFormattedDirectory, halfDecade, personNameDirectoryName); if (!File.Exists(locationContainer.FilePath.FullName)) continue; if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); File.Move(locationContainer.FilePath.FullName, Path.Combine(checkDirectory, locationContainer.FilePath.Name)); } } }