OSDN Git Service

Change the fifo size from being statically tuned for a Mac Pro with 4 CPUs to dynamic...
[handbrake-jp/handbrake-jp-git.git] / win / C# / frmReadDVD.cs
index ca70a6b..ff50275 100644 (file)
@@ -5,55 +5,163 @@ using System.Data;
 using System.Drawing;\r
 using System.Text;\r
 using System.Windows.Forms;\r
+using System.IO;\r
+using System.Threading;\r
+using System.Diagnostics;\r
+\r
 \r
 namespace Handbrake\r
 {\r
     public partial class frmReadDVD : Form\r
     {\r
+        private string inputFile;\r
+        private frmMain mainWindow;\r
+        private frmDvdInfo dvdInfo;\r
+        private Parsing.DVD thisDvd;\r
+        private Process hbProc;\r
+        private delegate void UpdateUIHandler();\r
 \r
-        string inputFile;\r
-\r
-        public frmReadDVD(string inputFile)\r
+        public frmReadDVD(string inputFile, frmMain parent, frmDvdInfo dvdInfoWindow)\r
         {\r
             InitializeComponent();\r
             this.inputFile = inputFile;\r
+            this.mainWindow = parent;\r
+            this.dvdInfo = dvdInfoWindow;\r
+            startScan();\r
+            \r
         }\r
 \r
-        private void frmReadDVD_Load(object sender, EventArgs e)\r
+        private void startScan()\r
         {\r
-            //start(inputFile);\r
+            try\r
+            {\r
+                //btn_skip.Visible = true;\r
+                lbl_progress.Text = "0%";\r
+                //lbl_progress.Visible = true;\r
+                lbl_status.Visible = true;\r
+                // throw cli call and parsing on it's own thread\r
+                ThreadPool.QueueUserWorkItem(startProc);\r
+            }\r
+            catch (Exception exc)\r
+            {\r
+                if (Properties.Settings.Default.GuiDebug == "Checked")\r
+                {\r
+                    MessageBox.Show("frmReadDVD.cs - startScan " + exc.ToString());\r
+                }\r
+                else\r
+                {\r
+                    MessageBox.Show(Properties.Settings.Default.defaultError.ToString());\r
+                }\r
+            }\r
         }\r
-\r
-        public void start(string filename)\r
+   \r
+        private void updateUIElements()\r
         {\r
-            MessageBox.Show(filename);\r
-            string query = "-i " + '"' + filename + '"' + " -t0";\r
-            System.Diagnostics.Process hbProc = new System.Diagnostics.Process();\r
-            hbProc.StartInfo.FileName = "hbcli.exe";\r
-            hbProc.StartInfo.RedirectStandardOutput = true;\r
-            hbProc.StartInfo.RedirectStandardError = true;\r
-            //hbProc.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;\r
-            //hbProc.StartInfo.StandardErrorEncoding = System.Text.Encoding.UTF8;\r
-            hbProc.StartInfo.Arguments = query;\r
-            hbProc.StartInfo.UseShellExecute = false;\r
-            hbProc.Start();\r
-\r
-            rtf_dvdInfo.Text = "-- Start --";\r
-            while (hbProc.StandardOutput.BaseStream.CanRead && !hbProc.HasExited)\r
-            {\r
-                rtf_dvdInfo.Text = rtf_dvdInfo.Text + "\n" + hbProc.StandardOutput.ReadLine();\r
-                rtf_dvdInfo.Text = rtf_dvdInfo.Text + "\n" + hbProc.StandardError.ReadLine();\r
-                MessageBox.Show("Test");\r
-            }\r
-\r
-            rtf_dvdInfo.Text = rtf_dvdInfo.Text + "\n" + "-- End --";\r
+            try\r
+            {\r
+                if (this.InvokeRequired)\r
+                {\r
+                    this.BeginInvoke(new UpdateUIHandler(updateUIElements));\r
+                    return;\r
+                }\r
+                // Now pass this streamreader to frmMain so that it can be used there.\r
+                mainWindow.setStreamReader(thisDvd);\r
+\r
+                mainWindow.drp_dvdtitle.Items.Clear();\r
+                mainWindow.drp_dvdtitle.Items.AddRange(thisDvd.Titles.ToArray());\r
+                mainWindow.drp_dvdtitle.Text = "Automatic";\r
+                mainWindow.drop_chapterFinish.Text = "Auto";\r
+                mainWindow.drop_chapterStart.Text = "Auto";\r
+  \r
+                this.Close();\r
+            }\r
+            catch(Exception exc)\r
+            {\r
+                if (Properties.Settings.Default.GuiDebug == "Checked")\r
+                {\r
+                    MessageBox.Show("frmReadDVD.cs - updateUIElements " + exc.ToString());\r
+                }\r
+                else\r
+                {\r
+                    MessageBox.Show(Properties.Settings.Default.defaultError.ToString());\r
+                }\r
+            }\r
         }\r
 \r
-        private void btn_ok_Click(object sender, EventArgs e)\r
+        Functions.CLI process = new Functions.CLI();\r
+\r
+        private void startProc(object state)\r
         {\r
-            start(inputFile);\r
+            //string query = "-i " + '"' + inputFile + '"' + " -t0";\r
+            // hbProc = process.runCli(this, query, true, true, false, true);\r
+\r
+            try\r
+            {\r
+                string appPath = Application.StartupPath.ToString()+ "\\";\r
+                string strCmdLine = "cmd /c " + '"' + '"' + appPath + "hbcli.exe" + '"' +  " -i " + '"' + inputFile + '"' + " -t0 >" + '"'+ appPath + "dvdinfo.dat" + '"' + " 2>&1" + '"';\r
+                Process hbproc = Process.Start("CMD.exe", strCmdLine);\r
+                hbproc.WaitForExit();\r
+                hbproc.Dispose();\r
+                hbproc.Close();\r
+\r
+          \r
+                StreamReader sr = new StreamReader(appPath + "dvdinfo.dat");\r
+                thisDvd = Parsing.DVD.Parse(sr);\r
+                sr.Close();\r
+\r
+                updateUIElements();\r
+            }\r
+            catch (Exception exc)\r
+            {\r
+                if (Properties.Settings.Default.GuiDebug == "Checked")\r
+                {\r
+                    MessageBox.Show("frmReadDVD.cs - startProc " + exc.ToString());\r
+                }\r
+                else\r
+                {\r
+                    MessageBox.Show(Properties.Settings.Default.defaultError.ToString());\r
+                }\r
+            }\r
+\r
         }\r
 \r
-       \r
+            //*********************************************************************************************************************************************\r
+            /*\r
+             * This has been temporily disabled due to the stderr issue\r
+             * \r
+             * \r
+            Parsing.Parser readData = new Parsing.Parser(hbProc.StandardError.BaseStream);\r
+            readData.OnScanProgress += Parser_OnScanProgress;\r
+            readData.OnReadLine += dvdInfo.HandleParsedData;\r
+            readData.OnReadToEnd += dvdInfo.HandleParsedData;\r
+\r
+            // Setup the parser\r
+            \r
+\r
+            if (cancel != 1)\r
+            {\r
+                updateUIElements();\r
+                process.killCLI();\r
+                process.closeCLI();\r
+            }\r
+            */\r
+            //*********************************************************************************************************************************************\r
+\r
+\r
+        /*private void Parser_OnScanProgress(object Sender, int CurrentTitle, int TitleCount)\r
+        {\r
+            if (this.InvokeRequired)\r
+            {\r
+                this.BeginInvoke(new Parsing.ScanProgressEventHandler(Parser_OnScanProgress), new object[] { Sender, CurrentTitle, TitleCount });\r
+                return;\r
+            }\r
+            int progress = Convert.ToInt32(Convert.ToDouble(CurrentTitle) / Convert.ToDouble(TitleCount) * 100) + 1;\r
+            if (progress > 100)\r
+            {\r
+                progress = 100;\r
+            }\r
+            this.lbl_progress.Text = progress.ToString() + "%";\r
+        }*/\r
+\r
     }\r
 }
\ No newline at end of file