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> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AAXClean.Codecs" Version="0.2.9" /> <PackageReference Include="AAXClean.Codecs" Version="0.2.10" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

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