diff --git a/FileLiberator/UNTESTED/DecryptBook.cs b/FileLiberator/UNTESTED/DecryptBook.cs index 94d052bb..fbf06850 100644 --- a/FileLiberator/UNTESTED/DecryptBook.cs +++ b/FileLiberator/UNTESTED/DecryptBook.cs @@ -78,11 +78,11 @@ namespace FileLiberator Dinah.Core.IO.FileExt.SafeDelete(aaxFilename); } - var statusHandler = new StatusHandler(); var finalAudioExists = AudibleFileStorage.Audio.Exists(libraryBook.Book.AudibleProductId); if (!finalAudioExists) - statusHandler.AddError("Cannot find final audio file after decryption"); - return statusHandler; + return new StatusHandler { "Cannot find final audio file after decryption" }; + + return new StatusHandler(); } finally { diff --git a/LibationLauncher/LibationLauncher.csproj b/LibationLauncher/LibationLauncher.csproj index d2a1b0f2..0d0efc5b 100644 --- a/LibationLauncher/LibationLauncher.csproj +++ b/LibationLauncher/LibationLauncher.csproj @@ -13,7 +13,7 @@ win-x64 - 4.1.7.1 + 4.1.8.1 diff --git a/LibationWinForms/UNTESTED/BookLiberation/ProcessorAutomationController.cs b/LibationWinForms/UNTESTED/BookLiberation/ProcessorAutomationController.cs index ce320a5d..1d0605f1 100644 --- a/LibationWinForms/UNTESTED/BookLiberation/ProcessorAutomationController.cs +++ b/LibationWinForms/UNTESTED/BookLiberation/ProcessorAutomationController.cs @@ -334,6 +334,10 @@ namespace LibationWinForms.BookLiberation protected abstract Task RunAsync(); + protected abstract string SkipDialogText { get; } + protected abstract MessageBoxButtons SkipDialogButtons { get; } + protected abstract DialogResult CreateSkipFileResult { get; } + public async Task RunBackupAsync() { AutomatedBackupsForm.Show(); @@ -351,46 +355,47 @@ namespace LibationWinForms.BookLiberation LogMe.Info("DONE"); } - protected abstract string SkipDialogText { get; } - protected abstract MessageBoxButtons SkipDialogButtons { get; } - protected abstract DialogResult CreateSkipFileResult { get; } - - protected bool ValidateStatusAsync(StatusHandler statusHandler, LibraryBook libraryBook) + protected async Task ProcessOneAsync(Func> func, LibraryBook libraryBook) { - if (!statusHandler.HasErrors) - return true; - - LogMe.Error("ERROR. All books have not been processed. Most recent valid book: processing failed"); - foreach (var errorMessage in statusHandler.Errors) - LogMe.Error(errorMessage); + string logMessage; try { - var dialogResult = MessageBox.Show(SkipDialogText, "Skip importing this book?", SkipDialogButtons, MessageBoxIcon.Question); + var statusHandler = await func(libraryBook); - if (dialogResult == DialogResult.Abort) - return false; + if (statusHandler.IsSuccess) + return true; - if (dialogResult == CreateSkipFileResult) - { - var path = FileManager.AudibleFileStorage.Audio.CreateSkipFile( - libraryBook.Book.Title, - libraryBook.Book.AudibleProductId, - statusHandler.Errors.Aggregate((a, b) => $"{a}\r\n{b}")); - LogMe.Info($@" -Created new skip file - [{libraryBook.Book.AudibleProductId}] {libraryBook.Book.Title} - {path} -".Trim()); - } + foreach (var errorMessage in statusHandler.Errors) + LogMe.Error(errorMessage); - return true; + logMessage = statusHandler.Errors.Aggregate((a, b) => $"{a}\r\n{b}"); } catch (Exception ex) { - LogMe.Error(ex, "Error attempting to display skip option box"); - return false; + LogMe.Error(ex); + + logMessage = ex.Message + "\r\n|\r\n" + ex.StackTrace; } + + LogMe.Error("ERROR. All books have not been processed. Most recent book: processing failed"); + + var dialogResult = MessageBox.Show(SkipDialogText, "Skip importing this book?", SkipDialogButtons, MessageBoxIcon.Question); + + if (dialogResult == DialogResult.Abort) + return false; + + if (dialogResult == CreateSkipFileResult) + { + var path = FileManager.AudibleFileStorage.Audio.CreateSkipFile(libraryBook.Book.Title, libraryBook.Book.AudibleProductId, logMessage); + LogMe.Info($@" +Created new 'skip' file + [{libraryBook.Book.AudibleProductId}] {libraryBook.Book.Title} + {path} +".Trim()); + } + + return true; } } class BackupSingle : BackupRunner @@ -415,11 +420,8 @@ An error occurred while trying to process this book. Skip this book permanently? protected override async Task RunAsync() { - if (_libraryBook is null) - return; - - var statusHandler = await Processable.ProcessSingleAsync(_libraryBook); - ValidateStatusAsync(statusHandler, _libraryBook); + if (_libraryBook is not null) + await ProcessOneAsync(Processable.ProcessSingleAsync, _libraryBook); } } class BackupLoop : BackupRunner @@ -443,29 +445,20 @@ An error occurred while trying to process this book { // support for 'skip this time only' requires state. iterators provide this state for free. therefore: use foreach/iterator here foreach (var libraryBook in Processable.GetValidLibraryBooks()) - { - try - { - var statusHandler = await Processable.ProcessBookAsync_NoValidation(libraryBook); + { + var keepGoing = await ProcessOneAsync(Processable.ProcessBookAsync_NoValidation, libraryBook); + if (!keepGoing) + return; - var keepGoing = ValidateStatusAsync(statusHandler, libraryBook); - if (!keepGoing) - return; + if (!AutomatedBackupsForm.KeepGoing) + { + if (AutomatedBackupsForm.KeepGoingVisible && !AutomatedBackupsForm.KeepGoingChecked) + LogMe.Info("'Keep going' is unchecked"); + return; + } + } - if (!AutomatedBackupsForm.KeepGoing) - { - if (AutomatedBackupsForm.KeepGoingVisible && !AutomatedBackupsForm.KeepGoingChecked) - LogMe.Info("'Keep going' is unchecked"); - return; - } - } - catch (Exception exc) - { - LogMe.Error(exc); - } - } - - LogMe.Info("Done. All books have been processed"); + LogMe.Info("Done. All books have been processed"); } - } + } }