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