From: Gonzalo Paniagua Javier Date: Thu, 22 Mar 2012 04:17:48 +0000 (-0400) Subject: Trigger the UploadProgressChanged event wen uploading a file. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=30dcaff4b9b5e94673456d6442ac50083a33ec11;p=mono.git Trigger the UploadProgressChanged event wen uploading a file. Fixes bug #3100. --- diff --git a/mcs/class/System/System.Net/UploadProgressChangedEventArgs.cs b/mcs/class/System/System.Net/UploadProgressChangedEventArgs.cs index 4169b6ef698..c6cf36c0fc5 100644 --- a/mcs/class/System/System.Net/UploadProgressChangedEventArgs.cs +++ b/mcs/class/System/System.Net/UploadProgressChangedEventArgs.cs @@ -27,8 +27,6 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_2_0 - using System.ComponentModel; using System.IO; @@ -68,4 +66,4 @@ namespace System.Net } } -#endif + diff --git a/mcs/class/System/System.Net/WebClient.cs b/mcs/class/System/System.Net/WebClient.cs index a20b867d35b..07abdc8b940 100644 --- a/mcs/class/System/System.Net/WebClient.cs +++ b/mcs/class/System/System.Net/WebClient.cs @@ -563,9 +563,30 @@ namespace System.Net reqStream.Write (partHeadersBytes, 0, partHeadersBytes.Length); } int nread; + long bytes_sent = 0; + long file_size = -1; + long step = 16384; // every 16kB + if (fStream.CanSeek) { + file_size = fStream.Length; + step = file_size / 100; + } + var upload_args = new UploadProgressChangedEventArgs (0, 0, bytes_sent, file_size, 0, userToken); + OnUploadProgressChanged (upload_args); byte [] buffer = new byte [4096]; - while ((nread = fStream.Read (buffer, 0, 4096)) != 0) + long sum = 0; + while ((nread = fStream.Read (buffer, 0, 4096)) > 0) { reqStream.Write (buffer, 0, nread); + bytes_sent += nread; + sum += nread; + if (sum >= step || nread < 4096) { + int percent = 0; + if (file_size > 0) + percent = (int) (bytes_sent * 100 / file_size); + upload_args = new UploadProgressChangedEventArgs (0, 0, bytes_sent, file_size, percent, userToken); + OnUploadProgressChanged (upload_args); + sum = 0; + } + } if (needs_boundary) { reqStream.WriteByte ((byte) '\r');