79 lines
3.6 KiB
C#
79 lines
3.6 KiB
C#
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 SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, MappingFromItem mappingFromItem, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
|
{
|
|
DateTime dateTime;
|
|
string halfDecade;
|
|
string checkDirectory;
|
|
string? yearDirectory;
|
|
string yearDirectoryName;
|
|
string? personNameDirectory;
|
|
string personNameDirectoryName;
|
|
string? personKeyFormattedDirectory;
|
|
string? personKeyFormattedDirectoryName;
|
|
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
|
|
{
|
|
if (!File.Exists(locationContainer.File))
|
|
continue;
|
|
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)
|
|
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, null);
|
|
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)));
|
|
}
|
|
}
|
|
|
|
} |