diff --git a/Source/AaxDecrypter/AaxDecrypter.csproj b/Source/AaxDecrypter/AaxDecrypter.csproj
index 4236ee60..aea11238 100644
--- a/Source/AaxDecrypter/AaxDecrypter.csproj
+++ b/Source/AaxDecrypter/AaxDecrypter.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/Source/AaxDecrypter/AaxcDownloadMultiConverter.cs b/Source/AaxDecrypter/AaxcDownloadMultiConverter.cs
index 4504a50c..d5a03d0e 100644
--- a/Source/AaxDecrypter/AaxcDownloadMultiConverter.cs
+++ b/Source/AaxDecrypter/AaxcDownloadMultiConverter.cs
@@ -13,6 +13,7 @@ namespace AaxDecrypter
{
private static TimeSpan minChapterLength { get; } = TimeSpan.FromSeconds(3);
private List multiPartFilePaths { get; } = new List();
+ private FileStream workingFileStream;
public AaxcDownloadMultiConverter(string outFileName, string cacheDirectory, IDownloadOptions dlOptions)
: base(outFileName, cacheDirectory, dlOptions) { }
@@ -130,18 +131,31 @@ That naming may not be desirable for everyone, but it's an easy change to instea
// reset, just in case
multiPartFilePaths.Clear();
- ConversionResult result;
+ try
+ {
+ ConversionResult result;
- AaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate;
- if (DownloadOptions.OutputFormat == OutputFormat.M4b)
- result = await ConvertToMultiMp4a(splitChapters);
- else
- result = await ConvertToMultiMp3(splitChapters);
- AaxFile.ConversionProgressUpdate -= AaxFile_ConversionProgressUpdate;
+ AaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate;
+ if (DownloadOptions.OutputFormat == OutputFormat.M4b)
+ result = await ConvertToMultiMp4a(splitChapters);
+ else
+ result = await ConvertToMultiMp3(splitChapters);
- Step_DownloadAudiobook_End(zeroProgress);
+ return result == ConversionResult.NoErrorsDetected;
+ }
+ catch(Exception ex)
+ {
+ Serilog.Log.Error(ex, "AAXClean Error");
+ workingFileStream?.Close();
+ FileUtility.SaferDelete(workingFileStream.Name);
+ return false;
+ }
+ finally
+ {
+ AaxFile.ConversionProgressUpdate -= AaxFile_ConversionProgressUpdate;
- return result == ConversionResult.NoErrorsDetected;
+ Step_DownloadAudiobook_End(zeroProgress);
+ }
}
private Task ConvertToMultiMp4a(ChapterInfo splitChapters)
@@ -195,9 +209,9 @@ That naming may not be desirable for everyone, but it's an easy change to instea
FileUtility.SaferDelete(fileName);
- var file = File.Open(fileName, FileMode.OpenOrCreate);
+ workingFileStream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
OnFileCreated(fileName);
- return file;
+ return workingFileStream;
}
}
}
diff --git a/Source/AaxDecrypter/AaxcDownloadSingleConverter.cs b/Source/AaxDecrypter/AaxcDownloadSingleConverter.cs
index 04188885..288c06af 100644
--- a/Source/AaxDecrypter/AaxcDownloadSingleConverter.cs
+++ b/Source/AaxDecrypter/AaxcDownloadSingleConverter.cs
@@ -92,17 +92,28 @@ namespace AaxDecrypter
AaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate;
- ConversionResult decryptionResult = await decryptAsync(outputFile);
+ try
+ {
+ ConversionResult decryptionResult = await decryptAsync(outputFile);
+ var success = decryptionResult == ConversionResult.NoErrorsDetected && !IsCanceled;
+ if (success)
+ base.OnFileCreated(OutputFileName);
- AaxFile.ConversionProgressUpdate -= AaxFile_ConversionProgressUpdate;
+ return success;
+ }
+ catch(Exception ex)
+ {
+ Serilog.Log.Error(ex, "AAXClean Error");
+ FileUtility.SaferDelete(OutputFileName);
+ return false;
+ }
+ finally
+ {
+ outputFile.Close();
+ AaxFile.ConversionProgressUpdate -= AaxFile_ConversionProgressUpdate;
- Step_DownloadAudiobook_End(zeroProgress);
-
- var success = decryptionResult == ConversionResult.NoErrorsDetected && !IsCanceled;
- if (success)
- base.OnFileCreated(OutputFileName);
-
- return success;
+ Step_DownloadAudiobook_End(zeroProgress);
+ }
}
private Task decryptAsync(Stream outputFile)
diff --git a/Source/FileLiberator/ConvertToMp3.cs b/Source/FileLiberator/ConvertToMp3.cs
index 94744596..5ec07045 100644
--- a/Source/FileLiberator/ConvertToMp3.cs
+++ b/Source/FileLiberator/ConvertToMp3.cs
@@ -64,30 +64,40 @@ namespace FileLiberator
config.LameMatchSourceBR);
using var mp3File = File.OpenWrite(Path.GetTempFileName());
- var result = await m4bBook.ConvertToMp3Async(mp3File, lameConfig);
- m4bBook.InputStream.Close();
- mp3File.Close();
-
- if (result == ConversionResult.Failed)
+ try
{
- FileUtility.SaferDelete(mp3File.Name);
+ var result = await m4bBook.ConvertToMp3Async(mp3File, lameConfig);
+
+ var realMp3Path = FileUtility.SaferMoveToValidPath(mp3File.Name, proposedMp3Path, Configuration.Instance.ReplacementCharacters);
+ OnFileCreated(libraryBook, realMp3Path);
+
+ if (result == ConversionResult.Failed)
+ {
+ FileUtility.SaferDelete(mp3File.Name);
+ }
+ else if (result == ConversionResult.Cancelled)
+ {
+ FileUtility.SaferDelete(mp3File.Name);
+ return new StatusHandler { "Cancelled" };
+ }
+ }
+ catch (Exception ex)
+ {
+ Serilog.Log.Error(ex, "AAXClean error");
return new StatusHandler { "Conversion failed" };
}
- else if (result == ConversionResult.Cancelled)
+ finally
{
- FileUtility.SaferDelete(mp3File.Name);
- return new StatusHandler { "Cancelled" };
+ m4bBook.InputStream.Close();
+ mp3File.Close();
}
-
- var realMp3Path = FileUtility.SaferMoveToValidPath(mp3File.Name, proposedMp3Path, Configuration.Instance.ReplacementCharacters);
- OnFileCreated(libraryBook, realMp3Path);
}
- return new StatusHandler();
}
finally
{
OnCompleted(libraryBook);
}
+ return new StatusHandler();
}
private void M4bBook_ConversionProgressUpdate(object sender, ConversionProgressEventArgs e)