Fixed rare bug that would cause a hang if an error occured in the download loop

This commit is contained in:
Michael Bucari-Tovo 2022-06-20 22:36:14 -06:00
parent 2c42b4c585
commit cfd2b7b7aa
2 changed files with 17 additions and 7 deletions

View File

@ -5,7 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AAXClean.Codecs" Version="0.2.9" />
<PackageReference Include="AAXClean.Codecs" Version="0.2.10" />
</ItemGroup>
<ItemGroup>

View File

@ -145,8 +145,15 @@ namespace AaxDecrypter
private void Update()
{
RequestHeaders = HttpRequest.Headers;
try
{
Updated?.Invoke(this, EventArgs.Empty);
}
catch (Exception ex)
{
Serilog.Log.Error(ex, "An error was encountered while saving the download progress to JSON");
}
}
/// <summary>
/// Set a different <see cref="System.Uri"/> to the same file targeted by this instance of <see cref="NetworkFileStream"/>
@ -245,9 +252,6 @@ namespace AaxDecrypter
WritePosition = downloadPosition;
Update();
downloadedPiece.Set();
downloadEnded.Set();
if (!IsCancelled && WritePosition < ContentLength)
throw new WebException($"Downloaded size (0x{WritePosition:X10}) is less than {nameof(ContentLength)} (0x{ContentLength:X10}).");
@ -259,6 +263,11 @@ namespace AaxDecrypter
Serilog.Log.Error(ex, "An error was encountered while downloading {Uri}", Uri);
IsCancelled = true;
}
finally
{
downloadedPiece.Set();
downloadEnded.Set();
}
}
#endregion
@ -404,7 +413,8 @@ namespace AaxDecrypter
var toRead = Math.Min(count, Length - Position);
WaitToPosition(Position + toRead);
return _readFile.Read(buffer, offset, count);
return IsCancelled ? 0 : _readFile.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)