private void HandlePresetListsForSave(List <Preset> processList, Dictionary <string, HBPresetCategory> presetCategories, List <HBPreset> uncategorisedPresets) { foreach (Preset item in processList) { if (string.IsNullOrEmpty(item.Category)) { uncategorisedPresets.Add(JsonPresetFactory.CreateHbPreset(item, HBConfigurationFactory.Create())); } else { HBPreset preset = JsonPresetFactory.CreateHbPreset(item, HBConfigurationFactory.Create()); if (presetCategories.ContainsKey(item.Category)) { presetCategories[item.Category].ChildrenArray.Add(preset); } else { presetCategories[item.Category] = new HBPresetCategory { ChildrenArray = new List <HBPreset> { preset }, Folder = true, PresetName = item.Category, Type = item.IsBuildIn ? 0 : 1 }; } } } }
/// <summary> /// Update the preset files /// </summary> private void SavePresetFiles() { try { // Verify Directories. string directory = Path.GetDirectoryName(this.presetFile); if (directory != null && !Directory.Exists(directory)) { Directory.CreateDirectory(directory); } // Organise the Presets list into Json Equivalent objects. Dictionary <string, PresetCategory> presetCategories = new Dictionary <string, PresetCategory>(); List <HBPreset> uncategorisedPresets = new List <HBPreset>(); // Handle User Presets first. foreach (Preset item in this.flatPresetList.Values.OrderBy(o => o.IsBuildIn)) { if (string.IsNullOrEmpty(item.Category)) { uncategorisedPresets.Add(JsonPresetFactory.CreateHbPreset(item, HBConfigurationFactory.Create())); } else { HBPreset preset = JsonPresetFactory.CreateHbPreset(item, HBConfigurationFactory.Create()); if (presetCategories.ContainsKey(item.Category)) { presetCategories[item.Category].ChildrenArray.Add(preset); } else { presetCategories[item.Category] = new PresetCategory { ChildrenArray = new List <HBPreset> { preset }, Folder = true, PresetName = item.Category, Type = item.IsBuildIn ? 0 : 1 }; } } } // Wrap the categories in a container. JsonSerializerSettings settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }; PresetTransportContainer container = new PresetTransportContainer( Constants.PresetVersionMajor, Constants.PresetVersionMinor, Constants.PresetVersionMicro) { PresetList = new List <object>() }; container.PresetList.AddRange(presetCategories.Values); container.PresetList.AddRange(uncategorisedPresets); // Write the preset container out to file. using (FileStream strm = new FileStream(this.presetFile, FileMode.Create, FileAccess.Write)) { string presetsJson = JsonConvert.SerializeObject(container, Formatting.Indented, settings); using (StreamWriter writer = new StreamWriter(strm)) { writer.WriteLine(presetsJson); } } } catch (Exception exc) { Debug.WriteLine(exc); throw new GeneralApplicationException("Unable to write to the presets file.", "The details section below may indicate why this error has occurred.", exc); } }