|
|
|
@ -79,13 +79,10 @@ namespace Jellyfin.Api.Helpers
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
public override async Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
|
|
|
|
|
{
|
|
|
|
|
var eofCount = 0;
|
|
|
|
|
const int EmptyReadLimit = 20;
|
|
|
|
|
|
|
|
|
|
int totalBytesRead = 0;
|
|
|
|
|
int remainingBytesToRead = count;
|
|
|
|
|
|
|
|
|
|
while (eofCount < EmptyReadLimit && remainingBytesToRead > 0)
|
|
|
|
|
while (remainingBytesToRead > 0)
|
|
|
|
|
{
|
|
|
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
|
|
|
int bytesRead;
|
|
|
|
@ -109,20 +106,15 @@ namespace Jellyfin.Api.Helpers
|
|
|
|
|
_job.BytesDownloaded = Math.Max(_job.BytesDownloaded ?? _bytesWritten, _bytesWritten);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (bytesRead == 0)
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (_job == null || _job.HasExited)
|
|
|
|
|
{
|
|
|
|
|
eofCount++;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await Task.Delay(100, cancellationToken).ConfigureAwait(false);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
eofCount = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return totalBytesRead;
|
|
|
|
@ -148,17 +140,23 @@ namespace Jellyfin.Api.Helpers
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (disposing)
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
_fileStream.Dispose();
|
|
|
|
|
|
|
|
|
|
if (_job != null)
|
|
|
|
|
if (disposing)
|
|
|
|
|
{
|
|
|
|
|
_transcodingJobHelper.OnTranscodeEndRequest(_job);
|
|
|
|
|
_fileStream.Dispose();
|
|
|
|
|
|
|
|
|
|
if (_job != null)
|
|
|
|
|
{
|
|
|
|
|
_transcodingJobHelper.OnTranscodeEndRequest(_job);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_disposed = true;
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
_disposed = true;
|
|
|
|
|
base.Dispose(disposing);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|