Advertisement
Jmat4119

Untitled

Feb 12th, 2014
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.22 KB | None | 0 0
  1. private async Task<bool> DownloadBookAsync(DownloadItem item)
  2. {
  3.  
  4. cts = new CancellationTokenSource();
  5. Problem fileDownloaded = await DownloadFileFromWeb(item, cts.Token);
  6. switch (fileDownloaded)
  7. {
  8. case Problem.Ok:
  9. //ok processing
  10. break;
  11. case Problem.Cancelled:
  12. //cancel processing
  13. break;
  14. case Problem.Other:
  15. default:
  16. break;
  17. }
  18. return true;
  19. }
  20.  
  21. CancellationTokenSource cts = new CancellationTokenSource();
  22. enum Problem { Ok, Cancelled, Other };
  23.  
  24. private async Task<Problem> DownloadFileFromWeb(DownloadItem item, CancellationToken cToken)
  25. {
  26. try
  27. {
  28. HttpWebRequest wbr = WebRequest.CreateHttp(new Uri(item.Url));
  29. wbr.Method = "GET";
  30. wbr.AllowReadStreamBuffering = false;
  31. WebClient wbc = new WebClient();
  32. using (HttpWebResponse response = await wbr.GetResponseAsync())
  33. {
  34. using (Stream mystr = response.GetResponseStream())
  35. {
  36. using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
  37. {
  38. //Save zipfile data
  39. if (!ISF.DirectoryExists("RootPath/Zips"))
  40. {
  41. ISF.CreateDirectory("RootPath/Zips");
  42. }
  43. double totalSize = 0;
  44. double downloaded = 0;
  45. string dir = "RootPath/Zips" + item.Id.Trim();
  46. using (IsolatedStorageFileStream file = ISF.CreateFile(dir))
  47. {
  48. const int BUFFER_SIZE = 100 * 1024;
  49. byte[] buf = new byte[BUFFER_SIZE];
  50.  
  51. int bytesread = 0;
  52. while ((bytesread = await mystr.ReadAsync(buf, 0, BUFFER_SIZE)) > 0)
  53. {
  54. totalSize += bytesread;
  55. downloaded = Math.Round((totalSize / 1048576),3);
  56. lableProgress.Content =string.Concat(downloaded.ToString()," MB");
  57. cToken.ThrowIfCancellationRequested();
  58. file.Write(buf, 0, bytesread);
  59. }
  60. }
  61. }
  62. return Problem.Ok;
  63. }
  64. }
  65. }
  66. catch (Exception exc)
  67. {
  68. if (exc is OperationCanceledException)
  69. return Problem.Cancelled;
  70. else return Problem.Other;
  71. }
  72. }
  73.  
  74. public static class Extensions
  75. {
  76. public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest webRequest)
  77. {
  78. TaskCompletionSource<HttpWebResponse> taskComplete = new TaskCompletionSource<HttpWebResponse>();
  79. webRequest.BeginGetResponse(
  80. asyncResponse =>
  81. {
  82. try
  83. {
  84. HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
  85. HttpWebResponse someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
  86. taskComplete.TrySetResult(someResponse);
  87. }
  88. catch (WebException webExc)
  89. {
  90. HttpWebResponse failedResponse = (HttpWebResponse)webExc.Response;
  91. taskComplete.TrySetResult(failedResponse);
  92. }
  93. catch (Exception exc) { taskComplete.SetException(exc); }
  94. }, webRequest);
  95. return taskComplete.Task;
  96. }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement