]> granicus.if.org Git - handbrake/commitdiff
WinGui: Re-implement the ability to force a preset upgrade on nightly build users.
authorScott <sr55.hb@outlook.com>
Sun, 13 Dec 2015 21:10:09 +0000 (21:10 +0000)
committerScott <sr55.hb@outlook.com>
Mon, 14 Dec 2015 20:12:28 +0000 (20:12 +0000)
win/CS/HandBrakeWPF/Services/Presets/PresetService.cs
win/CS/HandBrakeWPF/UserSettingConstants.cs
win/CS/HandBrakeWPF/defaultsettings.xml

index ba2c61e63ce41aadd49e6bbe75d862e669e31899..de1aefbf88a6b15a9ac73d4b7e4f5458b82f3839 100644 (file)
@@ -43,10 +43,12 @@ namespace HandBrakeWPF.Services.Presets
     {\r
         #region Private Variables\r
 \r
+        public const int ForcePresetReset = 0;\r
         public static string UserPresetCatgoryName = "User Presets";\r
         private readonly string presetFile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\HandBrake\\presets.json";\r
         private readonly ObservableCollection<Preset> presets = new ObservableCollection<Preset>();\r
         private readonly IErrorService errorService;\r
+        private readonly IUserSettingService userSettingService;\r
 \r
         #endregion\r
 \r
@@ -56,9 +58,13 @@ namespace HandBrakeWPF.Services.Presets
         /// <param name="errorService">\r
         /// The error service.\r
         /// </param>\r
-        public PresetService(IErrorService errorService)\r
+        /// <param name="userSettingService">\r
+        /// The User setting service.\r
+        /// </param>\r
+        public PresetService(IErrorService errorService, IUserSettingService userSettingService)\r
         {\r
             this.errorService = errorService;\r
+            this.userSettingService = userSettingService;\r
         }\r
 \r
         /// <summary>\r
@@ -489,91 +495,82 @@ namespace HandBrakeWPF.Services.Presets
                 if (!File.Exists(this.presetFile))\r
                 {\r
                     this.UpdateBuiltInPresets();\r
-                    return;\r
+                    return; // Update built-in presets stores the presets locally, so just return.\r
                 }\r
 \r
                 // Otherwise, we already have a file, so lets try load it.\r
-                bool versionCheckChange = false;\r
+                PresetTransportContainer container = null;\r
                 using (StreamReader reader = new StreamReader(this.presetFile))\r
                 {\r
-                    // New Preset Format.\r
-                    PresetTransportContainer container = null;\r
+\r
                     try\r
                     {\r
                         container = JsonConvert.DeserializeObject<PresetTransportContainer>(reader.ReadToEnd());\r
                     }\r
-                    catch (Exception)\r
+                    catch (Exception exc)\r
                     {\r
-                        // ignored\r
+                        Debug.WriteLine("Failed to parse presets file: " + exc);\r
                     }\r
+                }\r
 \r
-                    // Sanity Check. Did the container deserialise.\r
-                    if (container?.PresetList == null)\r
-                    {\r
-                        // Close and Dispose of early.\r
-                        reader.Close();\r
-                        reader.Dispose();\r
-\r
-                        string filename = this.RecoverFromCorruptedPresetFile(this.presetFile);\r
-                        this.errorService.ShowMessageBox(\r
-                           Resources.PresetService_UnableToLoadPresets + filename,\r
-                           Resources.PresetService_UnableToLoad,\r
-                           MessageBoxButton.OK,\r
-                           MessageBoxImage.Exclamation);\r
-                     \r
-                        this.UpdateBuiltInPresets();\r
-                        return;\r
-                    }\r
+                // Sanity Check. Did the container deserialise.\r
+                if (container == null || container.PresetList == null)\r
+                {\r
+                    string filename = this.RecoverFromCorruptedPresetFile(this.presetFile);\r
+                    this.errorService.ShowMessageBox(\r
+                       Resources.PresetService_UnableToLoadPresets + filename,\r
+                       Resources.PresetService_UnableToLoad,\r
+                       MessageBoxButton.OK,\r
+                       MessageBoxImage.Exclamation);\r
 \r
-                    // Version Check\r
-                    // If we have old presets, or the container wasn't parseable, or we have a version mismatch, backup the user preset file \r
-                    // incase something goes wrong.\r
-                    if (container.VersionMajor != Constants.PresetVersionMajor || container.VersionMinor != Constants.PresetVersionMinor || container.VersionMicro != Constants.PresetVersionMicro)\r
-                    {\r
-                        string fileName = this.ArchivePresetFile(this.presetFile);\r
-                        this.errorService.ShowMessageBox(\r
-                            Resources.PresetService_PresetsOutOfDate\r
-                            + Environment.NewLine + Environment.NewLine + Resources.PresetService_ArchiveFile + fileName,\r
-                            Resources.PresetService_UnableToLoad,\r
-                            MessageBoxButton.OK,\r
-                            MessageBoxImage.Exclamation);\r
-                        versionCheckChange = true;\r
-                    }\r
+                    this.UpdateBuiltInPresets();\r
+                    return; // Update built-in presets stores the presets locally, so just return.\r
+                }\r
 \r
-                    // Process the presets.\r
-                    foreach (var item in container.PresetList)\r
-                    {\r
-                        object deserialisedItem = JsonConvert.DeserializeObject<PresetCategory>(item.ToString()); ;\r
-        \r
-                        // Handle Categorised Presets.\r
-                        PresetCategory category = deserialisedItem as PresetCategory;\r
-                        if (category != null && category.Folder)\r
-                        {\r
-                            foreach (HBPreset hbpreset in category.ChildrenArray)\r
-                            {\r
-                                Preset preset = JsonPresetFactory.ImportPreset(hbpreset);\r
-                                preset.Category = category.PresetName;\r
-                                preset.IsBuildIn = hbpreset.Type == 0;\r
-\r
-                                // IF we are using Source Max, Set the Max Width / Height values.\r
-                                if (preset.PictureSettingsMode == PresetPictureSettingsMode.SourceMaximum)\r
-                                {\r
-                                    preset.Task.MaxWidth = preset.Task.Height;\r
-                                    preset.Task.MaxHeight = preset.Task.Width;\r
-                                }\r
-\r
-                                this.presets.Add(preset);\r
-                            }\r
-                        }\r
+                // Version Check\r
+                // If we have old presets, or the container wasn't parseable, or we have a version mismatch, backup the user preset file \r
+                // incase something goes wrong and reset built-in presets, then re-save.\r
+                if (container.VersionMajor != Constants.PresetVersionMajor || container.VersionMinor != Constants.PresetVersionMinor || container.VersionMicro != Constants.PresetVersionMicro)\r
+                {\r
+                    string fileName = this.ArchivePresetFile(this.presetFile);\r
+                    this.errorService.ShowMessageBox(\r
+                        Resources.PresetService_PresetsOutOfDate\r
+                        + Environment.NewLine + Environment.NewLine + Resources.PresetService_ArchiveFile + fileName,\r
+                        Resources.PresetService_UnableToLoad,\r
+                        MessageBoxButton.OK,\r
+                        MessageBoxImage.Exclamation);\r
+                    this.UpdateBuiltInPresets(); // Update built-in presets stores the presets locally, so just return.\r
+                    return;\r
+                }\r
+\r
+                // Force Upgrade of presets\r
+                if (this.userSettingService.GetUserSetting<int>(UserSettingConstants.ForcePresetReset) > ForcePresetReset)\r
+                {\r
+                    string fileName = this.ArchivePresetFile(this.presetFile);\r
+                    this.errorService.ShowMessageBox(\r
+                        Resources.PresetService_PresetsOutOfDate\r
+                        + Environment.NewLine + Environment.NewLine + Resources.PresetService_ArchiveFile + fileName,\r
+                        Resources.PresetService_UnableToLoad,\r
+                        MessageBoxButton.OK,\r
+                        MessageBoxImage.Exclamation);\r
+                    this.UpdateBuiltInPresets(); // Update built-in presets stores the presets locally, so just return.\r
+                    return;\r
+                }\r
 \r
-                        // Uncategorised Presets\r
-                        deserialisedItem = JsonConvert.DeserializeObject<HBPreset>(item.ToString());\r
-                        HBPreset hbPreset = deserialisedItem as HBPreset;\r
-                        if (hbPreset != null && !hbPreset.Folder)\r
+                // The presets file loaded was OK, so process it.\r
+                foreach (var item in container.PresetList)\r
+                {\r
+                    object deserialisedItem = JsonConvert.DeserializeObject<PresetCategory>(item.ToString());\r
+\r
+                    // Handle Categorised Presets.\r
+                    PresetCategory category = deserialisedItem as PresetCategory;\r
+                    if (category != null && category.Folder)\r
+                    {\r
+                        foreach (HBPreset hbpreset in category.ChildrenArray)\r
                         {\r
-                            Preset preset = JsonPresetFactory.ImportPreset(hbPreset);\r
-                            preset.Category = UserPresetCatgoryName;\r
-                            preset.IsBuildIn = hbPreset.Type == 1;\r
+                            Preset preset = JsonPresetFactory.ImportPreset(hbpreset);\r
+                            preset.Category = category.PresetName;\r
+                            preset.IsBuildIn = hbpreset.Type == 0;\r
 \r
                             // IF we are using Source Max, Set the Max Width / Height values.\r
                             if (preset.PictureSettingsMode == PresetPictureSettingsMode.SourceMaximum)\r
@@ -585,12 +582,25 @@ namespace HandBrakeWPF.Services.Presets
                             this.presets.Add(preset);\r
                         }\r
                     }\r
-                }\r
 \r
-                // Resave the presets if we failed the version check to update the container\r
-                if (versionCheckChange)\r
-                {\r
-                    this.SavePresetFiles();\r
+                    // Uncategorised Presets\r
+                    deserialisedItem = JsonConvert.DeserializeObject<HBPreset>(item.ToString());\r
+                    HBPreset hbPreset = deserialisedItem as HBPreset;\r
+                    if (hbPreset != null && !hbPreset.Folder)\r
+                    {\r
+                        Preset preset = JsonPresetFactory.ImportPreset(hbPreset);\r
+                        preset.Category = UserPresetCatgoryName;\r
+                        preset.IsBuildIn = hbPreset.Type == 1;\r
+\r
+                        // IF we are using Source Max, Set the Max Width / Height values.\r
+                        if (preset.PictureSettingsMode == PresetPictureSettingsMode.SourceMaximum)\r
+                        {\r
+                            preset.Task.MaxWidth = preset.Task.Height;\r
+                            preset.Task.MaxHeight = preset.Task.Width;\r
+                        }\r
+\r
+                        this.presets.Add(preset);\r
+                    }\r
                 }\r
             }\r
             catch (Exception ex)\r
index 3956827bd2dca3e445fdce9b97805c802f70d878..f623c15d43a3a5818909f04d014456a36172abc0 100644 (file)
@@ -220,7 +220,12 @@ namespace HandBrakeWPF
         /// The Show Queue in-line option.\r
         /// </summary>\r
         public const string ShowQueueInline = "ShowQueueInline";\r
-        \r
+\r
+        /// <summary>\r
+        /// Setting to allow mid-version upgrades of presets.\r
+        /// </summary>\r
+        public const string ForcePresetReset = "ForcePresetReset";\r
+\r
         #endregion\r
     }\r
 }
\ No newline at end of file
index cd7284a2b33d0b4c8786ae3eebd6be22db64c3e8..762734009ffafbef40cee9a047ffb4f1e6014dee 100644 (file)
       <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d4p1:type="q1:long" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">10000000000</anyType>\r
     </value>\r
   </item>\r
+  <item>\r
+    <key>\r
+      <string>ForcePresetReset</string>\r
+    </key>\r
+    <value>\r
+      <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" d4p1:type="q1:int" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">0</anyType>\r
+    </value>\r
+  </item>\r
 </dictionary>
\ No newline at end of file