Improved cancellation routine.

This commit is contained in:
Michael Bucari-Tovo 2021-06-30 18:33:32 -06:00
parent 0c26c34bdd
commit 1ee6f3b9f2
2 changed files with 20 additions and 10 deletions

View File

@ -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();
}
}
}

View File

@ -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)
{