Shared.Models.Properties.IMetadataConfiguration
This commit is contained in:
@ -25,19 +25,21 @@ public class Rename
|
||||
if (console is null)
|
||||
throw new NullReferenceException(nameof(console));
|
||||
_AppSettings = appSettings;
|
||||
long ticks = DateTime.Now.Ticks;
|
||||
_ConfigurationRoot = configurationRoot;
|
||||
MetadataConfiguration metadataConfiguration = Metadata.Models.Binder.Configuration.Get(configurationRoot);
|
||||
Configuration configuration = Models.Binder.Configuration.Get(configurationRoot, metadataConfiguration);
|
||||
_MetadataConfiguration = metadataConfiguration;
|
||||
_Configuration = configuration;
|
||||
logger?.LogInformation("{RootDirectory}", metadataConfiguration.RootDirectory);
|
||||
DirectoryInfo directoryInfo = new(Path.GetFullPath(metadataConfiguration.RootDirectory));
|
||||
logger?.LogInformation("{RootDirectory}", directoryInfo.FullName);
|
||||
MetadataConfiguration.Verify(metadataConfiguration, requireExist: false);
|
||||
Verify();
|
||||
List<string> linesB = RenameFilesInDirectories(logger);
|
||||
List<string> linesB = RenameFilesInDirectories(logger, ticks, directoryInfo);
|
||||
if (linesB.Count != 0)
|
||||
{
|
||||
File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", linesB);
|
||||
_ = IPath.DeleteEmptyDirectories(metadataConfiguration.RootDirectory);
|
||||
_ = IPath.DeleteEmptyDirectories(directoryInfo.FullName);
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,18 +55,70 @@ public class Rename
|
||||
throw new NullReferenceException(nameof(_MetadataConfiguration));
|
||||
}
|
||||
|
||||
private List<string> RenameFilesInDirectories(ILogger? logger)
|
||||
private bool GetRunToDoCollectionFirst(long ticks, DirectoryInfo directoryInfo)
|
||||
{
|
||||
bool result = false;
|
||||
string[] directories;
|
||||
string seasonDirectory;
|
||||
DateTime dateTime = new(ticks);
|
||||
(int season, string seasonName) = IDate.GetSeason(dateTime.DayOfYear);
|
||||
string eDistanceContentDirectory = IResult.GetResultsDateGroupDirectory(_MetadataConfiguration, nameof(A_Metadata), _MetadataConfiguration.ResultContent);
|
||||
FileSystemInfo fileSystemInfo = new DirectoryInfo(eDistanceContentDirectory);
|
||||
string[] checkDirectories =
|
||||
[
|
||||
Path.Combine(directoryInfo.FullName, "Ancestry"),
|
||||
Path.Combine(directoryInfo.FullName, "Facebook"),
|
||||
Path.Combine(directoryInfo.FullName, "LinkedIn"),
|
||||
directoryInfo.FullName,
|
||||
];
|
||||
foreach (string checkDirectory in checkDirectories)
|
||||
{
|
||||
if (checkDirectory == directoryInfo.FullName)
|
||||
seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName}");
|
||||
else
|
||||
seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName} {Path.GetFileName(checkDirectory)}");
|
||||
if (!Directory.Exists(seasonDirectory))
|
||||
_ = Directory.CreateDirectory(seasonDirectory);
|
||||
if (result)
|
||||
continue;
|
||||
directories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string directory in directories)
|
||||
{
|
||||
if (new DirectoryInfo(directory).LastWriteTime > fileSystemInfo.LastWriteTime)
|
||||
{
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<string> RenameFilesInDirectories(ILogger? logger, long ticks, DirectoryInfo directoryInfo)
|
||||
{
|
||||
List<string> old = [];
|
||||
List<ExifDirectory> exifDirectories = [];
|
||||
string rootDirectoryFullPath = Path.GetFullPath(_MetadataConfiguration.RootDirectory);
|
||||
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism };
|
||||
IEnumerable<string> files = Directory.EnumerateFiles(rootDirectoryFullPath, "*", SearchOption.AllDirectories);
|
||||
bool runToDoCollectionFirst = GetRunToDoCollectionFirst(ticks, directoryInfo);
|
||||
IEnumerable<string> files = Directory.EnumerateFiles(directoryInfo.FullName, "*", SearchOption.AllDirectories);
|
||||
A_Metadata metadata = new(_MetadataConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata);
|
||||
ProgressBar progressBar = new(123000, "EnumerateFiles load", new ProgressBarOptions() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true });
|
||||
files.AsParallel().ForAll(A_Metadata.GetResultCollection(metadata, exifDirectories, () => progressBar.Tick()));
|
||||
if (progressBar.CurrentTick != exifDirectories.Count)
|
||||
throw new NotSupportedException();
|
||||
if (runToDoCollectionFirst)
|
||||
{
|
||||
foreach (string file in files)
|
||||
{
|
||||
NameWithoutExtension nameWithoutExtension = IId.GetNameWithoutExtension(_MetadataConfiguration, file);
|
||||
exifDirectories.Add(metadata.GetMetadataCollection(_MetadataConfiguration, file, nameWithoutExtension));
|
||||
if (nameWithoutExtension.Id is null || (!nameWithoutExtension.IsIdFormat && !nameWithoutExtension.IsPaddedIdFormat))
|
||||
;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism };
|
||||
ProgressBar progressBar = new(123000, "EnumerateFiles load", new ProgressBarOptions() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true });
|
||||
files.AsParallel().ForAll(A_Metadata.GetResultCollection(_MetadataConfiguration, metadata, exifDirectories, () => progressBar.Tick()));
|
||||
if (progressBar.CurrentTick != exifDirectories.Count)
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
return old;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user