]> granicus.if.org Git - handbrake/commitdiff
WinGui: Initial Implementation of the json preset export code.
authorsr55 <sr55.hb@outlook.com>
Sun, 5 Jul 2015 12:12:01 +0000 (12:12 +0000)
committersr55 <sr55.hb@outlook.com>
Sun, 5 Jul 2015 12:12:01 +0000 (12:12 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@7347 b64f7644-9d1e-0410-96f1-a4d463321fa5

24 files changed:
win/CS/HandBrake.ApplicationServices/Interop/HandBrakePresetService.cs
win/CS/HandBrake.ApplicationServices/Interop/Json/Presets/HBPreset.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/Anamorphic.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/Decomb.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/Deinterlace.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/Denoise.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Encoding/Detelecine.cs
win/CS/HandBrake.ApplicationServices/Model/VideoScaler.cs
win/CS/HandBrake.ApplicationServices/Services/Encode/Model/Models/AllowedPassthru.cs
win/CS/HandBrake.ApplicationServices/Services/Encode/Model/Models/DenoisePreset.cs
win/CS/HandBrake.ApplicationServices/Services/Encode/Model/Models/DenoiseTune.cs
win/CS/HandBrake.ApplicationServices/Services/Encode/Model/Models/FramerateMode.cs
win/CS/HandBrake.ApplicationServices/Services/Encode/Model/Models/OutputFormat.cs
win/CS/HandBrake10.sln.DotSettings
win/CS/HandBrakeWPF/HandBrakeWPF.csproj
win/CS/HandBrakeWPF/Model/Audio/AudioBehaviourModes.cs
win/CS/HandBrakeWPF/Model/Subtitles/SubtitleBehaviourModes.cs
win/CS/HandBrakeWPF/Model/Subtitles/SubtitleBurnInBehaviourModes.cs
win/CS/HandBrakeWPF/Services/Presets/Factories/JsonPresetFactory.cs
win/CS/HandBrakeWPF/Services/Presets/Factories/PlistFactory.cs [deleted file]
win/CS/HandBrakeWPF/Services/Presets/Interfaces/IPresetService.cs
win/CS/HandBrakeWPF/Services/Presets/Model/Preset.cs
win/CS/HandBrakeWPF/Services/Presets/PresetService.cs
win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs

index 8d4f34e9e2e2cd187379b213be031d5ca7431660..fcc6d61da404b83855d850da40459a8454173f0a 100644 (file)
@@ -11,6 +11,7 @@ namespace HandBrake.ApplicationServices.Interop
 {\r
     using System;\r
     using System.Collections.Generic;\r
+    using System.IO;\r
     using System.Runtime.InteropServices;\r
 \r
     using HandBrake.ApplicationServices.Interop.HbLib;\r
@@ -65,5 +66,23 @@ namespace HandBrake.ApplicationServices.Interop
 \r
             return preset;\r
         }\r
+\r
+        /// <summary>\r
+        /// The export preset.\r
+        /// </summary>\r
+        /// <param name="filename">\r
+        /// The filename.\r
+        /// </param>\r
+        /// <param name="container">\r
+        /// The container.\r
+        /// </param>\r
+        public static void ExportPreset(string filename, PresetTransportContainer container)\r
+        {\r
+            string preset = JsonConvert.SerializeObject(container, Formatting.Indented);\r
+            using (StreamWriter writer = new StreamWriter(filename))\r
+            {\r
+                writer.Write(preset);\r
+            }\r
+        }\r
     }\r
 }\r
index 6bfeadcddcf1f888323f3f49d89997c09e865c74..6112a26a35dfac3a31233a06a8f6cab4db09d8e6 100644 (file)
@@ -19,7 +19,7 @@ namespace HandBrake.ApplicationServices.Interop.Json.Presets
         /// <summary>\r
         /// Gets or sets the audio copy mask.\r
         /// </summary>\r
-        public List<object> AudioCopyMask { get; set; }\r
+        public List<string> AudioCopyMask { get; set; }\r
 \r
         /// <summary>\r
         /// Gets or sets the audio encoder fallback.\r
index 1fe67db0b06c17cbb6e3f706614176fbc165118e..85e240ba97b8b4ee6ab28383f818faaf443a9ef5 100644 (file)
@@ -11,18 +11,24 @@ namespace HandBrake.ApplicationServices.Interop.Model.Encoding
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The anamorphic.\r
     /// </summary>\r
     public enum Anamorphic\r
     {\r
         [Display(Name = "None")]\r
+        [ShortName("none")]\r
         None = 0,\r
         [Display(Name = "Strict")]\r
+        [ShortName("strict")]\r
         Strict = 1,\r
         [Display(Name = "Loose")]\r
+        [ShortName("loose")]\r
         Loose = 2,\r
         [Display(Name = "Custom")]\r
+        [ShortName("custom")]\r
         Custom = 3\r
     }\r
 }
\ No newline at end of file
index f49ccffc769684b7d3604b96c6e26876fe2478d9..58e1003e3b7b073463dcaaf2c18ef34cf815c2fe 100644 (file)
@@ -9,15 +9,26 @@
 \r
 namespace HandBrake.ApplicationServices.Interop.Model.Encoding\r
 {\r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The decomb.\r
     /// </summary>\r
     public enum Decomb\r
     {\r
+        [ShortName("off")]\r
         Off = 0,\r
+\r
+        [ShortName("default")]\r
         Default = 2,\r
+\r
+        [ShortName("fast")]\r
         Fast = 3,\r
+\r
+        [ShortName("bob")]\r
         Bob = 4,\r
+\r
+        [ShortName("custom")]\r
         Custom = 1\r
     }\r
 }\r
index f5f76b71e72f666a3807e5e337c9d8a3d6b3bc4b..f7b8f0a42370312ba36044a5ba573089b0e171ba 100644 (file)
@@ -9,16 +9,29 @@
 \r
 namespace HandBrake.ApplicationServices.Interop.Model.Encoding\r
 {\r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The deinterlace.\r
     /// </summary>\r
     public enum Deinterlace\r
     {\r
+        [ShortName("off")]\r
         Off = 0,\r
+\r
+        [ShortName("fast")]\r
         Fast = 2,\r
+\r
+        [ShortName("slow")]\r
         Slow = 3,\r
+\r
+        [ShortName("slower")]\r
         Slower = 4,\r
+\r
+        [ShortName("bob")]\r
         Bob = 5,\r
+\r
+        [ShortName("custom")]\r
         Custom = 1\r
     }\r
 }\r
index 1bb510c29bd325a1d30e03ba67fdcd0dd5dfddca..4374372ff48293e38818fe32a82fc80e8db5d51a 100644 (file)
@@ -9,13 +9,20 @@
 \r
 namespace HandBrake.ApplicationServices.Interop.Model.Encoding\r
 {\r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The denoise.\r
     /// </summary>\r
     public enum Denoise\r
     {\r
+        [ShortName("off")]\r
         Off = 0,\r
+\r
+        [ShortName("hqdn3d")]\r
         hqdn3d = 1,\r
+\r
+        [ShortName("nlmeans")]\r
         NLMeans = 2,\r
     }\r
 }\r
index ff26a394d1ed28f36e2ee074e1ae5fbc7b3c7c1d..f93c754a4bad5c1d4059c1ea6422e138ed99c01e 100644 (file)
@@ -9,13 +9,18 @@
 \r
 namespace HandBrake.ApplicationServices.Interop.Model.Encoding\r
 {\r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The detelecine.\r
     /// </summary>\r
     public enum Detelecine\r
     {\r
+        [ShortName("off")]\r
         Off = 0,\r
+        [ShortName("default")]\r
         Default = 2,\r
+        [ShortName("custom")]\r
         Custom = 1\r
     }\r
 }\r
index 8fd6bcd07a251a789e255fccee90d085ee53fbe7..5d26040a87d364a718c83e0d6e6583f29f4832a0 100644 (file)
@@ -11,15 +11,19 @@ namespace HandBrake.ApplicationServices.Model
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     ///  The different scaling modes available in HandBrake\r
     /// </summary>\r
     public enum VideoScaler\r
     {\r
         [Display(Name = "Lanczos (default)")]\r
+        [ShortName("swscale")]\r
         Lanczos = 0,\r
 \r
         [Display(Name = "Bicubic (OpenCL)")]\r
+        [ShortName("opencl")]\r
         BicubicCl,\r
     }\r
 }\r
index d2ac4d5ac80b76997511b9ea92fb5bfe6d867048..796ae3cd62f43483a3d34e7f8359963b36d708fa 100644 (file)
@@ -9,7 +9,7 @@
 \r
 namespace HandBrake.ApplicationServices.Services.Encode.Model.Models\r
 {\r
-    using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
+    using System.Collections.Generic;\r
 \r
     /// <summary>\r
     /// Allowed Passthru Options\r
@@ -122,6 +122,51 @@ namespace HandBrake.ApplicationServices.Services.Encode.Model.Models
         /// </summary>\r
         public AudioEncoder AudioEncoderFallback { get; set; }\r
 \r
+        /// <summary>\r
+        /// Gets the allowed passthru options.\r
+        /// </summary>\r
+        public IEnumerable<AudioEncoder> AllowedPassthruOptions\r
+        {\r
+            get\r
+            {\r
+                List<AudioEncoder> audioEncoders = new List<AudioEncoder>();\r
+                if (AudioAllowAACPass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.AacPassthru);\r
+                }\r
+                if (AudioAllowAC3Pass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.Ac3Passthrough);\r
+                }\r
+                if (AudioAllowDTSHDPass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.DtsHDPassthrough);\r
+                }\r
+                if (AudioAllowDTSPass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.DtsPassthrough);\r
+                }\r
+                if (AudioAllowMP3Pass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.Mp3Passthru);\r
+                }\r
+                if (AudioAllowTrueHDPass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.TrueHDPassthrough);\r
+                }\r
+                if (AudioAllowFlacPass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.FlacPassthru);\r
+                }\r
+                if (AudioAllowEAC3Pass)\r
+                {\r
+                    audioEncoders.Add(AudioEncoder.EAc3Passthrough);\r
+                }\r
+\r
+                return audioEncoders;\r
+            }\r
+        } \r
+\r
         #endregion\r
     }\r
 }
\ No newline at end of file
index 1b83f0d401b9e1b1956e999fbb32ed311466a560..10b28140b7d716ba0cd4dd400881abe5a92e6f45 100644 (file)
@@ -11,27 +11,35 @@ namespace HandBrake.ApplicationServices.Services.Encode.Model.Models
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The denoise preset.\r
     /// </summary>\r
     public enum DenoisePreset\r
     {\r
         [Display(Name = "Weak")]\r
+        [ShortName("weak")]\r
         Weak = 0,\r
 \r
         [Display(Name = "Medium")]\r
+        [ShortName("medium")]\r
         Medium,\r
 \r
         [Display(Name = "Strong")]\r
+        [ShortName("strong")]\r
         Strong,\r
 \r
         [Display(Name = "Custom")]\r
+        [ShortName("custom")]\r
         Custom,\r
 \r
         [Display(Name = "Ultralight")] // NLMeans only\r
+        [ShortName("ultralight")]\r
         Ultralight,\r
 \r
         [Display(Name = "Light")] // NLMeans only\r
+        [ShortName("light")]\r
         Light,\r
     }\r
 }\r
index 745039a3511d63382b52a50caea78fa02af9beb4..f58834d81c766aebff9b4a5e2afbf5c99145996f 100644 (file)
@@ -11,24 +11,31 @@ namespace HandBrake.ApplicationServices.Services.Encode.Model.Models
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The denoise tune.\r
     /// </summary>\r
     public enum DenoiseTune\r
     {\r
         [Display(Name = "None")]\r
+        [ShortName("none")]\r
         None = 0,\r
 \r
         [Display(Name = "Film")]\r
+        [ShortName("film")]\r
         Film,\r
 \r
         [Display(Name = "Grain")]\r
+        [ShortName("grain")]\r
         Grain,\r
 \r
         [Display(Name = "High Motion")]\r
+        [ShortName("highmotion")]\r
         HighMotion,\r
 \r
         [Display(Name = "Animation")]\r
+        [ShortName("animation")]\r
         Animation,\r
     }\r
 }\r
index 542fb6b4edc3a6214317be46a127dc290d4c4f29..c61abd40b5a6a16f15693ef0e01fc10d8c982b85 100644 (file)
@@ -9,13 +9,20 @@
 \r
 namespace HandBrake.ApplicationServices.Services.Encode.Model.Models\r
 {\r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The Mode of Video Encoding. CFR, VFR, PFR\r
     /// </summary>\r
     public enum FramerateMode\r
     {\r
+        [ShortName("cfr")]\r
         CFR = 0,\r
+\r
+        [ShortName("pfr")]\r
         PFR,\r
+\r
+        [ShortName("vfr")]\r
         VFR\r
     }\r
 }\r
index d36071b738dc92086cd95d3091243d1e0b705dfb..8f01b3f6b036e44fddbd1a2f4dbbe992d7dceb8d 100644 (file)
@@ -12,6 +12,8 @@ namespace HandBrake.ApplicationServices.Services.Encode.Model.Models
     using System.ComponentModel;\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The Output format.\r
     /// </summary>\r
@@ -19,10 +21,12 @@ namespace HandBrake.ApplicationServices.Services.Encode.Model.Models
     {\r
         [Description("MP4")]\r
         [Display(Name = "MP4")]\r
+        [ShortName("av_mp4")]\r
         Mp4 = 0,\r
 \r
         [Description("MKV")]\r
         [Display(Name = "MKV")]\r
+        [ShortName("av_mkv")]\r
         Mkv,\r
     }\r
 }\r
index ddd8bf6542b56f3a058139b04be4dfed2f53db57..1de4d32355cffb41a457f5a7ffbf319fdade2377 100644 (file)
        <s:Boolean x:Key="/Default/Environment/OpenDocument/OpenDocumentAfterModification/@EntryValue">True</s:Boolean>
        <s:Boolean x:Key="/Default/Environment/SearchAndNavigation/MergeOccurences/@EntryValue">True</s:Boolean>
        <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpFileLayoutPatternsUpgrade/@EntryIndexedValue">True</s:Boolean>
+       <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
        <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
        <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
        <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002EJavaScript_002ECodeStyle_002ESettingsUpgrade_002EJsCodeFormatterSettingsUpgrader/@EntryIndexedValue">True</s:Boolean>
index c7ebecb48f36419b7832538b91672046c4fd096b..096fdd3798cabaa0e64a7dd667c4d47955150e90 100644 (file)
       <DesignTime>True</DesignTime>\r
     </Compile>\r
     <Compile Include="Services\Presets\Factories\JsonPresetFactory.cs" />\r
-    <Compile Include="Services\Presets\Factories\PlistFactory.cs" />\r
     <Compile Include="Services\Queue\Interfaces\IQueueProcessor.cs" />\r
     <Compile Include="Helpers\FileHelper.cs" />\r
     <Compile Include="Services\Presets\Model\Preset.cs" />\r
index 11f19f2e4e33856bbb5573533e5e2b43df933c2c..63d88cf21e2cec526237170d4d951b2b4f6e6a7b 100644 (file)
@@ -11,18 +11,23 @@ namespace HandBrakeWPF.Model.Audio
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The audio behaviours.\r
     /// </summary>\r
     public enum AudioBehaviourModes\r
     {\r
         [Display(Name = "No Audio")]\r
+        [ShortName("none")]\r
         None = 0,\r
 \r
         [Display(Name = "First Matching Selected Language")]\r
+        [ShortName("first")]\r
         FirstMatch,\r
 \r
         [Display(Name = "All Matching Selected Languages")]\r
+        [ShortName("all")]\r
         AllMatching,\r
     }\r
 }\r
index 004190a5f653b67e5303f59e8c5a5e5c37160df2..ed3e8ed5a025f34161128d70aef875fb58c281c3 100644 (file)
@@ -11,18 +11,23 @@ namespace HandBrakeWPF.Model.Subtitles
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The subtitle behaviours modes.\r
     /// </summary>\r
     public enum SubtitleBehaviourModes\r
     {\r
         [Display(Name = "None")]\r
+        [ShortName("none")]\r
         None = 0,\r
 \r
         [Display(Name = "First Matching Selected Language")]\r
+        [ShortName("first")]\r
         FirstMatch,\r
 \r
         [Display(Name = "All Matching Selected Languages")]\r
+        [ShortName("all")]\r
         AllMatching,\r
     }\r
 }\r
index 174b4a5e8722caf7c3337eeec1c11dafb2e93e29..193fc2a45ea3046f781b43bf9e792f724807fe11 100644 (file)
@@ -11,21 +11,27 @@ namespace HandBrakeWPF.Model.Subtitles
 {\r
     using System.ComponentModel.DataAnnotations;\r
 \r
+    using HandBrake.ApplicationServices.Attributes;\r
+\r
     /// <summary>\r
     /// The subtitle behaviours modes.\r
     /// </summary>\r
     public enum SubtitleBurnInBehaviourModes\r
     {\r
         [Display(Name = "None")]\r
+        [ShortName("none")]\r
         None = 0,\r
 \r
         [Display(Name = "Foreign Audio Track")]\r
+        [ShortName("foreign")]\r
         ForeignAudio,\r
 \r
         [Display(Name = "First Track")]\r
+        [ShortName("first")]\r
         FirstTrack,\r
 \r
         [Display(Name = "Foreign Audio Preferred, else First")]\r
+        [ShortName("foreign_first")]\r
         ForeignAudioPreferred,\r
     }\r
 }\r
index acc63874ff90e5ae8b215023c43dbf67fcf72b11..4dedd9660b606a1301a0f10c726194b5d2b4f66c 100644 (file)
@@ -9,13 +9,15 @@
 \r
 namespace HandBrakeWPF.Services.Presets.Factories\r
 {\r
-    using System;\r
+    using System.Collections.Generic;\r
     using System.Collections.ObjectModel;\r
     using System.Globalization;\r
+    using System.Linq;\r
 \r
     using HandBrake.ApplicationServices.Interop.Json.Presets;\r
     using HandBrake.ApplicationServices.Interop.Model;\r
     using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
+    using HandBrake.ApplicationServices.Model;\r
     using HandBrake.ApplicationServices.Services.Encode.Model;\r
     using HandBrake.ApplicationServices.Services.Encode.Model.Models;\r
     using HandBrake.ApplicationServices.Services.Encode.Model.Models.Video;\r
@@ -46,7 +48,6 @@ namespace HandBrakeWPF.Services.Presets.Factories
             preset.Name = importedPreset.PresetName;\r
             preset.Description = importedPreset.PresetDescription;\r
             preset.UsePictureFilters = importedPreset.UsesPictureFilters;\r
-            preset.UseDeinterlace = !importedPreset.PictureDecombDeinterlace;\r
             preset.Task = new EncodeTask();\r
 \r
             // Step 1, Create the EncodeTask Object that can be loaded into the UI.\r
@@ -106,6 +107,11 @@ namespace HandBrakeWPF.Services.Presets.Factories
 \r
             preset.Task.CustomDecomb = importedPreset.PictureDecombCustom;\r
 \r
+            if (!importedPreset.PictureDecombDeinterlace)\r
+            {\r
+                preset.Task.Decomb = Decomb.Off;\r
+            }\r
+\r
             switch (importedPreset.PictureDeinterlace)\r
             {\r
                 case "custom":\r
@@ -367,16 +373,158 @@ namespace HandBrakeWPF.Services.Presets.Factories
         /// <param name="export">\r
         /// The export.\r
         /// </param>\r
+        /// <param name="config">\r
+        /// HandBrakes configuration options.\r
+        /// </param>\r
         /// <returns>\r
         /// The <see cref="Preset"/>.\r
         /// </returns>\r
-        public HandBrake.ApplicationServices.Interop.Json.Presets.HBPreset ExportPreset(Preset export)\r
+        public static PresetTransportContainer ExportPreset(Preset export, HBConfiguration config)\r
         {\r
-            HandBrake.ApplicationServices.Interop.Json.Presets.HBPreset preset = new HandBrake.ApplicationServices.Interop.Json.Presets.HBPreset();\r
+            PresetTransportContainer container = new PresetTransportContainer();\r
+            container.VersionMajor = "0";\r
+            container.VersionMinor = "10";\r
+            container.VersionMicro = "2";\r
+            container.PresetList = new List<HBPreset> { CreateHbPreset(export, config) };\r
+\r
+            return container;\r
+        }\r
+\r
+        /// <summary>\r
+        /// The create hb preset.\r
+        /// </summary>\r
+        /// <param name="export">\r
+        /// The export.\r
+        /// </param>\r
+        /// <param name="config">HandBrakes current configuration</param>\r
+        /// <returns>\r
+        /// The <see cref="HBPreset"/>.\r
+        /// </returns>\r
+        private static HBPreset CreateHbPreset(Preset export, HBConfiguration config)\r
+        {\r
+            HBPreset preset = new HBPreset();\r
+\r
+            // Preset\r
+            preset.PresetDescription = export.Description;\r
+            preset.PresetName = export.Name;\r
+            preset.Type = 1; // User Preset\r
+            preset.UsesPictureFilters = export.UsePictureFilters;\r
+            preset.UsesPictureSettings = (int)export.PictureSettingsMode;\r
+            preset.Default = false; // TODO Can other GUI's handle this?\r
+\r
+            // Audio\r
+            preset.AudioCopyMask = export.Task.AllowedPassthruOptions.AllowedPassthruOptions.Select(EnumHelper<AudioEncoder>.GetShortName).ToList();\r
+            preset.AudioEncoderFallback = EnumHelper<AudioEncoder>.GetShortName(export.Task.AllowedPassthruOptions.AudioEncoderFallback);\r
+            preset.AudioLanguageList = LanguageUtilities.GetLanguageCodes(export.AudioTrackBehaviours.SelectedLangauges);\r
+            preset.AudioTrackSelectionBehavior = EnumHelper<AudioBehaviourModes>.GetShortName(export.AudioTrackBehaviours.SelectedBehaviour);\r
+            preset.AudioSecondaryEncoderMode = false; // TODO -> Check what this is.\r
+            preset.AudioList = new List<AudioList>();\r
+            foreach (var item in export.Task.AudioTracks)\r
+            {\r
+                AudioList track = new AudioList\r
+                                      {\r
+                                          AudioBitrate = item.Bitrate,\r
+                                          AudioCompressionLevel = 0, // TODO\r
+                                          AudioDitherMethod = null,  // TODO\r
+                                          AudioEncoder = EnumHelper<AudioEncoder>.GetShortName(item.Encoder),\r
+                                          AudioMixdown = EnumHelper<Mixdown>.GetShortName(item.MixDown),\r
+                                          AudioNormalizeMixLevel = false, // TODO\r
+                                          AudioSamplerate = item.SampleRate == 0 ? "auto" : item.SampleRate.ToString(),  // TODO check formatting.\r
+                                          AudioTrackDRCSlider = item.DRC,\r
+                                          AudioTrackGainSlider = item.Gain,\r
+                                          AudioTrackQuality = item.Quality ?? 0,\r
+                                          AudioTrackQualityEnable = item.Quality.HasValue && item.IsQualityVisible\r
+                                      };\r
+               \r
+                preset.AudioList.Add(track);\r
+            }\r
+            \r
+\r
+            // Subtitles\r
+            preset.SubtitleAddCC = export.SubtitleTrackBehaviours.AddClosedCaptions;\r
+            preset.SubtitleAddForeignAudioSearch = export.SubtitleTrackBehaviours.AddForeignAudioScanTrack;\r
+            preset.SubtitleBurnBDSub = false; // TODO not supported yet.\r
+            preset.SubtitleBurnDVDSub = false; // TODO not supported yet.\r
+            preset.SubtitleBurnBehavior = EnumHelper<SubtitleBurnInBehaviourModes>.GetShortName(export.SubtitleTrackBehaviours.SelectedBurnInBehaviour);\r
+            preset.SubtitleLanguageList = LanguageUtilities.GetLanguageCodes(export.SubtitleTrackBehaviours.SelectedLangauges);\r
+            preset.SubtitleTrackSelectionBehavior = EnumHelper<SubtitleBehaviourModes>.GetShortName(export.SubtitleTrackBehaviours.SelectedBehaviour);\r
+\r
+            // Chapters\r
+            preset.ChapterMarkers = export.Task.IncludeChapterMarkers;\r
+\r
+            // Output Settings\r
+            preset.FileFormat = EnumHelper<OutputFormat>.GetShortName(export.Task.OutputFormat);\r
+            preset.Mp4HttpOptimize = export.Task.OptimizeMP4;\r
+            preset.Mp4iPodCompatible = export.Task.IPod5GSupport;\r
+\r
+            // Picture Settings\r
+            preset.PictureForceHeight = 0; // TODO\r
+            preset.PictureForceWidth = 0; // TODO\r
+            preset.PictureHeight = preset.UsesPictureSettings >= 1 ? export.Task.MaxHeight : 0; // TODO; // TODO\r
+            preset.PictureItuPAR = false; // TODO Not supported Yet\r
+            preset.PictureKeepRatio = export.Task.KeepDisplayAspect;\r
+            preset.PictureLeftCrop = export.Task.Cropping.Left;\r
+            preset.PictureLooseCrop = false; // TODO Not Supported Yet\r
+            preset.PictureModulus = export.Task.Modulus ?? 16;\r
+            preset.PicturePAR = EnumHelper<Anamorphic>.GetShortName(export.Task.Anamorphic);\r
+            preset.PicturePARHeight = export.Task.PixelAspectY;\r
+            preset.PicturePARWidth = export.Task.PixelAspectX; \r
+            preset.PictureRightCrop = export.Task.Cropping.Right;\r
+            preset.PictureRotate = 0; // TODO Not supported yet.\r
+            preset.PictureTopCrop = export.Task.Cropping.Top;\r
+            preset.PictureWidth = preset.UsesPictureSettings >= 1 ? export.Task.MaxWidth : 0; // TODO\r
+            preset.PictureDARWidth = export.Task.DisplayWidth.HasValue ? (int)export.Task.DisplayWidth.Value : 0;\r
+            preset.PictureAutoCrop = export.Task.HasCropping;\r
+            preset.PictureBottomCrop = export.Task.Cropping.Bottom;\r
+\r
+            // Filters\r
+            preset.PictureDeblock = export.Task.Deblock;\r
+            preset.PictureDecomb = EnumHelper<Decomb>.GetShortName(export.Task.Decomb);\r
+            preset.PictureDecombCustom = export.Task.CustomDecomb;\r
+            preset.PictureDecombDeinterlace = export.Task.Decomb != Decomb.Off;\r
+            preset.PictureDeinterlace = EnumHelper<Deinterlace>.GetShortName(export.Task.Deinterlace);\r
+            preset.PictureDeinterlaceCustom = export.Task.CustomDeinterlace;\r
+            preset.PictureDenoiseCustom = export.Task.CustomDenoise;\r
+            preset.PictureDenoiseFilter = EnumHelper<Denoise>.GetShortName(export.Task.Denoise);\r
+            preset.PictureDenoisePreset = EnumHelper<DenoisePreset>.GetShortName(export.Task.DenoisePreset);\r
+            preset.PictureDenoiseTune = EnumHelper<DenoiseTune>.GetShortName(export.Task.DenoiseTune); \r
+            preset.PictureDetelecine = EnumHelper<Detelecine>.GetShortName(export.Task.Detelecine);\r
+            preset.PictureDetelecineCustom = export.Task.CustomDetelecine;\r
+\r
+            // Video\r
+            preset.VideoEncoder = EnumHelper<VideoEncoder>.GetShortName(export.Task.VideoEncoder);\r
+            preset.VideoFramerate = export.Task.Framerate.ToString();\r
+            preset.VideoFramerateMode = EnumHelper<FramerateMode>.GetShortName(export.Task.FramerateMode);\r
+            preset.VideoGrayScale = export.Task.Grayscale;\r
+            preset.VideoHWDecode = false;\r
+            preset.VideoLevel = export.Task.VideoLevel.ShortName;\r
+            preset.VideoOptionExtra = export.Task.ExtraAdvancedArguments;\r
+            preset.VideoPreset = export.Task.VideoPreset.ShortName;\r
+            preset.VideoProfile = export.Task.VideoProfile.ShortName;\r
+            preset.VideoQSVAsyncDepth = 4; // Defaulted to 4 for now.\r
+            preset.VideoQSVDecode = !config.DisableQuickSyncDecoding;\r
+            preset.VideoQualitySlider = export.Task.Quality.HasValue ? export.Task.Quality.Value : 0;\r
+            preset.VideoQualityType = (int)export.Task.VideoEncodeRateType;\r
+            preset.VideoScaler = EnumHelper<VideoScaler>.GetShortName(config.ScalingMode);\r
+            preset.VideoTune = export.Task.VideoTunes.Aggregate(string.Empty, (current, item) => !string.IsNullOrEmpty(current) ? string.Format("{0}, {1}", current, item.ShortName) : item.ShortName);\r
+            preset.VideoAvgBitrate = export.Task.VideoBitrate ?? 0;\r
+            preset.VideoColorMatrixCode = 0; // TODO not supported.\r
+            preset.VideoTurboTwoPass = export.Task.TurboFirstPass;\r
+            preset.VideoTwoPass = export.Task.TwoPass;\r
+\r
+            // Advanced\r
+            preset.x264Option = export.Task.AdvancedEncoderOptions;\r
+            preset.x264UseAdvancedOptions = export.Task.ShowAdvancedTab;\r
+\r
+            // Unknown\r
+            preset.ChildrenArray = new List<object>(); // TODO\r
+            preset.Folder = false; // TODO\r
+            preset.FolderOpen = false; // TODO\r
 \r
             return preset;\r
         }\r
 \r
+\r
         /// <summary>\r
         /// Get the OutputFormat Enum for a given string\r
         /// </summary>\r
@@ -385,8 +533,8 @@ namespace HandBrakeWPF.Services.Presets.Factories
         /// </param>\r
         /// <returns>\r
         /// An OutputFormat Enum\r
-        /// </returns>\r
-        public static OutputFormat GetFileFormat(string format)\r
+        /// </returns> \r
+        private static OutputFormat GetFileFormat(string format)\r
         {\r
             switch (format.ToLower())\r
             {\r
diff --git a/win/CS/HandBrakeWPF/Services/Presets/Factories/PlistFactory.cs b/win/CS/HandBrakeWPF/Services/Presets/Factories/PlistFactory.cs
deleted file mode 100644 (file)
index d50f23b..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-// --------------------------------------------------------------------------------------------------------------------\r
-// <copyright file="PlistFactory.cs" company="HandBrake Project (http://handbrake.fr)">\r
-//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.\r
-// </copyright>\r
-// <summary>\r
-//   Plist Preset Converter\r
-// </summary>\r
-// --------------------------------------------------------------------------------------------------------------------\r
-\r
-namespace HandBrakeWPF.Services.Presets.Factories\r
-{\r
-    using System.Linq;\r
-    using System.Text;\r
-    using System.Xml;\r
-\r
-    using HandBrake.ApplicationServices.Services.Encode.Model;\r
-    using HandBrake.ApplicationServices.Services.Encode.Model.Models;\r
-    using HandBrake.ApplicationServices.Utilities;\r
-    using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
-\r
-    using HandBrakeWPF.Services.Presets.Model;\r
-\r
-    /// <summary>\r
-    /// Plist Preset Converter\r
-    /// </summary>\r
-    public class PlistFactory\r
-    {\r
-        #region Export\r
-\r
-        /// <summary>\r
-        /// Export a MacGui style plist preset.\r
-        /// </summary>\r
-        /// <param name="path">\r
-        /// The path.\r
-        /// </param>\r
-        /// <param name="preset">\r
-        /// The preset.\r
-        /// </param>\r
-        /// <param name="build">\r
-        /// The build.PictureModulusPictureModulus\r
-        /// </param>\r
-        public static void Export(string path, Preset preset, string build)\r
-        {\r
-            if (string.IsNullOrEmpty(path))\r
-            {\r
-                return;\r
-            }\r
-\r
-            EncodeTask parsed = new EncodeTask(preset.Task);\r
-            using (XmlTextWriter xmlWriter = new XmlTextWriter(path, Encoding.UTF8) { Formatting = Formatting.Indented })\r
-            {\r
-                // Header\r
-                xmlWriter.WriteStartDocument();\r
-                xmlWriter.WriteDocType(\r
-                    "plist", "-//Apple//DTD PLIST 1.0//EN", @"http://www.apple.com/DTDs/PropertyList-1.0.dtd", null);\r
-\r
-                xmlWriter.WriteStartElement("plist");\r
-                xmlWriter.WriteStartElement("array");\r
-\r
-                // Add New Preset Here. Can write multiple presets here if required in future.\r
-                WritePreset(xmlWriter, parsed, preset, build);\r
-\r
-                // Footer\r
-                xmlWriter.WriteEndElement();\r
-                xmlWriter.WriteEndElement();\r
-\r
-                xmlWriter.WriteEndDocument();\r
-\r
-                // Closeout\r
-                xmlWriter.Close();\r
-            }\r
-        }\r
-\r
-        /// <summary>\r
-        /// Write the Preset to a file\r
-        /// </summary>\r
-        /// <param name="xmlWriter">\r
-        /// The xml writer.\r
-        /// </param>\r
-        /// <param name="parsed">\r
-        /// The parsed.\r
-        /// </param>\r
-        /// <param name="preset">\r
-        /// The preset.\r
-        /// </param>\r
-        /// <param name="build">\r
-        /// The build.\r
-        /// </param>\r
-        private static void WritePreset(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset, string build)\r
-        {\r
-            xmlWriter.WriteStartElement("dict");\r
-            AudioListArrayDict(xmlWriter, parsed);\r
-            AddEncodeSettings(xmlWriter, parsed, preset, build);\r
-\r
-            xmlWriter.WriteEndElement();\r
-        }\r
-\r
-        /// <summary>\r
-        /// Add the encode settings to the preset\r
-        /// </summary>\r
-        /// <param name="xmlWriter">\r
-        /// The xml writer.\r
-        /// </param>\r
-        /// <param name="parsed">\r
-        /// The parsed.\r
-        /// </param>\r
-        /// <param name="preset">\r
-        /// The preset.\r
-        /// </param>\r
-        /// <param name="build">\r
-        /// The build.\r
-        /// </param>\r
-        private static void AddEncodeSettings(XmlTextWriter xmlWriter, EncodeTask parsed, Preset preset, string build)\r
-        {\r
-            AddBooleanElement(xmlWriter, "AudioAllowAACPass", parsed.AllowedPassthruOptions.AudioAllowAACPass);\r
-            AddBooleanElement(xmlWriter, "AudioAllowAC3Pass", parsed.AllowedPassthruOptions.AudioAllowAC3Pass);\r
-            AddBooleanElement(xmlWriter, "AudioAllowDTSHDPass", parsed.AllowedPassthruOptions.AudioAllowDTSHDPass);\r
-            AddBooleanElement(xmlWriter, "AudioAllowDTSPass", parsed.AllowedPassthruOptions.AudioAllowDTSPass);\r
-            AddBooleanElement(xmlWriter, "AudioAllowMP3Pass", parsed.AllowedPassthruOptions.AudioAllowMP3Pass);\r
-\r
-            // TODO Update\r
-            AddEncodeElement(xmlWriter, "AudioEncoderFallback", "string", EnumHelper<AudioEncoder>.GetDisplay(parsed.AllowedPassthruOptions.AudioEncoderFallback));\r
-\r
-            AddBooleanElement(xmlWriter, "ChapterMarkers", parsed.IncludeChapterMarkers);\r
-            AddEncodeElement(xmlWriter, "Default", "integer", "0");\r
-            AddEncodeElement(xmlWriter, "FileFormat", "string", (parsed.OutputFormat == OutputFormat.Mp4) ? "MP4 file" : "MKV file"); // TODO\r
-            AddBooleanElement(xmlWriter, "Folder", false);\r
-            AddEncodeElement(xmlWriter, "Mp4HttpOptimize", "integer", parsed.OptimizeMP4 ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "Mp4iPodCompatible", "integer", parsed.IPod5GSupport ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "PictureAutoCrop", "integer", "1");\r
-            \r
-            // Filters\r
-            AddEncodeElement(xmlWriter, "PictureDeblock", "integer", parsed.Deblock.ToString());\r
-\r
-            AddBooleanElement(xmlWriter, "PictureDecombDeinterlace", parsed.Decomb != Decomb.Off);\r
-            AddEncodeElement(xmlWriter, "PictureDecombCustom", "string", parsed.Decomb == Decomb.Custom ? parsed.CustomDecomb : string.Empty);\r
-            AddEncodeElement(xmlWriter, "PictureDecomb", "integer", ((int)parsed.Decomb).ToString());\r
-            AddEncodeElement(xmlWriter, "PictureDeinterlaceCustom", "string", parsed.Deinterlace == Deinterlace.Custom ? parsed.CustomDeinterlace : string.Empty);\r
-            AddEncodeElement(xmlWriter, "PictureDeinterlace", "integer", ((int)parsed.Deinterlace).ToString());\r
-\r
-            AddEncodeElement(xmlWriter, "PictureDenoiseFilter", "string", parsed.Denoise.ToString().ToLower());\r
-            AddEncodeElement(xmlWriter, "PictureDenoiseCustom", "string", parsed.DenoisePreset == DenoisePreset.Custom ? parsed.CustomDenoise : string.Empty);\r
-            AddEncodeElement(xmlWriter, "PictureDenoisePreset", "string", parsed.DenoisePreset.ToString().ToLower());\r
-            if (parsed.Denoise == Denoise.NLMeans)\r
-            {\r
-                AddEncodeElement(xmlWriter, "PictureDenoiseTune", "string", parsed.DenoiseTune.ToString().ToLower());\r
-            }\r
-\r
-            AddEncodeElement(xmlWriter, "PictureDetelecine", "integer", ((int)parsed.Detelecine).ToString());\r
-            AddEncodeElement(xmlWriter, "PictureDetelecineCustom", "string", parsed.Detelecine == Detelecine.Custom ? parsed.CustomDecomb : string.Empty);\r
-\r
-            // Picture Settings\r
-            AddEncodeElement(xmlWriter, "PictureHeight", "integer", parsed.MaxHeight.HasValue ? parsed.MaxHeight.Value.ToString() : parsed.Height.HasValue ? parsed.Height.Value.ToString() : "0");\r
-            AddEncodeElement(xmlWriter, "PictureKeepRatio", "integer", parsed.KeepDisplayAspect ? "1" : "0");          \r
-            AddEncodeElement(xmlWriter, "PictureModulus", "integer", parsed.Modulus.ToString());\r
-            AddEncodeElement(xmlWriter, "PicturePAR", "integer", ((int)parsed.Anamorphic).ToString());\r
-            AddEncodeElement(xmlWriter, "PictureLeftCrop", "integer", parsed.Cropping.Left.ToString());\r
-            AddEncodeElement(xmlWriter, "PictureRightCrop", "integer", parsed.Cropping.Right.ToString());\r
-            AddEncodeElement(xmlWriter, "PictureTopCrop", "integer", parsed.Cropping.Top.ToString());\r
-            AddEncodeElement(xmlWriter, "PictureBottomCrop", "integer", parsed.Cropping.Bottom.ToString());\r
-            AddEncodeElement(xmlWriter, "PictureWidth", "integer", parsed.MaxWidth.HasValue ? parsed.MaxWidth.Value.ToString() : parsed.Width.HasValue ? parsed.Width.Value.ToString() : "0");\r
-\r
-            // Preset Information\r
-            AddEncodeElement(xmlWriter, "PresetBuildNumber", "string", build);\r
-            AddEncodeElement(xmlWriter, "PresetDescription", "string", "No Description");\r
-            AddEncodeElement(xmlWriter, "PresetName", "string", preset.Name);\r
-            AddEncodeElement(xmlWriter, "Type", "integer", "1"); // 1 is user preset, 0 is built in\r
-\r
-            // Preset Settings\r
-            AddEncodeElement(xmlWriter, "UsesMaxPictureSettings", "integer", (parsed.MaxWidth != 0 || parsed.MaxHeight != 0) ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "UsesPictureFilters", "integer", "1");\r
-            AddEncodeElement(xmlWriter, "UsesPictureSettings", "integer", "1");\r
-\r
-            // Video Settings\r
-            AddEncodeElement(xmlWriter, "VideoAvgBitrate", "string", parsed.VideoBitrate.ToString());\r
-            AddEncodeElement(xmlWriter, "VideoEncoder", "string", EnumHelper<VideoEncoder>.GetDisplay(parsed.VideoEncoder));\r
-            AddEncodeElement(xmlWriter, "VideoFramerate", "string", parsed.Framerate == null ? "Same as source" : parsed.Framerate.ToString());\r
-            AddEncodeElement(xmlWriter, "VideoFramerateMode", "string", parsed.FramerateMode.ToString().ToLower());\r
-            AddBooleanElement(xmlWriter, "VideoGrayScale", parsed.Grayscale);\r
-            AddEncodeElement(xmlWriter, "VideoQualitySlider", "real", parsed.Quality.ToString());\r
-\r
-            if (parsed.VideoPreset != null)\r
-                AddEncodeElement(xmlWriter, "VideoPreset", "string", parsed.VideoPreset.ShortName);\r
-            if (parsed.VideoLevel != null)\r
-                AddEncodeElement(xmlWriter, "VideoLevel", "string", parsed.VideoLevel.ShortName);\r
-            if (parsed.VideoProfile != null)\r
-                AddEncodeElement(xmlWriter, "VideoProfile", "string", parsed.VideoProfile.ShortName);\r
-            if (parsed.VideoTunes != null)\r
-                AddEncodeElement(xmlWriter, "VideoTune", "string",  parsed.VideoTunes.Aggregate(string.Empty, (current, item) => string.IsNullOrEmpty(current) ? item.ShortName : "," + item.ShortName));\r
-\r
-            AddEncodeElement(xmlWriter, "VideoOptionExtra", "string", parsed.ExtraAdvancedArguments);\r
-            AddEncodeElement(xmlWriter, "x264UseAdvancedOptions", "integer", parsed.ShowAdvancedTab ? "1" : "0");\r
-\r
-            int videoQualityType = 0;\r
-            if (parsed.VideoBitrate != null) videoQualityType = 1;\r
-            else if (parsed.Quality != null) videoQualityType = 2;\r
-\r
-            AddEncodeElement(xmlWriter, "VideoQualityType", "integer", videoQualityType.ToString());\r
-            AddEncodeElement(xmlWriter, "VideoTargetSize", "string", string.Empty);\r
-            AddEncodeElement(xmlWriter, "VideoTurboTwoPass", "integer", parsed.TurboFirstPass ? "1" : "0");\r
-            AddEncodeElement(xmlWriter, "VideoTwoPass", "integer", parsed.TwoPass ? "1" : "0");\r
-\r
-            // x264 string\r
-            AddEncodeElement(xmlWriter, "x264Option", "string", parsed.AdvancedEncoderOptions);\r
-        }\r
-\r
-        /// <summary>\r
-        /// Add a boolean element\r
-        /// </summary>\r
-        /// <param name="xmlWriter">\r
-        /// The xml writer.\r
-        /// </param>\r
-        /// <param name="keyName">\r
-        /// The key name.\r
-        /// </param>\r
-        /// <param name="value">\r
-        /// The value.\r
-        /// </param>\r
-        private static void AddBooleanElement(XmlTextWriter xmlWriter, string keyName, bool? value)\r
-        {\r
-            xmlWriter.WriteStartElement("key");\r
-            xmlWriter.WriteString(keyName);\r
-            xmlWriter.WriteEndElement();\r
-            xmlWriter.WriteStartElement(value.HasValue ? value.Value ? "true" : "false" : "false");\r
-            xmlWriter.WriteEndElement();\r
-        }\r
-\r
-        /// <summary>\r
-        /// Add an encode setting element\r
-        /// </summary>\r
-        /// <param name="xmlWriter">\r
-        /// The xml writer.\r
-        /// </param>\r
-        /// <param name="keyName">\r
-        /// The key name.\r
-        /// </param>\r
-        /// <param name="type">\r
-        /// The type.\r
-        /// </param>\r
-        /// <param name="value">\r
-        /// The value.\r
-        /// </param>\r
-        private static void AddEncodeElement(XmlTextWriter xmlWriter, string keyName, string type, string value)\r
-        {\r
-            xmlWriter.WriteElementString("key", keyName);\r
-\r
-            // This is a hack for Apples XML parser. It doesn't understand <integer /> so instead, always set a default value\r
-            // of 0 if the value is empty.\r
-            if (type == "integer" && string.IsNullOrEmpty(value))\r
-            {\r
-                value = "0";\r
-            }\r
-            xmlWriter.WriteElementString(type, value);\r
-        }\r
-\r
-        /// <summary>\r
-        /// Add an Audio Track Array Dict\r
-        /// </summary>\r
-        /// <param name="xmlWriter">\r
-        /// The xml writer.\r
-        /// </param>\r
-        /// <param name="parsed">\r
-        /// The parsed.\r
-        /// </param>\r
-        private static void AudioListArrayDict(XmlTextWriter xmlWriter, EncodeTask parsed)\r
-        {\r
-            xmlWriter.WriteStartElement("key");\r
-            xmlWriter.WriteString("AudioList");\r
-            xmlWriter.WriteEndElement();\r
-\r
-            xmlWriter.WriteStartElement("array");\r
-            foreach (AudioTrack track in parsed.AudioTracks)\r
-            {\r
-                AddAudioItem(xmlWriter, track);\r
-            }\r
-            xmlWriter.WriteEndElement();\r
-        }\r
-\r
-        /// <summary>\r
-        /// Add an audio track\r
-        /// </summary>\r
-        /// <param name="xmlWriter">\r
-        /// The xml writer.\r
-        /// </param>\r
-        /// <param name="audioTrack">\r
-        /// The audio track.\r
-        /// </param>\r
-        private static void AddAudioItem(XmlTextWriter xmlWriter, AudioTrack audioTrack)\r
-        {\r
-            xmlWriter.WriteStartElement("dict");\r
-\r
-            xmlWriter.WriteElementString("key", "AudioBitrate");\r
-            xmlWriter.WriteElementString("string", audioTrack.Bitrate.ToString());\r
-\r
-            xmlWriter.WriteElementString("key", "AudioEncoder");\r
-            xmlWriter.WriteElementString("string", EnumHelper<AudioEncoder>.GetDisplay(audioTrack.Encoder));\r
-\r
-            xmlWriter.WriteElementString("key", "AudioMixdown");\r
-            xmlWriter.WriteElementString("string", EnumHelper<Mixdown>.GetDisplay(audioTrack.MixDown));\r
-\r
-            xmlWriter.WriteElementString("key", "AudioSamplerate");\r
-            xmlWriter.WriteElementString("string", audioTrack.SampleRate.ToString().Replace("0", "Auto"));\r
-\r
-            xmlWriter.WriteElementString("key", "AudioTrack");\r
-            xmlWriter.WriteElementString("integer", audioTrack.Track.ToString());\r
-\r
-            xmlWriter.WriteElementString("key", "AudioTrackDRCSlider");\r
-            xmlWriter.WriteElementString("real", audioTrack.DRC.ToString());\r
-\r
-            xmlWriter.WriteElementString("key", "AudioTrackDescription");\r
-            xmlWriter.WriteElementString("string", "Unknown");\r
-\r
-            xmlWriter.WriteElementString("key", "AudioTrackGainSlider");\r
-            xmlWriter.WriteElementString("real", audioTrack.Gain.ToString());\r
-\r
-            xmlWriter.WriteEndElement();\r
-        }\r
-        #endregion\r
-    }\r
-}
\ No newline at end of file
index de76a1af3993bfbbcdf2f5b7c4d43405f38a35ef..4f30c0aa34120422ac15bc0733e79ecd9dbc6052 100644 (file)
@@ -11,6 +11,8 @@ namespace HandBrakeWPF.Services.Presets.Interfaces
 {\r
     using System.Collections.ObjectModel;\r
 \r
+    using HandBrake.ApplicationServices.Model;\r
+\r
     using HandBrakeWPF.Services.Presets.Model;\r
 \r
     /// <summary>\r
@@ -53,6 +55,21 @@ namespace HandBrakeWPF.Services.Presets.Interfaces
         /// </param>\r
         void Import(string filename);\r
 \r
+\r
+        /// <summary>\r
+        /// The export.\r
+        /// </summary>\r
+        /// <param name="filename">\r
+        /// The filename.\r
+        /// </param>\r
+        /// <param name="preset">\r
+        /// The preset.\r
+        /// </param>\r
+        /// <param name="configuration">\r
+        /// The configuration.\r
+        /// </param>\r
+        void Export(string filename, Preset preset, HBConfiguration configuration);\r
+\r
         /// <summary>\r
         /// Update a preset\r
         /// </summary>\r
index 6f1da9c99ad3f85a029d9c3e78cb57395fec9879..8e43dc4bbf7f96704863cd0619711a7b7b19feba 100644 (file)
@@ -76,11 +76,6 @@ namespace HandBrakeWPF.Services.Presets.Model
         /// </summary>\r
         public PresetPictureSettingsMode PictureSettingsMode { get; set; }\r
 \r
-        /// <summary>\r
-        /// Gets or sets a value indicating whether use deinterlace.\r
-        /// </summary>\r
-        public bool UseDeinterlace { get; set; }\r
-\r
         /// <summary>\r
         /// Gets or sets task.\r
         /// </summary>\r
index e3aee79bfe82262533f78de87fbdce38a11e2ae8..c47b101a163edb46497aa77858d2f56137f260a0 100644 (file)
@@ -22,6 +22,7 @@ namespace HandBrakeWPF.Services.Presets
     using HandBrake.ApplicationServices.Interop;\r
     using HandBrake.ApplicationServices.Interop.Json.Presets;\r
     using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
+    using HandBrake.ApplicationServices.Model;\r
     using HandBrake.ApplicationServices.Services.Encode.Model.Models;\r
     using HandBrake.ApplicationServices.Utilities;\r
 \r
@@ -193,13 +194,6 @@ namespace HandBrakeWPF.Services.Presets
                     preset = JsonPresetFactory.ImportPreset(hbPreset);\r
                     preset.Category = UserPresetCatgoryName;\r
 \r
-                    // Handle the PictureDecombDeinterlace key\r
-                    if (preset.UseDeinterlace)\r
-                    {\r
-                        preset.Task.Decomb = Decomb.Off;\r
-                        preset.Task.CustomDecomb = string.Empty;\r
-                    }\r
-\r
                     // Depending on the selected preset options, we may need to change some settings around.\r
                     // If the user chose not to use fitlers, remove them.\r
                     if (!preset.UsePictureFilters)\r
@@ -253,6 +247,24 @@ namespace HandBrakeWPF.Services.Presets
             }\r
         }\r
 \r
+        /// <summary>\r
+        /// The export.\r
+        /// </summary>\r
+        /// <param name="filename">\r
+        /// The filename.\r
+        /// </param>\r
+        /// <param name="preset">\r
+        /// The preset.\r
+        /// </param>\r
+        /// <param name="configuration">\r
+        /// The configuration.\r
+        /// </param>\r
+        public void Export(string filename, Preset preset, HBConfiguration configuration)\r
+        {\r
+            PresetTransportContainer container = JsonPresetFactory.ExportPreset(preset, configuration);\r
+            HandBrakePresetService.ExportPreset(filename, container);\r
+        }\r
+\r
         /// <summary>\r
         /// Update a preset\r
         /// </summary>\r
index 60b0c74a51d0abe8c3937fb953d1f65696e1078d..4f4fbaf2d0f0aebf8939fa6aa2b5377d84012be6 100644 (file)
@@ -1827,10 +1827,10 @@ namespace HandBrakeWPF.ViewModels
         {\r
             SaveFileDialog savefiledialog = new SaveFileDialog\r
                                                      {\r
-                                                         Filter = "plist|*.plist",\r
+                                                         Filter = "json|*.json",\r
                                                          CheckPathExists = true,\r
                                                          AddExtension = true,\r
-                                                         DefaultExt = ".plist",\r
+                                                         DefaultExt = ".json",\r
                                                          OverwritePrompt = true,\r
                                                          FilterIndex = 0\r
                                                      };\r
@@ -1841,10 +1841,7 @@ namespace HandBrakeWPF.ViewModels
 \r
                 if (!string.IsNullOrEmpty(filename))\r
                 {\r
-                    PlistFactory.Export(\r
-                        savefiledialog.FileName,\r
-                        this.selectedPreset,\r
-                        HandBrakeUtils.Build.ToString(CultureInfo.InvariantCulture));\r
+                    this.presetService.Export(savefiledialog.FileName, this.selectedPreset, HBConfigurationFactory.Create());\r
                 }\r
             }\r
             else\r