diff --git a/Rename/Models/AppSettings.cs b/Rename/Models/AppSettings.cs index 1fc5784..bb90b9e 100644 --- a/Rename/Models/AppSettings.cs +++ b/Rename/Models/AppSettings.cs @@ -7,25 +7,28 @@ public class AppSettings { public string Company { init; get; } - public string CopyTo { init; get; } public string ComparePathsFile { init; get; } + public string CopyTo { init; get; } public int MaxDegreeOfParallelism { init; get; } public int MaxMinutesDelta { init; get; } + public bool RenameUndo { init; get; } public string WorkingDirectoryName { init; get; } [JsonConstructor] public AppSettings(string company, - string copyTo, string comparePathsFile, + string copyTo, int maxDegreeOfParallelism, int maxMinutesDelta, + bool renameUndo, string workingDirectoryName) { Company = company; - CopyTo = copyTo; ComparePathsFile = comparePathsFile; + CopyTo = copyTo; MaxDegreeOfParallelism = maxDegreeOfParallelism; MaxMinutesDelta = maxMinutesDelta; + RenameUndo = renameUndo; WorkingDirectoryName = workingDirectoryName; } diff --git a/Rename/Models/Binder/AppSettings.cs b/Rename/Models/Binder/AppSettings.cs index 3a7d89c..a56acd2 100644 --- a/Rename/Models/Binder/AppSettings.cs +++ b/Rename/Models/Binder/AppSettings.cs @@ -9,10 +9,11 @@ public class AppSettings #nullable disable public string Company { get; set; } - public string CopyTo { get; set; } public string ComparePathsFile { get; set; } + public string CopyTo { get; set; } public int? MaxDegreeOfParallelism { get; set; } public int? MaxMinutesDelta { get; set; } + public bool? RenameUndo { get; set; } public string WorkingDirectoryName { get; set; } #nullable restore @@ -30,12 +31,15 @@ public class AppSettings throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); if (appSettings?.MaxMinutesDelta is null) throw new NullReferenceException(nameof(appSettings.MaxMinutesDelta)); + if (appSettings?.RenameUndo is null) + throw new NullReferenceException(nameof(appSettings.RenameUndo)); result = new( appSettings.Company, - appSettings.CopyTo, appSettings.ComparePathsFile, + appSettings.CopyTo, appSettings.MaxDegreeOfParallelism.Value, appSettings.MaxMinutesDelta.Value, + appSettings.RenameUndo.Value, appSettings.WorkingDirectoryName ); return result; diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 3571f45..b156948 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -92,6 +92,27 @@ public class Rename } } + private static List<(FileHolder, string)> GetRenameUndoToDoCollection(ProgressBar progressBar, string[] files) + { + List<(FileHolder, string)> results = new(); + string[] lines; + string fileName; + FileHolder fileHolder; + foreach (string file in files) + { + progressBar.Tick(); + fileName = Path.GetFileName(file); + if (!fileName.EndsWith(".id")) + continue; + lines = File.ReadAllLines(file); + if (lines.Length < 2) + continue; + fileHolder = new(lines[0]); + results.Add(new(fileHolder, lines[1])); + } + return results; + } + private List<(FileHolder, string)> GetToDoCollection(ProgressBar progressBar, string[] files) { List<(FileHolder, string)> results = new(); @@ -346,12 +367,17 @@ public class Rename for (int i = 1; i < 3; i++) { message = $"{i}) Renaming files"; + if (_AppSettings.RenameUndo && i == 1) + continue; files = i == 2 ? allFiles.ToArray() : (from l in allFiles where l.Contains("Rename") select l).ToArray(); progressBar = new(files.Length, message, options); if (!files.Any()) continue; distinctCollection.Clear(); - toDoCollection = GetToDoCollection(progressBar, files); + if (!_AppSettings.RenameUndo) + toDoCollection = GetToDoCollection(progressBar, files); + else + toDoCollection = GetRenameUndoToDoCollection(progressBar, files); foreach ((FileHolder fileHolder, string to) in toDoCollection) { if (distinctCollection.Contains(to))