diff --git a/AaxDecrypter/AaxcDownloadConverter.cs b/AaxDecrypter/AaxcDownloadConverter.cs index ed986bbd..9c97aaab 100644 --- a/AaxDecrypter/AaxcDownloadConverter.cs +++ b/AaxDecrypter/AaxcDownloadConverter.cs @@ -52,6 +52,7 @@ namespace AaxDecrypter private StepSequence steps { get; } private DownloadLicense downloadLicense { get; set; } private FFMpegAaxcProcesser aaxcProcesser; + private bool isCanceled { get; set; } public static AaxcDownloadConverter Create(string outDirectory, DownloadLicense dlLic, ChapterInfo chapters = null) { @@ -81,6 +82,9 @@ namespace AaxDecrypter ["Step 6: Create Nfo"] = Step6_CreateNfo, }; + aaxcProcesser = new FFMpegAaxcProcesser(dlLic); + aaxcProcesser.ProgressUpdate += AaxcProcesser_ProgressUpdate; + downloadLicense = dlLic; this.chapters = chapters; } @@ -123,7 +127,7 @@ namespace AaxDecrypter ProcessRunner.WorkingDir = outDir; Directory.CreateDirectory(outDir); - return true; + return !isCanceled; } public bool Step2_GetMetadata() @@ -143,14 +147,11 @@ namespace AaxDecrypter RetrievedTags?.Invoke(this, aaxcTagLib); RetrievedCoverArt?.Invoke(this, coverArt); - return true; + return !isCanceled; } public bool Step3_DownloadAndCombine() { - aaxcProcesser = new FFMpegAaxcProcesser(downloadLicense); - aaxcProcesser.ProgressUpdate += AaxcProcesser_ProgressUpdate; - bool userSuppliedChapters = chapters != null; string metadataPath = null; @@ -177,7 +178,7 @@ namespace AaxDecrypter DecryptProgressUpdate?.Invoke(this, 0); - return aaxcProcesser.Succeeded; + return aaxcProcesser.Succeeded && !isCanceled; } private void AaxcProcesser_ProgressUpdate(object sender, AaxcProcessUpdate e) @@ -208,24 +209,25 @@ namespace AaxDecrypter outFile.Save(); - return true; + return !isCanceled; } public bool Step5_CreateCue() { File.WriteAllText(PathLib.ReplaceExtension(outputFileName, ".cue"), Cue.CreateContents(Path.GetFileName(outputFileName), chapters)); - return true; + return !isCanceled; } public bool Step6_CreateNfo() { File.WriteAllText(PathLib.ReplaceExtension(outputFileName, ".nfo"), NFO.CreateContents(AppName, aaxcTagLib, chapters)); - return true; + return !isCanceled; } public void Cancel() { - aaxcProcesser?.Cancel(); + isCanceled = true; + aaxcProcesser.Cancel(); } } } diff --git a/AaxDecrypter/FFMpegAaxcProcesser.cs b/AaxDecrypter/FFMpegAaxcProcesser.cs index 6c144a3f..8e20a8cb 100644 --- a/AaxDecrypter/FFMpegAaxcProcesser.cs +++ b/AaxDecrypter/FFMpegAaxcProcesser.cs @@ -39,6 +39,7 @@ namespace AaxDecrypter private static Regex processedTimeRegex = new Regex("time=(\\d{2}):(\\d{2}):(\\d{2}).\\d{2}.*speed=\\s{0,1}([0-9]*[.]?[0-9]+)(?:e\\+([0-9]+)){0,1}", RegexOptions.IgnoreCase | RegexOptions.Compiled); private Process downloader; private Process remuxer; + private bool isCanceled = false; public FFMpegAaxcProcesser( DownloadLicense downloadLicense) { @@ -72,6 +73,9 @@ namespace AaxDecrypter remuxer.Start(); remuxer.BeginErrorReadLine(); + //Thic check needs to be placed after remuxer has started + if (isCanceled) return; + var pipedOutput = downloader.StandardOutput.BaseStream; var pipedInput = remuxer.StandardInput.BaseStream; @@ -106,8 +110,12 @@ namespace AaxDecrypter } public void Cancel() { + isCanceled = true; + if (IsRunning && !remuxer.HasExited) remuxer.Kill(); + if (IsRunning && !downloader.HasExited) + downloader.Kill(); } private void Downloader_ErrorDataReceived(object sender, DataReceivedEventArgs e) {