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");
}
- }
+ }
}