OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Presets / Import.cs
1 using System;\r
2 using System.IO;\r
3 using System.Xml;\r
4 using System.Windows.Forms;\r
5 using System.Collections;\r
6 using Handbrake.Functions;\r
7 \r
8 namespace Handbrake.Presets\r
9 {\r
10     class Import\r
11     {\r
12         public QueryParser importMacPreset(string filename)\r
13         {\r
14             XmlNode root = null;\r
15             try\r
16             {\r
17                 if (!File.Exists(filename))\r
18                     return null;\r
19 \r
20                 StreamReader sr = File.OpenText(filename);\r
21                 string fromfile = string.Empty;\r
22                 int fileChar;\r
23                 while ((fileChar = sr.Read()) != -1)\r
24                     fromfile += Convert.ToChar(fileChar);\r
25 \r
26                 XmlDocument doc = new XmlDocument();\r
27                 doc.LoadXml(fromfile);\r
28 \r
29                 root = doc;\r
30                 if (!root.HasChildNodes)\r
31                 {\r
32                     MessageBox.Show(\r
33                         "The Preset file you selected appears to be invlaid or from an older version of HandBrake", "Error",\r
34                         MessageBoxButtons.OK, MessageBoxIcon.Error);\r
35                     return null;\r
36                 }\r
37             }\r
38             catch (Exception)\r
39             {\r
40                 MessageBox.Show(\r
41                 "The Preset file you selected appears to be invlaid or from an older version of HandBrake.\n\n Please note, if you are exporting from the MacGui you may need to rebuild your preset so that it uses the current preset plist format.\n The MacGui does not currently update user presets automatically.", "Error",\r
42                        MessageBoxButtons.OK, MessageBoxIcon.Error);\r
43             }\r
44 \r
45             // We'll query a query parser object and use it's public var structures to store all the data.\r
46             // This will allow the preset loader logic to be used instead of writing custom logic just for this file.\r
47             QueryParser queryParsed = new QueryParser();\r
48 \r
49             /***** Get the Audio Tracks *****/\r
50             XmlNode audioListDict = root.ChildNodes[2].ChildNodes[0].FirstChild.ChildNodes[1];\r
51             ArrayList AudioInfo = new ArrayList();\r
52             for (int i = 0; i < audioListDict.ChildNodes.Count; i++)\r
53             {\r
54                 XmlNode audioChannel = audioListDict.ChildNodes[i];\r
55                 AudioTrack track = new AudioTrack();\r
56 \r
57                 for (int subi = 0; subi < audioChannel.ChildNodes.Count; subi += 2)\r
58                 {\r
59                     // Audio Channel Information is here.\r
60                     string key = audioChannel.ChildNodes[subi].InnerText;\r
61                     string value = audioChannel.ChildNodes[subi + 1].InnerText;\r
62                     switch (key)\r
63                     {\r
64                         case "AudioBitrate":\r
65                             track.Bitrate = value;\r
66                             break;\r
67                         case "AudioEncoder":\r
68                             track.Encoder = value.Replace("AAC (CoreAudio)", "AAC (faac)");\r
69                             break;\r
70                         case "AudioMixdown":\r
71                             track.MixDown = value;\r
72                             break;\r
73                         case "AudioSamplerate":\r
74                             track.SampleRate = value;\r
75                             break;\r
76                         case "AudioTrack":\r
77                             track.Track = value;\r
78                             break;\r
79                         case "AudioTrackDRCSlider":\r
80                             track.DRC = value;\r
81                             break;\r
82                     }\r
83                 }\r
84                 AudioInfo.Add(track);\r
85             }\r
86             queryParsed.AudioInformation = AudioInfo;\r
87 \r
88             /***** Get the rest of the settings. *****/\r
89             XmlNode presetSettings = root.ChildNodes[2].ChildNodes[0].FirstChild;\r
90             for (int i = 2; i < presetSettings.ChildNodes.Count; i += 2) // Start from 2 to avoid the audio settings which we don't need.\r
91             {\r
92                 string key = presetSettings.ChildNodes[i].InnerText;\r
93                 string value = presetSettings.ChildNodes[i + 1].InnerText;\r
94 \r
95                 switch (key)\r
96                 {\r
97                     // Output Settings\r
98                     case "FileFormat":\r
99                         queryParsed.Format = value;\r
100                         break;\r
101                     case "Mp4HttpOptimize":\r
102                         queryParsed.OptimizeMP4 = value == "1";\r
103                         break;\r
104                     case "Mp4LargeFile":\r
105                         queryParsed.LargeMP4 = value == "1";\r
106                         break;\r
107                     case "Mp4iPodCompatible":\r
108                         queryParsed.IpodAtom = value == "1";\r
109                         break;\r
110 \r
111                     // Picture Settings\r
112                     case "PictureAutoCrop":\r
113                         break;\r
114                     case "PictureTopCrop":\r
115                         queryParsed.CropTop = value;\r
116                         break;\r
117                     case "PictureBottomCrop":\r
118                         queryParsed.CropBottom = value;\r
119                         break;\r
120                     case "PictureLeftCrop":\r
121                         queryParsed.CropLeft = value;\r
122                         break;\r
123                     case "PictureRightCrop":\r
124                         queryParsed.CropRight = value;\r
125                         break;\r
126                     case "PictureHeight":\r
127                         queryParsed.Height = int.Parse(value);\r
128                         break;\r
129                     case "PictureWidth":\r
130                         queryParsed.Width = int.Parse(value);\r
131                         break;\r
132                     case "PictureKeepRatio":\r
133                         queryParsed.keepDisplayAsect = value == "1";\r
134                         break;\r
135                     case "PicturePAR":\r
136                         queryParsed.AnamorphicMode = int.Parse(value);\r
137                         break;\r
138 \r
139 \r
140                     // Filters\r
141                     case "PictureDeblock":\r
142                         queryParsed.DeBlock = int.Parse(value);\r
143                         break;\r
144                     case "PictureDecomb":\r
145                         queryParsed.Decomb = "Off";\r
146                         if (value == "2") queryParsed.Decomb = "Default";\r
147                         break;\r
148                     case "PictureDecombCustom":\r
149                         if (value != "")\r
150                             queryParsed.Decomb = value;\r
151                         break;\r
152                     case "PictureDecombDeinterlace":\r
153                         // Not Used\r
154                         break;\r
155                     case "PictureDeinterlace":\r
156                         switch (value)\r
157                         {\r
158                             case "0":\r
159                                 queryParsed.DeInterlace = "Off";\r
160                                 break;\r
161                             case "2":\r
162                                 queryParsed.DeInterlace = "Fast";\r
163                                 break;\r
164                             case "3":\r
165                                 queryParsed.DeInterlace = "Slow";\r
166                                 break;\r
167                             case "4":\r
168                                 queryParsed.DeInterlace = "Slowest";\r
169                                 break;\r
170                         }\r
171                         break;\r
172                     case "PictureDeinterlaceCustom":\r
173                         if (value != "")\r
174                             queryParsed.DeInterlace = value;\r
175                         break;\r
176                     case "PictureDenoise":\r
177                         switch (value)\r
178                         {\r
179                             case "0":\r
180                                 queryParsed.DeNoise = "Off";\r
181                                 break;\r
182                             case "2":\r
183                                 queryParsed.DeNoise = "Weak";\r
184                                 break;\r
185                             case "3":\r
186                                 queryParsed.DeNoise = "Medium";\r
187                                 break;\r
188                             case "4":\r
189                                 queryParsed.DeNoise = "Strong";\r
190                                 break;\r
191                         }\r
192 \r
193                         break;\r
194                     case "PictureDenoiseCustom":\r
195                         if (value != "")\r
196                             queryParsed.DeNoise = value;\r
197                         break;\r
198                     case "PictureDetelecine":\r
199                         queryParsed.DeTelecine = "Off";\r
200                         if (value == "1") queryParsed.DeTelecine = "Default";\r
201                         break;\r
202                     case "PictureDetelecineCustom":\r
203                         if (value != "")\r
204                             queryParsed.DeTelecine = value;\r
205                         break;\r
206 \r
207                     // Video Tab\r
208                     case "VideoAvgBitrate":\r
209                         queryParsed.Width = int.Parse(value);\r
210                         break;\r
211                     case "VideoEncoder":\r
212                         queryParsed.VideoEncoder = value;\r
213                         break;\r
214                     case "VideoFramerate":\r
215                         queryParsed.VideoFramerate = value;\r
216                         break;\r
217                     case "VideoGrayScale":\r
218                         queryParsed.Grayscale = value == "1";\r
219                         break;\r
220                     case "VideoQualitySlider":\r
221                         queryParsed.VideoQuality = float.Parse(value);\r
222                         break;\r
223                     case "VideoQualityType":\r
224                         break;\r
225                     case "VideoTargetSize":\r
226                         queryParsed.VideoTargetSize = value;\r
227                         break;\r
228                     case "VideoTurboTwoPass":\r
229                         queryParsed.TurboFirstPass = value == "1";\r
230                         break;\r
231                     case "VideoTwoPass":\r
232                         queryParsed.TwoPass = value == "1";\r
233                         break;\r
234 \r
235                     // Chapter Markers Tab\r
236                     case "ChapterMarkers":\r
237                         queryParsed.ChapterMarkers = value == "1";\r
238                         break;\r
239 \r
240                     // Advanced x264 tab\r
241                     case "x264Option":\r
242                         queryParsed.H264Query = value;\r
243                         break;\r
244 \r
245                     // Preset Information\r
246                     case "PresetBuildNumber":\r
247                         queryParsed.PresetBuildNumber = int.Parse(value);\r
248                         break;\r
249                     case "PresetDescription":\r
250                         queryParsed.PresetDescription = value;\r
251                         break;\r
252                     case "PresetName":\r
253                         queryParsed.PresetName = value;\r
254                         break;\r
255                     case "Type":\r
256                         queryParsed.Type = value;\r
257                         break;\r
258                     case "UsesMaxPictureSettings":\r
259                         queryParsed.UsesMaxPictureSettings = value == "1";\r
260                         break;\r
261                     case "UsesPictureFilters":\r
262                         queryParsed.UsesPictureFilters = value == "1";\r
263                         break;\r
264                     case "UsesPictureSettings":\r
265                         queryParsed.UsesPictureSettings = value == "1";\r
266                         break;\r
267                 }\r
268             }\r
269             return queryParsed;\r
270         }\r
271 \r
272         // --- It's the end of the road\r
273     }\r
274 }