diff --git a/Source/AaxDecrypter/AaxDecrypter.csproj b/Source/AaxDecrypter/AaxDecrypter.csproj
index 9ef266c7..90fdc76d 100644
--- a/Source/AaxDecrypter/AaxDecrypter.csproj
+++ b/Source/AaxDecrypter/AaxDecrypter.csproj
@@ -5,7 +5,7 @@
-
+
diff --git a/Source/AaxDecrypter/NetworkFileStream.cs b/Source/AaxDecrypter/NetworkFileStream.cs
index e1159d67..183fff7e 100644
--- a/Source/AaxDecrypter/NetworkFileStream.cs
+++ b/Source/AaxDecrypter/NetworkFileStream.cs
@@ -145,7 +145,14 @@ namespace AaxDecrypter
private void Update()
{
RequestHeaders = HttpRequest.Headers;
- Updated?.Invoke(this, EventArgs.Empty);
+ try
+ {
+ Updated?.Invoke(this, EventArgs.Empty);
+ }
+ catch (Exception ex)
+ {
+ Serilog.Log.Error(ex, "An error was encountered while saving the download progress to JSON");
+ }
}
///
@@ -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
@@ -401,10 +410,11 @@ namespace AaxDecrypter
{
if (!hasBegunDownloading)
BeginDownloading();
-
+
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)