OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmDownload.cs
index 73020ff..a3067e1 100644 (file)
 /*  frmDownload.cs $\r
-       \r
-          This file is part of the HandBrake source code.\r
-          Homepage: <http://handbrake.m0k.org/>.\r
-          It may be used under the terms of the GNU General Public License. */\r
-\r
-using System;\r
-using System.Collections.Generic;\r
-using System.ComponentModel;\r
-using System.Data;\r
-using System.Drawing;\r
-using System.Text;\r
-using System.Windows.Forms;\r
-using System.Net;\r
-using System.IO;\r
-using System.Threading;\r
-using System.Diagnostics;\r
+    This file is part of the HandBrake source code.\r
+    Homepage: <http://handbrake.fr>.\r
+    It may be used under the terms of the GNU General Public License. */\r
 \r
 namespace Handbrake\r
 {\r
+    using System;\r
+    using System.Diagnostics;\r
+    using System.IO;\r
+    using System.Net;\r
+    using System.Threading;\r
+    using System.Windows.Forms;\r
+\r
     public partial class frmDownload : Form\r
     {\r
-        private Thread downloadThread;\r
-        private Stream responceStream;\r
-        private Stream loacalStream;\r
-        private HttpWebRequest webRequest;\r
-        private HttpWebResponse webResponse;\r
-        private static int progress;\r
-        private delegate void UpdateProgessCallback(Int64 BytesRead, Int64 TotalBytes);\r
+        private readonly Thread _downloadThread;\r
+        private Stream _responceStream;\r
+        private Stream _loacalStream;\r
+        private HttpWebRequest _webRequest;\r
+        private HttpWebResponse _webResponse;\r
+        private static int _progress;\r
+        private bool _killThread;\r
+\r
+        private delegate void UpdateProgessCallback(long bytesRead, long totalBytes);\r
+\r
         private delegate void DownloadCompleteCallback();\r
-        private delegate void DownloadFailedCallback();\r
 \r
+        private delegate void DownloadFailedCallback();\r
 \r
-        public frmDownload()\r
+        public frmDownload(string filename)\r
         {\r
             InitializeComponent();\r
 \r
-            try\r
-            {\r
-                downloadThread = new Thread(Download);\r
-                downloadThread.Start();\r
-            }\r
-            catch (Exception exc)\r
-            {\r
-                MessageBox.Show("An error occured on the Download Thread \n" + exc.ToString(),"Error",MessageBoxButtons.OK, MessageBoxIcon.Error);\r
-            }\r
-          \r
+            _downloadThread = new Thread(Download);\r
+            _downloadThread.Start(filename);\r
         }\r
 \r
-        private void Download()\r
+        private void Download(object file)\r
         {\r
-            Functions.RssReader rssRead = new Functions.RssReader();\r
-\r
             string tempPath = Path.Combine(Path.GetTempPath(), "handbrake-setup.exe");\r
+            string hbUpdate = (string) file;\r
+            WebClient wcDownload = new WebClient();\r
 \r
-            if (File.Exists(tempPath))\r
-                File.Delete(tempPath);\r
+            try\r
+            {\r
+                if (File.Exists(tempPath))\r
+                    File.Delete(tempPath);\r
 \r
-            string hbUpdate = rssRead.downloadFile();\r
+                _webRequest = (HttpWebRequest) WebRequest.Create(hbUpdate);\r
+                _webRequest.Credentials = CredentialCache.DefaultCredentials;\r
+                _webResponse = (HttpWebResponse) _webRequest.GetResponse();\r
+                long fileSize = _webResponse.ContentLength;\r
 \r
-            WebClient wcDownload = new WebClient();\r
-                try\r
-                {\r
-                    webRequest = (HttpWebRequest)WebRequest.Create(hbUpdate);\r
-                    webRequest.Credentials = CredentialCache.DefaultCredentials;\r
-                    webResponse = (HttpWebResponse)webRequest.GetResponse();\r
-                    Int64 fileSize = webResponse.ContentLength;\r
-\r
-                    responceStream = wcDownload.OpenRead(hbUpdate);\r
-                    loacalStream = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.None);\r
-\r
-                    int bytesSize = 0;\r
-                    byte[] downBuffer = new byte[2048];\r
-\r
-                    long flength = 0;\r
-                    while ((bytesSize = responceStream.Read(downBuffer, 0, downBuffer.Length)) > 0)\r
-                    {\r
-                        loacalStream.Write(downBuffer, 0, bytesSize);\r
-                        flength = loacalStream.Length;\r
-                        this.Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] { loacalStream.Length, fileSize });\r
-                    }\r
-\r
-                    responceStream.Close();\r
-                    loacalStream.Close();\r
-\r
-                    if (flength != fileSize)\r
-                        this.Invoke(new DownloadFailedCallback(this.downloadFailed));\r
-                    else\r
-                        this.Invoke(new DownloadCompleteCallback(this.downloadComplete));\r
-                }\r
-                catch (Exception)\r
+                _responceStream = wcDownload.OpenRead(hbUpdate);\r
+                _loacalStream = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.None);\r
+\r
+                int bytesSize;\r
+                byte[] downBuffer = new byte[2048];\r
+\r
+                long flength = 0;\r
+                while ((bytesSize = _responceStream.Read(downBuffer, 0, downBuffer.Length)) > 0)\r
                 {\r
-                    // Do Nothing \r
+                    if (_killThread)\r
+                        return;\r
+                    _loacalStream.Write(downBuffer, 0, bytesSize);\r
+                    flength = _loacalStream.Length;\r
+                    Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] {_loacalStream.Length, fileSize});\r
                 }\r
-        }\r
 \r
-        private void UpdateProgress(Int64 BytesRead, Int64 TotalBytes)\r
-        {\r
-            try\r
-            {\r
-                long p = (BytesRead * 100) / TotalBytes;\r
-                progress = int.Parse(p.ToString());\r
-                progress_download.Value = progress;\r
-                lblProgress.Text = (BytesRead / 1024) + "k of " + (TotalBytes / 1024) + "k ";\r
+                _responceStream.Close();\r
+                _loacalStream.Close();\r
+\r
+                if (flength != fileSize)\r
+                    Invoke(new DownloadFailedCallback(this.DownloadFailed));\r
+                else\r
+                    Invoke(new DownloadCompleteCallback(this.DownloadComplete));\r
             }\r
-            catch (Exception exc)\r
+            catch\r
             {\r
-                MessageBox.Show("Integer Convertion Error On Download \n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+                // Do Nothing \r
             }\r
         }\r
 \r
-        private void downloadComplete()\r
+        private void UpdateProgress(long bytesRead, long totalBytes)\r
+        {\r
+            long p = (bytesRead * 100) / totalBytes;\r
+            int.TryParse(p.ToString(), out _progress);\r
+            progress_download.Value = _progress;\r
+            lblProgress.Text = (bytesRead / 1024) + "k of " + (totalBytes / 1024) + "k ";\r
+        }\r
+\r
+        private void DownloadComplete()\r
         {\r
             lblProgress.Text = "Download Complete";\r
             btn_cancel.Text = "Close";\r
 \r
-            string tempPath = Path.Combine(Path.GetTempPath(), "handbrake-setup.exe");\r
-\r
-            Process startInstall = Process.Start(tempPath);\r
+            Process.Start(Path.Combine(Path.GetTempPath(), "handbrake-setup.exe"));\r
             this.Close();\r
             Application.Exit();\r
         }\r
 \r
-        private void downloadFailed()\r
+        private void DownloadFailed()\r
         {\r
             lblProgress.Text = "Download Failed";\r
             btn_cancel.Text = "Close";\r
@@ -129,20 +108,12 @@ namespace Handbrake
 \r
         private void btn_cancel_Click(object sender, EventArgs e)\r
         {\r
-            try\r
-            {\r
-                webResponse.Close();\r
-                responceStream.Close();\r
-                loacalStream.Close();\r
-                downloadThread.Abort();\r
-                progress_download.Value = 0;\r
-                lblProgress.Text = "Download Stopped";\r
-                this.Close();\r
-            }\r
-            catch (Exception)\r
-            {\r
-                // Do nothing\r
-            }\r
+            _killThread = true;\r
+            lblProgress.Text = "Cancelling ...";\r
+            if (_webResponse != null) _webResponse.Close();\r
+            if (_responceStream != null) _responceStream.Close();\r
+            if (_loacalStream != null) _loacalStream.Close();\r
+            this.Close();\r
         }\r
     }\r
 }
\ No newline at end of file