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)