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         }\r
32 \r
33         private void btn_ok_Click(object sender, EventArgs e)\r
34         {\r
35             btn_ok.Enabled = false;\r
36             btn_skip.Visible = true;\r
37             lbl_pressOk.Visible = false;\r
38             lbl_progress.Text = "0%";\r
39             lbl_progress.Visible = true;\r
40             lbl_status.Visible = true;\r
41             // throw cli call and parsing on it's own thread\r
42             ThreadPool.QueueUserWorkItem(startProc);\r
43         }\r
44      \r
45         private void updateUIElements()\r
46         {\r
47             if (this.InvokeRequired)\r
48             {\r
49                 this.BeginInvoke(new UpdateUIHandler(updateUIElements));\r
50                 return;\r
51             }\r
52             // Now pass this streamreader to frmMain so that it can be used there.\r
53             mainWindow.setStreamReader(thisDvd);\r
54 \r
55             mainWindow.drp_dvdtitle.Items.Clear();\r
56             mainWindow.drp_dvdtitle.Items.AddRange(thisDvd.Titles.ToArray());\r
57 \r
58             this.Close();\r
59         }\r
60 \r
61         Functions.CLI process = new Functions.CLI();\r
62         private void startProc(object state)\r
63         {\r
64             //string query = "-i " + '"' + inputFile + '"' + " -t0";\r
65             // hbProc = process.runCli(this, query, true, true, false, true);\r
66 \r
67             //*********************************************************************************************************************************************\r
68             /*\r
69              * Quick and Dirty hack to get around the stderr crashes of hbcli. Lets try feeding brians parser text straight from a text file.\r
70              */\r
71             string appPath = Application.StartupPath.ToString();\r
72             appPath = appPath + "\\";\r
73             string strCmdLine = "cmd /c " + '"' + '"' + appPath + "\\hbcli.exe" + '"' +  " -i" + '"' + inputFile + '"' + " -t0 >" + '"'+ appPath + "\\dvdinfo.dat" + '"' + " 2>&1" + '"';\r
74             Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
75             hbproc.WaitForExit();\r
76 \r
77 \r
78             StreamReader sr = new StreamReader(appPath + "dvdinfo.dat");\r
79     \r
80             thisDvd = Parsing.DVD.Parse(sr);\r
81 \r
82             sr.Close();\r
83             Console.ReadLine();\r
84             updateUIElements();\r
85             //*********************************************************************************************************************************************\r
86 \r
87             /*\r
88              * This has been temporily disabled due to the stderr issue\r
89              * \r
90              * \r
91             Parsing.Parser readData = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
92             readData.OnScanProgress += Parser_OnScanProgress;\r
93             readData.OnReadLine += dvdInfo.HandleParsedData;\r
94             readData.OnReadToEnd += dvdInfo.HandleParsedData;\r
95 \r
96             // Setup the parser\r
97             \r
98 \r
99             if (cancel != 1)\r
100             {\r
101                 updateUIElements();\r
102                 process.killCLI();\r
103                 process.closeCLI();\r
104             }\r
105             */\r
106         }\r
107 \r
108         private void Parser_OnScanProgress(object Sender, int CurrentTitle, int TitleCount)\r
109         {\r
110             if (this.InvokeRequired)\r
111             {\r
112                 this.BeginInvoke(new Parsing.ScanProgressEventHandler(Parser_OnScanProgress), new object[] { Sender, CurrentTitle, TitleCount });\r
113                 return;\r
114             }\r
115             int progress = Convert.ToInt32(Convert.ToDouble(CurrentTitle) / Convert.ToDouble(TitleCount) * 100) + 1;\r
116             if (progress > 100)\r
117             {\r
118                 progress = 100;\r
119             }\r
120             this.lbl_progress.Text = progress.ToString() + "%";\r
121         }\r
122 \r
123         private void btn_skip_Click(object sender, EventArgs e)\r
124         {\r
125             //process.killCLI();\r
126             this.Close();\r
127             cancel = 1;  \r
128         }\r
129 \r
130     }\r
131 }