OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Parsing / Title.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Drawing;\r
5 using System.IO;\r
6 \r
7 namespace Handbrake.Parsing\r
8 {\r
9     public class Title\r
10     {\r
11         private List<Chapter> m_chapters;\r
12         public List<Chapter> Chapters\r
13         {\r
14             get\r
15             {\r
16                 return this.m_chapters;\r
17             }\r
18         }\r
19 \r
20         private List<AudioTrack> m_audioTracks;\r
21         public List<AudioTrack> AudioTracks\r
22         {\r
23             get\r
24             {\r
25                 return this.m_audioTracks;\r
26             }\r
27         }\r
28 \r
29         private List<Subtitle> m_subtitles;\r
30         public List<Subtitle> Subtitles\r
31         {\r
32             get\r
33             {\r
34                 return this.m_subtitles;\r
35             }\r
36         }\r
37 \r
38         /*private int m_vts;\r
39         public int Vts\r
40         {\r
41             get\r
42             {\r
43                 return this.m_vts;\r
44             }\r
45         }\r
46 \r
47         private int m_ttn;\r
48         public int Ttn\r
49         {\r
50             get\r
51             {\r
52                 return this.m_ttn;\r
53             }\r
54         }\r
55 \r
56         private int[] m_cellRange;\r
57         public int[] CellRange\r
58         {\r
59             get\r
60             {\r
61                 return this.m_cellRange;\r
62             }\r
63         }\r
64 \r
65         private int m_blockCount;\r
66         public int BlockCount\r
67         {\r
68             get\r
69             {\r
70                 return this.m_blockCount;\r
71             }\r
72         }*/\r
73 \r
74         private int m_titleNumber;\r
75         public int TitleNumber\r
76         {\r
77             get\r
78             {\r
79                 return this.m_titleNumber;\r
80             }\r
81         }\r
82 \r
83         private TimeSpan m_duration;\r
84         public TimeSpan Duration\r
85         {\r
86             get\r
87             {\r
88                 return this.m_duration;\r
89             }\r
90         }\r
91 \r
92         private Size m_resolution;\r
93         public Size Resolution\r
94         {\r
95             get\r
96             {\r
97                 return this.m_resolution;\r
98             }\r
99         }\r
100 \r
101         private float m_aspectRatio;\r
102         public float AspectRatio\r
103         {\r
104             get\r
105             {\r
106                 return this.m_aspectRatio;\r
107             }\r
108         }\r
109 \r
110         /*private float m_fps;\r
111         public float Fps\r
112         {\r
113             get\r
114             {\r
115                 return this.m_fps;\r
116             }\r
117         }*/\r
118 \r
119         private int[] m_autoCrop;\r
120         public int[] AutoCropDimensions\r
121         {\r
122             get\r
123             {\r
124                 return this.m_autoCrop;\r
125             }\r
126         }\r
127 \r
128         public Title()\r
129         {\r
130             this.m_audioTracks = new List<AudioTrack>();\r
131             this.m_chapters = new List<Chapter>();\r
132             this.m_subtitles = new List<Subtitle>();\r
133             //this.m_cellRange = new int[2];\r
134         }\r
135 \r
136         public override string ToString()\r
137         {\r
138             return string.Format("{0} ({1:00}:{2:00}:{3:00})", this.m_titleNumber, this.m_duration.Hours, \r
139                 this.m_duration.Minutes, this.m_duration.Seconds);\r
140         }\r
141 \r
142         public static Title Parse(StreamReader output)\r
143         {\r
144             Title thisTitle = new Title();\r
145 \r
146             /*\r
147              * This will be converted to use Regex soon, I promise ;)\r
148              * brianmario - 7/9/07\r
149              */\r
150             try\r
151             {\r
152                 string curLine = output.ReadLine();\r
153                 thisTitle.m_titleNumber = int.Parse(curLine.Substring(curLine.Length - 2, 1));\r
154                 curLine = output.ReadLine();\r
155                 string[] splitter = curLine.Split(',');\r
156                 //thisTitle.m_vts = int.Parse(splitter[0].Substring(8));\r
157                 //thisTitle.m_ttn = int.Parse(splitter[1].Substring(5));\r
158                 splitter = splitter[2].Trim().Split(' ', '(', ')');\r
159                 //thisTitle.m_blockCount = int.Parse(splitter[3]);\r
160                 splitter = splitter[1].Split('-', '>');\r
161                 //thisTitle.m_cellRange[0] = int.Parse(splitter[0]);\r
162                 //thisTitle.m_cellRange[1] = int.Parse(splitter[2]);\r
163                 curLine = output.ReadLine();\r
164                 splitter = curLine.Split(new string[] { "  + duration: " }, StringSplitOptions.RemoveEmptyEntries);\r
165                 thisTitle.m_duration = TimeSpan.Parse(splitter[0]);\r
166                 curLine = output.ReadLine();\r
167                 splitter = curLine.Split(new string[] { "  + size: ", "aspect: ", ", ", " fps", "x" }, StringSplitOptions.RemoveEmptyEntries);\r
168                 thisTitle.m_resolution = new Size(int.Parse(splitter[0]), int.Parse(splitter[1]));\r
169                 thisTitle.m_aspectRatio = float.Parse(splitter[2].ToString());\r
170                 //thisTitle.m_fps = float.Parse(splitter[3].ToString());\r
171                 curLine = output.ReadLine();\r
172                 splitter = curLine.Split(new string[] { "  + autocrop: ", "/" }, StringSplitOptions.RemoveEmptyEntries);\r
173                 thisTitle.m_autoCrop = new int[4] { int.Parse(splitter[0]), int.Parse(splitter[1]), int.Parse(splitter[2]), int.Parse(splitter[3]) };\r
174                 thisTitle.m_chapters.AddRange(Chapter.ParseList(output));\r
175                 thisTitle.m_audioTracks.AddRange(AudioTrack.ParseList(output));\r
176                 thisTitle.m_subtitles.AddRange(Subtitle.ParseList(output));\r
177             }\r
178             catch (Exception)\r
179             {\r
180                 // hbcli crashed caused an exception here. Just threw this in to prevent a program error.\r
181                 // Can be debuged later.\r
182             }\r
183 \r
184             return thisTitle;\r
185         }\r
186 \r
187         public static Title[] ParseList(StreamReader output)\r
188         {\r
189             List<Title> titles = new List<Title>();\r
190             while ((char)output.Peek() == '+')\r
191             {\r
192                 titles.Add(Title.Parse(output));\r
193             }\r
194             return titles.ToArray();\r
195         }\r
196     }\r
197 }\r