This commit is contained in:
Mike Phares 2023-01-17 18:18:11 -07:00
parent c5986b5cba
commit 9dd218a5f2
6 changed files with 69 additions and 28 deletions

View File

@ -1,5 +1,5 @@
{
"CompareRootDirectory": "D:/7) Question/- - - Images",
"CompareRootDirectory": "D:/7) Question/- - - Images - 2023-01-12/fa60aa45ebb55fe3ee0ce4da8a64e40611e7d5ce",
"Logging": {
"LogLevel": {
"Log4netProvider": "Debug"
@ -15,9 +15,10 @@
"Configuration": {
"xRootDirectory": "D:/2) Images B/Corrupt",
"xxRootDirectory": "D:/2) Images B/Not-Copy-Copy-45f4401",
"RootDirectory": "D:/1) Images A/Images-45f4401",
"xxxRootDirectory": "D:/1) Images A/Images-45f4401",
"xxxxRootDirectory": "E:/3) Videos A/Device Videos 2_0_0_3 - Current",
"xxxxxRootDirectory": "E:/4) Videos B/Device Videos 2_0_0_3 - Current - Ignore",
"RootDirectory": "C:/1) Images A/Images-45f4401",
"VerifyToSeason": []
}
}

View File

@ -7,14 +7,16 @@ public class AppSettings
{
public string Company { init; get; }
public string CopyTo { init; get; }
public string ComparePathsFile { init; get; }
public int MaxDegreeOfParallelism { init; get; }
public string WorkingDirectoryName { init; get; }
[JsonConstructor]
public AppSettings(string company, string comparePathsFile, int maxDegreeOfParallelism, string workingDirectoryName)
public AppSettings(string company, string copyTo, string comparePathsFile, int maxDegreeOfParallelism, string workingDirectoryName)
{
Company = company;
CopyTo = copyTo;
ComparePathsFile = comparePathsFile;
MaxDegreeOfParallelism = maxDegreeOfParallelism;
WorkingDirectoryName = workingDirectoryName;

View File

@ -9,6 +9,7 @@ public class AppSettings
#nullable disable
public string Company { get; set; }
public string CopyTo { get; set; }
public string ComparePathsFile { get; set; }
public int? MaxDegreeOfParallelism { get; set; }
public string WorkingDirectoryName { get; set; }
@ -28,6 +29,7 @@ public class AppSettings
throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism));
result = new(
appSettings.Company,
appSettings.CopyTo,
appSettings.ComparePathsFile,
appSettings.MaxDegreeOfParallelism.Value,
appSettings.WorkingDirectoryName

View File

@ -92,7 +92,7 @@ public class Rename
}
}
private (List<(FileHolder, string)>, int) RenameFilesInDirectory(ProgressBar progressBar, string[] files)
private List<(FileHolder, string)> GetRenameCollection(ProgressBar progressBar, string[] files)
{
List<(FileHolder, string)> results = new();
int? id;
@ -109,27 +109,25 @@ public class Rename
const string jpeg = ".jpeg";
bool isValidImageFormatExtension;
bool nameWithoutExtensionIsIdFormat;
List<string> distinctCollection = new();
IReadOnlyList<MetadataExtractor.Directory> directories;
foreach (string file in files)
{
progressBar.Tick();
fileHolder = new(file);
// else if (file.EndsWith(".del") && !file.Contains(".jpg"))
// {
// checkFile = string.Concat(file[..^4], ".jpg");
// if (File.Exists(checkFile))
// continue;
// File.Move(file, checkFile);
// results.Add(new(fileHolder, checkFile));
// continue;
// }
if (!file.EndsWith(".jpg.del"))
fileHolder = new(file);
else
if (file.EndsWith(".jpg.del"))
{
checkFile = file[..^4];
if (File.Exists(checkFile))
continue;
File.Move(file, checkFile);
results.Add(new(fileHolder, checkFile));
continue;
}
if (fileHolder.ExtensionLowered == ".id" || fileHolder.DirectoryName is null)
@ -148,12 +146,12 @@ public class Rename
checkFile = Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}.id");
if (File.Exists(checkFile))
continue;
File.Move($"{fileHolder.FullName}.id", checkFile);
results.Add(new(new($"{fileHolder.FullName}.id"), checkFile));
}
checkFile = Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}");
if (File.Exists(checkFile))
continue;
File.Move(fileHolder.FullName, checkFile);
results.Add(new(fileHolder, checkFile));
}
if (nameWithoutExtensionIsIdFormat)
continue;
@ -178,15 +176,12 @@ public class Rename
dateTime = Metadata.Models.Stateless.Methods.IMetadata.GetMinimumDateTime(dateTimes, year, directories);
timeSpan = new TimeSpan(int.MaxValue);
}
if (dateTime is not null && timeSpan.TotalMinutes > 2)
if (dateTime is not null && string.IsNullOrEmpty(_AppSettings.CopyTo) && timeSpan.TotalMinutes > 2)
{
checkFileExtension = fileHolder.ExtensionLowered == jpeg ? jpg : fileHolder.ExtensionLowered;
checkFile = Path.Combine(fileHolder.DirectoryName, $"{dateTime.Value:yyyy-MM-dd}.{dateTime.Value.Ticks}.{fileHolder.Length}{checkFileExtension}");
if (checkFile == fileHolder.FullName)
continue;
if (distinctCollection.Contains(checkFile))
continue;
distinctCollection.Add(checkFile);
results.Add(new(fileHolder, checkFile));
continue;
}
@ -202,12 +197,9 @@ public class Rename
if (File.Exists(checkFile))
continue;
}
if (distinctCollection.Contains(checkFile))
continue;
distinctCollection.Add(checkFile);
results.Add(new(fileHolder, checkFile));
}
return new(results, distinctCollection.Count);
return results;
}
private static void Rename2000(MatchNginx[] matchNginxCollection)
@ -269,6 +261,34 @@ public class Rename
return allFiles;
}
private static void CreateDirectories(List<string> directories)
{
foreach (string directory in directories)
{
if (Directory.Exists(directory))
continue;
_ = Directory.CreateDirectory(directory);
}
}
private void CopyInstead(List<(FileHolder, string)> renameCollection)
{
string? directory;
List<string> distinctDirectories = new();
foreach ((FileHolder fileHolder, string to) in renameCollection)
{
directory = Path.GetDirectoryName($"{_AppSettings.CopyTo}{to[1..]}");
if (directory is null)
continue;
if (distinctDirectories.Contains(directory))
continue;
distinctDirectories.Add(directory);
}
CreateDirectories(distinctDirectories);
foreach ((FileHolder fileHolder, string to) in renameCollection)
File.Copy(fileHolder.FullName, $"{_AppSettings.CopyTo}{to[1..]}");
}
private List<string> RenameFilesInDirectories(ProgressBarOptions options, MatchNginx[] matchNginxCollection)
{
List<string> results = new();
@ -276,6 +296,7 @@ public class Rename
string message;
int distinctCount;
ProgressBar progressBar;
List<string> distinctCollection = new();
List<(FileHolder, string)> renameCollection;
List<string> allFiles = GetAllFiles(matchNginxCollection);
for (int i = 1; i < 3; i++)
@ -285,17 +306,30 @@ public class Rename
progressBar = new(files.Length, message, options);
if (!files.Any())
continue;
(renameCollection, distinctCount) = RenameFilesInDirectory(progressBar, files);
distinctCollection.Clear();
renameCollection = GetRenameCollection(progressBar, files);
foreach ((FileHolder fileHolder, string to) in renameCollection)
{
if (distinctCollection.Contains(to))
continue;
distinctCollection.Add(to);
}
distinctCount = distinctCollection.Count;
if (renameCollection.Count != distinctCount)
continue;
if (!string.IsNullOrEmpty(_AppSettings.CopyTo))
CopyInstead(renameCollection);
else
{
foreach ((FileHolder fileHolder, string to) in renameCollection)
{
results.Add(fileHolder.NameWithoutExtension);
if (renameCollection.Count != distinctCount)
continue;
if (File.Exists(to))
continue;
File.Move(fileHolder.FullName, to);
File.WriteAllText($"{to}.id", $"{to}{Environment.NewLine}{fileHolder.FullName}");
}
}
progressBar.Dispose();
}
return results;

View File

@ -1,5 +1,6 @@
{
"ComparePathsFile": "C:/Users/mikep/AppData/Local/PharesApps/Drag-Drop-Explorer/2023_02/638089737585839769.json",
"ComparePathsFile": "C:/Users/mikep/AppData/Local/PharesApps/Drag-Drop-Explorer/2023_03/638095753937985087.json",
"CopyTo": "C",
"Logging": {
"LogLevel": {
"Log4netProvider": "Debug"

View File

@ -107,6 +107,7 @@ internal abstract class Property
new string[] { string.Empty, "yyyyMMdd_", ticksExample },
new string[] { string.Empty, "yyyy-MM-dd_", ticksExample },
new string[] { string.Empty, "yyyy-MM-dd.", ticksExample },
new string[] { string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{fileHolder.Length}" },
new string[] { string.Empty, "yyyy-MM-dd HH.mm.ss", string.Empty },
new string[] { string.Empty, "yyyyMMdd_HHmmss", "_LLS" },
new string[] { string.Empty, "yyyyMMdd_HHmmss", "_HDR" },