diff options
Diffstat (limited to 'MediaBrowser.Controller/IO/StreamHelper.cs')
| -rw-r--r-- | MediaBrowser.Controller/IO/StreamHelper.cs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/IO/StreamHelper.cs b/MediaBrowser.Controller/IO/StreamHelper.cs index 106fec41f..5aec9a182 100644 --- a/MediaBrowser.Controller/IO/StreamHelper.cs +++ b/MediaBrowser.Controller/IO/StreamHelper.cs @@ -1,6 +1,7 @@ using System.IO; using System.Threading; using System; +using System.Threading.Tasks; namespace MediaBrowser.Controller.IO { @@ -23,5 +24,27 @@ namespace MediaBrowser.Controller.IO } } } + + public static async Task CopyToAsync(Stream source, Stream destination, int bufferSize, IProgress<double> progress, long contentLength, CancellationToken cancellationToken) + { + byte[] buffer = new byte[bufferSize]; + int read; + long totalRead = 0; + + while ((read = source.Read(buffer, 0, buffer.Length)) != 0) + { + cancellationToken.ThrowIfCancellationRequested(); + + destination.Write(buffer, 0, read); + + totalRead += read; + + double pct = totalRead; + pct /= contentLength; + pct *= 100; + + progress.Report(pct); + } + } } } |
