OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmReadDVD.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.ComponentModel;\r
4 using System.Data;\r
5 using System.Drawing;\r
6 using System.Text;\r
7 using System.Windows.Forms;\r
8 using System.IO;\r
9 using System.Threading;\r
10 using System.Diagnostics;\r
11 \r
12 \r
13 namespace Handbrake\r
14 {\r
15     public partial class frmReadDVD : Form\r
16     {\r
17         private string inputFile;\r
18         private frmMain mainWindow;\r
19         private frmDvdInfo dvdInfo;\r
20         private Parsing.DVD thisDvd;\r
21         private Process hbProc;\r
22         private delegate void UpdateUIHandler();\r
23         //private int cancel = 0;\r
24 \r
25         public frmReadDVD(string inputFile, frmMain parent, frmDvdInfo dvdInfoWindow)\r
26         {\r
27             InitializeComponent();\r
28             this.inputFile = inputFile;\r
29             this.mainWindow = parent;\r
30             this.dvdInfo = dvdInfoWindow;\r
31             startScan();\r
32             \r
33         }\r
34 \r
35         private void startScan()\r
36         {\r
37             try\r
38             {\r
39                 //btn_skip.Visible = true;\r
40                 lbl_progress.Text = "0%";\r
41                 //lbl_progress.Visible = true;\r
42                 lbl_status.Visible = true;\r
43                 // throw cli call and parsing on it's own thread\r
44                 ThreadPool.QueueUserWorkItem(startProc);\r
45             }\r
46             catch (Exception exc)\r
47             {\r
48                 if (Properties.Settings.Default.GuiDebug == "Checked")\r
49                 {\r
50                     MessageBox.Show("frmReadDVD.cs - startScan " + exc.ToString());\r
51                 }\r
52                 else\r
53                 {\r
54                     MessageBox.Show(Properties.Settings.Default.defaultError.ToString());\r
55                 }\r
56             }\r
57         }\r
58    \r
59         private void updateUIElements()\r
60         {\r
61             try\r
62             {\r
63                 if (this.InvokeRequired)\r
64                 {\r
65                     this.BeginInvoke(new UpdateUIHandler(updateUIElements));\r
66                     return;\r
67                 }\r
68                 // Now pass this streamreader to frmMain so that it can be used there.\r
69                 mainWindow.setStreamReader(thisDvd);\r
70 \r
71                 mainWindow.drp_dvdtitle.Items.Clear();\r
72                 mainWindow.drp_dvdtitle.Items.AddRange(thisDvd.Titles.ToArray());\r
73 \r
74                 this.Close();\r
75             }\r
76             catch(Exception exc)\r
77             {\r
78                 if (Properties.Settings.Default.GuiDebug == "Checked")\r
79                 {\r
80                     MessageBox.Show("frmReadDVD.cs - updateUIElements " + exc.ToString());\r
81                 }\r
82                 else\r
83                 {\r
84                     MessageBox.Show(Properties.Settings.Default.defaultError.ToString());\r
85                 }\r
86             }\r
87         }\r
88 \r
89         Functions.CLI process = new Functions.CLI();\r
90         private void startProc(object state)\r
91         {\r
92             //string query = "-i " + '"' + inputFile + '"' + " -t0";\r
93             // hbProc = process.runCli(this, query, true, true, false, true);\r
94 \r
95             //*********************************************************************************************************************************************\r
96             /*\r
97              * Quick and Dirty hack to get around the stderr crashes of hbcli. Lets try feeding brians parser text straight from a text file.\r
98              */\r
99             try\r
100             {\r
101                 string appPath = Application.StartupPath.ToString()+ "\\";\r
102                 string strCmdLine = "cmd /c " + '"' + '"' + appPath + "hbcli.exe" + '"' +  " -i " + '"' + inputFile + '"' + " -t0 >" + '"'+ appPath + "dvdinfo.dat" + '"' + " 2>&1" + '"';\r
103                 Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
104                 hbproc.WaitForExit();\r
105                 hbproc.Dispose();\r
106                 hbproc.Close();\r
107 \r
108           \r
109                 StreamReader sr = new StreamReader(appPath + "dvdinfo.dat");\r
110                 thisDvd = Parsing.DVD.Parse(sr);\r
111                 sr.Close();\r
112 \r
113                 Console.ReadLine();\r
114 \r
115                 updateUIElements();\r
116             }\r
117             catch (Exception exc)\r
118             {\r
119                 if (Properties.Settings.Default.GuiDebug == "Checked")\r
120                 {\r
121                     MessageBox.Show("frmReadDVD.cs - startProc " + exc.ToString());\r
122                 }\r
123                 else\r
124                 {\r
125                     MessageBox.Show(Properties.Settings.Default.defaultError.ToString());\r
126                 }\r
127             }\r
128 \r
129         }\r
130 \r
131             //*********************************************************************************************************************************************\r
132             /*\r
133              * This has been temporily disabled due to the stderr issue\r
134              * \r
135              * \r
136             Parsing.Parser readData = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
137             readData.OnScanProgress += Parser_OnScanProgress;\r
138             readData.OnReadLine += dvdInfo.HandleParsedData;\r
139             readData.OnReadToEnd += dvdInfo.HandleParsedData;\r
140 \r
141             // Setup the parser\r
142             \r
143 \r
144             if (cancel != 1)\r
145             {\r
146                 updateUIElements();\r
147                 process.killCLI();\r
148                 process.closeCLI();\r
149             }\r
150             */\r
151             //*********************************************************************************************************************************************\r
152 \r
153 \r
154         /*private void Parser_OnScanProgress(object Sender, int CurrentTitle, int TitleCount)\r
155         {\r
156             if (this.InvokeRequired)\r
157             {\r
158                 this.BeginInvoke(new Parsing.ScanProgressEventHandler(Parser_OnScanProgress), new object[] { Sender, CurrentTitle, TitleCount });\r
159                 return;\r
160             }\r
161             int progress = Convert.ToInt32(Convert.ToDouble(CurrentTitle) / Convert.ToDouble(TitleCount) * 100) + 1;\r
162             if (progress > 100)\r
163             {\r
164                 progress = 100;\r
165             }\r
166             this.lbl_progress.Text = progress.ToString() + "%";\r
167         }*/\r
168 \r
169     }\r
170 }