OSDN Git Service

na-get-lib,ダウンロード処理において、HTTP圧縮に対応した。
[applistation/AppliStation.git] / na-get-lib / NaGet.Net / Downloader.cs
index d389381..623e787 100644 (file)
@@ -73,7 +73,7 @@ public class Downloader : NaGetTask
        /// <summary>\r
        /// アクセスURL\r
        /// </summary>\r
-       protected string url;\r
+       protected Uri url;\r
        \r
        /// <summary>\r
        /// 保存先\r
@@ -129,7 +129,7 @@ public class Downloader : NaGetTask
        /// <param name="filepath">保存先ファイルパス</param>\r
        public void Download(string url, string filepath)\r
        {\r
-               this.url = url;\r
+               this.url = new Uri(url);\r
                this.filepath = filepath;\r
                \r
                try {\r
@@ -165,6 +165,11 @@ public class Downloader : NaGetTask
                        request.Proxy = this.Proxy;\r
                        request.CachePolicy = new System.Net.Cache.RequestCachePolicy(CacheLevel);\r
                        \r
+                       HttpWebRequest httpRequest = request as HttpWebRequest;\r
+                       if (httpRequest != null) {\r
+                               httpRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;  \r
+                       }\r
+                       \r
                        if (cancelCalled) {\r
                                throw new NaGetTaskCanceledException(string.Empty);\r
                        }\r
@@ -249,10 +254,13 @@ public class Downloader : NaGetTask
                        \r
                        // 更新日を補完\r
                        if (File.Exists(filepath)) {\r
-                               if (response is HttpWebResponse) {\r
-                                       File.SetLastWriteTime(filepath, ((HttpWebResponse) response).LastModified);\r
-                               } else if (response is FtpWebResponse) {\r
-                                       File.SetLastWriteTime(filepath, ((FtpWebResponse) response).LastModified);\r
+                               HttpWebResponse httpResponse = response as HttpWebResponse;\r
+                               FtpWebResponse  ftpResponse      = response as FtpWebResponse;\r
+                               \r
+                               if (httpResponse != null) {\r
+                                       File.SetLastWriteTime(filepath, httpResponse.LastModified);\r
+                               } else if (ftpResponse != null) {\r
+                                       File.SetLastWriteTime(filepath, ftpResponse.LastModified);\r
                                }\r
                        }\r
                } finally {\r
@@ -334,10 +342,11 @@ public class Downloader : NaGetTask
        /// <remarks>Content-Dispositionヘッダから取得あるいはURLの末尾から推定します</remarks>\r
        /// <param name="response">レスポンスオブジェクト</param>\r
        /// <returns>取得したファイル名</returns>\r
-       private string getFileNameFromWebResponse(WebResponse response)\r
+       private static string getFileNameFromWebResponse(WebResponse response)\r
        {\r
-               if (response is HttpWebResponse) {\r
-                       string contentDisposition = ((HttpWebResponse) response).Headers["Content-Disposition"];\r
+               HttpWebResponse httpresp = response as HttpWebResponse;\r
+               if (httpresp != null) {\r
+                       string contentDisposition = httpresp.Headers["Content-Disposition"];\r
                        \r
                        if (! string.IsNullOrEmpty(contentDisposition)) {\r
                                try {\r
@@ -350,7 +359,7 @@ public class Downloader : NaGetTask
                        }\r
                }\r
                \r
-               return NaGet.Utils.Url2filename(response.ResponseUri.ToString());\r
+               return NaGet.Utils.Url2filename(response.ResponseUri);\r
        }\r
 }\r
 \r