OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmReadDVD.cs
1 /*  frmReadDVD.cs $\r
2         \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.m0k.org/>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 using System;\r
8 using System.Collections.Generic;\r
9 using System.ComponentModel;\r
10 using System.Data;\r
11 using System.Drawing;\r
12 using System.Text;\r
13 using System.Windows.Forms;\r
14 using System.IO;\r
15 using System.Threading;\r
16 using System.Diagnostics;\r
17 \r
18 \r
19 namespace Handbrake\r
20 {\r
21     public partial class frmReadDVD : Form\r
22     {\r
23         private string inputFile;\r
24         private frmMain mainWindow;\r
25         private frmDvdInfo dvdInfo;\r
26         private Parsing.DVD thisDvd;\r
27         private delegate void UpdateUIHandler();\r
28 \r
29         public frmReadDVD(string inputFile, frmMain parent, frmDvdInfo dvdInfoWindow)\r
30         {\r
31             InitializeComponent();\r
32             this.inputFile = inputFile;\r
33             this.mainWindow = parent;\r
34             this.dvdInfo = dvdInfoWindow;\r
35             startScan();\r
36 \r
37         }\r
38 \r
39         private void startScan()\r
40         {\r
41             try\r
42             {\r
43                 lbl_status.Visible = true;\r
44                 ThreadPool.QueueUserWorkItem(startProc);\r
45             }\r
46             catch (Exception exc)\r
47             {\r
48                 MessageBox.Show("frmReadDVD.cs - startScan " + exc.ToString());\r
49             }\r
50         }\r
51 \r
52         private void updateUIElements()\r
53         {\r
54             try\r
55             {\r
56                 if (this.InvokeRequired)\r
57                 {\r
58                     this.BeginInvoke(new UpdateUIHandler(updateUIElements));\r
59                     return;\r
60                 }\r
61                 // Now pass this streamreader to frmMain so that it can be used there.\r
62                 mainWindow.setStreamReader(thisDvd);\r
63 \r
64                 mainWindow.drp_dvdtitle.Items.Clear();\r
65                 mainWindow.drp_dvdtitle.Items.AddRange(thisDvd.Titles.ToArray());\r
66                 mainWindow.drp_dvdtitle.Text = "Automatic";\r
67                 mainWindow.drop_chapterFinish.Text = "Auto";\r
68                 mainWindow.drop_chapterStart.Text = "Auto";\r
69 \r
70                 this.Close();\r
71             }\r
72             catch (Exception exc)\r
73             {\r
74                 MessageBox.Show("frmReadDVD.cs - updateUIElements " + exc.ToString());\r
75             }\r
76         }\r
77 \r
78         Functions.CLI process = new Functions.CLI();\r
79 \r
80         private void startProc(object state)\r
81         {\r
82             try\r
83             {\r
84                 string handbrakeCLIPath = Path.Combine(Application.StartupPath, "HandBrakeCLI.exe");\r
85                 string dvdInfoPath = Path.Combine(Path.GetTempPath(), "dvdinfo.dat");\r
86 \r
87                 // Make we don't pick up a stale dvdinfo.dat (and that we have rights to the file)\r
88                 if (File.Exists(dvdInfoPath))\r
89                     File.Delete(dvdInfoPath);\r
90 \r
91                 string strCmdLine = String.Format(@"cmd /c """"{0}"" -i ""{1}"" -t0 -v >""{2}"" 2>&1""", handbrakeCLIPath, inputFile, dvdInfoPath);\r
92 \r
93                 ProcessStartInfo hbParseDvd = new ProcessStartInfo("CMD.exe", strCmdLine);\r
94                 hbParseDvd.WindowStyle = ProcessWindowStyle.Hidden;\r
95                 using (Process hbproc = Process.Start(hbParseDvd))\r
96                 {\r
97                     hbproc.WaitForExit();\r
98                     // TODO: Verify exit code if the CLI supports it properly\r
99                 } \r
100 \r
101                 if (!File.Exists(dvdInfoPath))\r
102                 {\r
103                     throw new Exception("Unable to retrieve the DVD Info. dvdinfo.dat missing.");\r
104                 }\r
105 \r
106                 using (StreamReader sr = new StreamReader(dvdInfoPath))\r
107                 {\r
108                     thisDvd = Parsing.DVD.Parse(sr);\r
109                 }\r
110 \r
111                 updateUIElements();\r
112             }\r
113             catch (Exception exc)\r
114             {\r
115                 MessageBox.Show("frmReadDVD.cs - startProc " + exc.ToString());\r
116             }\r
117 \r
118         }\r
119     }\r
120 }