aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/IO/StreamHelper.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-11-03 14:11:04 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-11-03 14:11:04 -0400
commit0d28929e171992e55ab220b878edaec59e81b0ae (patch)
tree6eb930de73c1176e35f45b77f3803035116d6e0c /MediaBrowser.Controller/IO/StreamHelper.cs
parent7174ee66d5acb06c310da56c5d53d0a4f000db90 (diff)
update download progress reporting
Diffstat (limited to 'MediaBrowser.Controller/IO/StreamHelper.cs')
-rw-r--r--MediaBrowser.Controller/IO/StreamHelper.cs23
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);
+ }
+ }
}
}