OSDN Git Service

WinGui: Fix subtitle forced for foreign scan. Set it to "scan" instead of "Forced"
[handbrake-jp/handbrake-jp-git.git] / win / C# / Functions / Scan.cs
1 /*  Scan.cs $\r
2         \r
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
6 \r
7 using System;\r
8 using System.Windows.Forms;\r
9 using System.IO;\r
10 using System.Diagnostics;\r
11 using System.Threading;\r
12 using Handbrake.Parsing;\r
13 \r
14 namespace Handbrake.Functions\r
15 {\r
16     public class Scan\r
17     {\r
18         private DVD _thisDvd;\r
19         private Parser _readData;\r
20         private Process _hbProc;\r
21         private string _scanProgress;\r
22         public event EventHandler ScanStared;\r
23         public event EventHandler ScanCompleted;\r
24         public event EventHandler ScanStatusChanged;\r
25 \r
26         public void ScanSource(string sourcePath)\r
27         {\r
28             Thread t = new Thread(new ParameterizedThreadStart(RunScan));\r
29             t.Start(sourcePath);\r
30         }\r
31 \r
32         public DVD SouceData()\r
33         {\r
34             return _thisDvd;\r
35         }\r
36 \r
37         public String LogData()\r
38         {\r
39             return _readData.Buffer;\r
40         }\r
41 \r
42         public String ScanStatus()\r
43         {\r
44             return _scanProgress;\r
45         }\r
46 \r
47         public Process ScanProcess()\r
48         {\r
49             return _hbProc;\r
50         }\r
51 \r
52         private void RunScan(object sourcePath)\r
53         {\r
54             try\r
55             {\r
56                 if (ScanStared != null)\r
57                     ScanStared(this, new EventArgs());\r
58 \r
59                 string handbrakeCLIPath = Path.Combine(Application.StartupPath, "HandBrakeCLI.exe");\r
60                 string logDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\logs";\r
61                 string dvdInfoPath = Path.Combine(logDir, "last_scan_log.txt");\r
62 \r
63                 // Make we don't pick up a stale last_encode_log.txt (and that we have rights to the file)\r
64                 if (File.Exists(dvdInfoPath))\r
65                     File.Delete(dvdInfoPath);\r
66 \r
67                 String dvdnav = string.Empty;\r
68                 if (Properties.Settings.Default.noDvdNav)\r
69                     dvdnav = " --no-dvdnav";\r
70 \r
71                 _hbProc = new Process\r
72                 {\r
73                     StartInfo =\r
74                     {\r
75                         FileName = handbrakeCLIPath,\r
76                         Arguments = String.Format(@" -i ""{0}"" -t0 {1} -v ", sourcePath, dvdnav),\r
77                         RedirectStandardOutput = true,\r
78                         RedirectStandardError = true,\r
79                         UseShellExecute = false,\r
80                         CreateNoWindow = true\r
81                     }\r
82                 };\r
83                 _hbProc.Start();\r
84 \r
85                 _readData = new Parser(_hbProc.StandardError.BaseStream);\r
86                 _readData.OnScanProgress += new ScanProgressEventHandler(OnScanProgress);\r
87                 _thisDvd = DVD.Parse(_readData);\r
88 \r
89                 // Write the Buffer out to file.\r
90                 StreamWriter scanLog = new StreamWriter(dvdInfoPath);\r
91                 scanLog.Write(_readData.Buffer);\r
92                 scanLog.Flush();\r
93                 scanLog.Close();\r
94 \r
95                 if (ScanCompleted != null)\r
96                     ScanCompleted(this, new EventArgs());\r
97             }\r
98             catch (Exception exc)\r
99             {\r
100                 Console.WriteLine("frmMain.cs - scanProcess() " + exc);\r
101             }\r
102         }\r
103 \r
104         private void OnScanProgress(object sender, int currentTitle, int titleCount)\r
105         {\r
106             _scanProgress = string.Format("Processing Title: {0} of {1}", currentTitle, titleCount);\r
107             if (ScanStatusChanged != null)\r
108                 ScanStatusChanged(this, new EventArgs());\r
109         }\r
110     }\r
111 }