3 This file is part of the HandBrake source code.
\r
4 Homepage: <http://handbrake.fr>.
\r
5 It may be used under the terms of the GNU General Public License. */
\r
8 using System.Collections.Generic;
\r
9 using System.ComponentModel;
\r
11 using System.Drawing;
\r
13 using System.Windows.Forms;
\r
15 using System.Threading;
\r
16 using System.Diagnostics;
\r
17 using System.Collections;
\r
22 public partial class frmReadDVD : Form
\r
24 private string inputFile;
\r
25 private frmMain mainWindow;
\r
26 private Parsing.DVD thisDvd;
\r
27 private delegate void UpdateUIHandler();
\r
29 Functions.Common hb_common_func = new Functions.Common();
\r
30 Functions.Encode process = new Functions.Encode();
\r
32 public frmReadDVD(string inputFile, frmMain parent)
\r
34 InitializeComponent();
\r
35 this.inputFile = inputFile;
\r
36 this.mainWindow = parent;
\r
40 private void startScan()
\r
44 lbl_status.Visible = true;
\r
45 ThreadPool.QueueUserWorkItem(startProc);
\r
47 catch (Exception exc)
\r
49 MessageBox.Show("frmReadDVD.cs - startScan " + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
52 private void startProc(object state)
\r
56 string handbrakeCLIPath = Path.Combine(Application.StartupPath, "HandBrakeCLI.exe");
\r
57 string dvdInfoPath = Path.Combine(Path.GetTempPath(), "dvdinfo.dat");
\r
59 // Make we don't pick up a stale hb_encode_log.dat (and that we have rights to the file)
\r
60 if (File.Exists(dvdInfoPath))
\r
61 File.Delete(dvdInfoPath);
\r
63 string strCmdLine = String.Format(@"cmd /c """"{0}"" -i ""{1}"" -t0 -v >""{2}"" 2>&1""", handbrakeCLIPath, inputFile, dvdInfoPath);
\r
65 ProcessStartInfo hbParseDvd = new ProcessStartInfo("CMD.exe", strCmdLine);
\r
66 hbParseDvd.WindowStyle = ProcessWindowStyle.Hidden;
\r
68 using (hbproc = Process.Start(hbParseDvd))
\r
70 hbproc.WaitForExit();
\r
73 if (!File.Exists(dvdInfoPath))
\r
75 throw new Exception("Unable to retrieve the DVD Info. dvdinfo.dat is missing. \nExpected location of dvdinfo.dat: \n" + dvdInfoPath);
\r
78 using (StreamReader sr = new StreamReader("c:\\dvdinfo.dat"))
\r
80 thisDvd = Parsing.DVD.Parse(sr);
\r
87 catch (Exception exc)
\r
89 MessageBox.Show("frmReadDVD.cs - startProc() " + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
90 closeWindowAfterError();
\r
94 private void updateUIElements()
\r
98 if (this.InvokeRequired)
\r
100 this.BeginInvoke(new UpdateUIHandler(updateUIElements));
\r
103 // Now pass this streamreader to frmMain so that it can be used there.
\r
104 mainWindow.setStreamReader(thisDvd);
\r
106 mainWindow.drp_dvdtitle.Items.Clear();
\r
107 if (thisDvd.Titles.Count != 0)
\r
108 mainWindow.drp_dvdtitle.Items.AddRange(thisDvd.Titles.ToArray());
\r
109 mainWindow.drp_dvdtitle.Text = "Automatic";
\r
110 mainWindow.drop_chapterFinish.Text = "Auto";
\r
111 mainWindow.drop_chapterStart.Text = "Auto";
\r
113 // Now select the longest title
\r
114 if (thisDvd.Titles.Count != 0)
\r
115 hb_common_func.selectLongestTitle(mainWindow);
\r
119 catch (Exception exc)
\r
121 MessageBox.Show("frmReadDVD.cs - updateUIElements " + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
125 private void closeWindowAfterError()
\r
129 if (this.InvokeRequired)
\r
131 this.BeginInvoke(new UpdateUIHandler(closeWindowAfterError));
\r
136 catch (Exception exc)
\r
138 MessageBox.Show("frmReadDVD.cs - closeWindowAfterError - Unable to recover from a serious error. \n\n Error Information: \n " + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
142 private void btn_cancel_Click(object sender, EventArgs e)
\r
144 // This may seem like a long way of killing HandBrakeCLI, but for whatever reason,
\r
145 // hbproc.kill/close just won't do the trick.
\r
148 string AppName = "HandBrakeCLI";
\r
150 AppName = AppName.ToUpper();
\r
152 System.Diagnostics.Process[] prs = System.Diagnostics.Process.GetProcesses();
\r
153 foreach (System.Diagnostics.Process proces in prs)
\r
155 if (proces.ProcessName.ToUpper() == AppName)
\r
158 if (!proces.HasExited)
\r
163 catch (Exception ex)
\r
165 MessageBox.Show("Unable to kill HandBrakeCLI.exe \n\nError Information: \n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r