OSDN Git Service

WinGui: Re-checkin updated stylecop settings
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmDownload.cs
1 /*  frmDownload.cs $\r
2     This file is part of the HandBrake source code.\r
3     Homepage: <http://handbrake.fr>.\r
4     It may be used under the terms of the GNU General Public License. */\r
5 \r
6 namespace Handbrake\r
7 {\r
8     using System;\r
9     using System.Diagnostics;\r
10     using System.IO;\r
11     using System.Net;\r
12     using System.Threading;\r
13     using System.Windows.Forms;\r
14 \r
15     public partial class frmDownload : Form\r
16     {\r
17         private readonly Thread _downloadThread;\r
18         private Stream _responceStream;\r
19         private Stream _loacalStream;\r
20         private HttpWebRequest _webRequest;\r
21         private HttpWebResponse _webResponse;\r
22         private static int _progress;\r
23         private bool _killThread;\r
24 \r
25         private delegate void UpdateProgessCallback(long bytesRead, long totalBytes);\r
26 \r
27         private delegate void DownloadCompleteCallback();\r
28 \r
29         private delegate void DownloadFailedCallback();\r
30 \r
31         public frmDownload(string filename)\r
32         {\r
33             InitializeComponent();\r
34 \r
35             _downloadThread = new Thread(Download);\r
36             _downloadThread.Start(filename);\r
37         }\r
38 \r
39         private void Download(object file)\r
40         {\r
41             string tempPath = Path.Combine(Path.GetTempPath(), "handbrake-setup.exe");\r
42             string hbUpdate = (string) file;\r
43             WebClient wcDownload = new WebClient();\r
44 \r
45             try\r
46             {\r
47                 if (File.Exists(tempPath))\r
48                     File.Delete(tempPath);\r
49 \r
50                 _webRequest = (HttpWebRequest) WebRequest.Create(hbUpdate);\r
51                 _webRequest.Credentials = CredentialCache.DefaultCredentials;\r
52                 _webResponse = (HttpWebResponse) _webRequest.GetResponse();\r
53                 long fileSize = _webResponse.ContentLength;\r
54 \r
55                 _responceStream = wcDownload.OpenRead(hbUpdate);\r
56                 _loacalStream = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.None);\r
57 \r
58                 int bytesSize;\r
59                 byte[] downBuffer = new byte[2048];\r
60 \r
61                 long flength = 0;\r
62                 while ((bytesSize = _responceStream.Read(downBuffer, 0, downBuffer.Length)) > 0)\r
63                 {\r
64                     if (_killThread)\r
65                         return;\r
66                     _loacalStream.Write(downBuffer, 0, bytesSize);\r
67                     flength = _loacalStream.Length;\r
68                     Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] {_loacalStream.Length, fileSize});\r
69                 }\r
70 \r
71                 _responceStream.Close();\r
72                 _loacalStream.Close();\r
73 \r
74                 if (flength != fileSize)\r
75                     Invoke(new DownloadFailedCallback(this.DownloadFailed));\r
76                 else\r
77                     Invoke(new DownloadCompleteCallback(this.DownloadComplete));\r
78             }\r
79             catch\r
80             {\r
81                 // Do Nothing \r
82             }\r
83         }\r
84 \r
85         private void UpdateProgress(long bytesRead, long totalBytes)\r
86         {\r
87             long p = (bytesRead * 100) / totalBytes;\r
88             int.TryParse(p.ToString(), out _progress);\r
89             progress_download.Value = _progress;\r
90             lblProgress.Text = (bytesRead / 1024) + "k of " + (totalBytes / 1024) + "k ";\r
91         }\r
92 \r
93         private void DownloadComplete()\r
94         {\r
95             lblProgress.Text = "Download Complete";\r
96             btn_cancel.Text = "Close";\r
97 \r
98             Process.Start(Path.Combine(Path.GetTempPath(), "handbrake-setup.exe"));\r
99             this.Close();\r
100             Application.Exit();\r
101         }\r
102 \r
103         private void DownloadFailed()\r
104         {\r
105             lblProgress.Text = "Download Failed";\r
106             btn_cancel.Text = "Close";\r
107         }\r
108 \r
109         private void btn_cancel_Click(object sender, EventArgs e)\r
110         {\r
111             _killThread = true;\r
112             lblProgress.Text = "Cancelling ...";\r
113             if (_webResponse != null) _webResponse.Close();\r
114             if (_responceStream != null) _responceStream.Close();\r
115             if (_loacalStream != null) _loacalStream.Close();\r
116             this.Close();\r
117         }\r
118     }\r
119 }