private bool LoadFromJson(JsonParser.ObjectValue jsonOb) { bool hasLoaded = false; try { FontSize = (JsonParser.FloatValue)jsonOb["fontSize"]; MaxDistanceFromCenter = (JsonParser.FloatValue)jsonOb["maxCenterDist"]; MaxDistanceFromCamera = (JsonParser.FloatValue)jsonOb["maxCameraDist"]; FilterNearbyActors = jsonOb.entries.ContainsKey("filterNearby") ? (JsonParser.BoolValue)jsonOb["filterNearby"] : false; JsonParser.ArrayValue arrPresets = (JsonParser.ArrayValue)jsonOb["presets"]; foreach (JsonParser.Value v in arrPresets.entries) { JsonParser.ObjectValue presetJsonOb = (JsonParser.ObjectValue)v; ActorFilterPreset presetOb = new ActorFilterPreset(); bool loadedPreset = presetOb.LoadFromJson(presetJsonOb); if (loadedPreset) { Presets.Add(presetOb); } } hasLoaded = true; } catch (Exception ex) { Logger.WriteLine("Failed to load settings, exception:" + ex); } return(hasLoaded); }
private void MergeOnlinePresets(List <string> onlinePresets) { PlayerSettings settings = PlayerSettings.Get(); bool hasChanges = false; for (int importIdx = 0; importIdx < onlinePresets.Count; importIdx++) { ActorFilterPreset testPreset = new ActorFilterPreset(); bool isValid = false; try { JsonParser.ObjectValue rootOb = JsonParser.ParseJson(onlinePresets[importIdx]); isValid = testPreset.LoadFromJson(rootOb); } catch (Exception ex) { Logger.WriteLine("Failed to merge synced preset #" + importIdx + ": " + ex); } if (isValid) { ActorFilterPreset existingPreset = settings.Presets.Find(x => x.Name == testPreset.Name); if (existingPreset != null && existingPreset.version >= testPreset.version) { Logger.WriteLine("Ignoring online preset #" + importIdx + ": " + testPreset.Name + " (v" + testPreset.version + ") => local version: " + existingPreset.version); continue; } if (existingPreset != null) { settings.Presets.Remove(existingPreset); } Logger.WriteLine("Using online preset #" + importIdx + ": " + testPreset.Name + " (v" + testPreset.version + ")"); settings.Presets.Add(testPreset); hasChanges = true; } } if (hasChanges) { UpdatePresetList(); } }
private void buttonImportPreset_Click(object sender, EventArgs e) { ActorFilterPreset loadedPreset = null; string importText = Clipboard.GetText(); if (!string.IsNullOrEmpty(importText) && importText.Length > 2 && importText[0] == '{') { ActorFilterPreset preset = new ActorFilterPreset(); try { JsonParser.ObjectValue jsonOb = JsonParser.ParseJson(importText); bool hasLoaded = preset.LoadFromJson(jsonOb); if (hasLoaded) { loadedPreset = preset; } } catch (Exception ex) { Logger.WriteLine("Import failed text:'" + importText + "', exception:" + ex); } } if (loadedPreset != null) { PlayerSettings settings = PlayerSettings.Get(); ActorFilterPreset existingPreset = settings.Presets.Find(x => (x.Name == loadedPreset.Name)); bool bCanAdd = false; if (existingPreset != null) { DialogResult dr = MessageBox.Show("Preset '" + existingPreset.Name + "' already exists, do you want to merge it?", Text, MessageBoxButtons.YesNoCancel); if (dr == DialogResult.Yes) { // merge existingPreset.Filters.AddRange(loadedPreset.Filters); } else if (dr == DialogResult.No) { // keep separate, create new name string UseName = existingPreset.Name; int sepIdx = UseName.LastIndexOf('#'); if (sepIdx > 0) { UseName = UseName.Substring(0, sepIdx); } for (int Idx = 2; Idx < 10000; Idx++) { string UniqueName = UseName + "#" + Idx; bool alreadyExists = settings.Presets.Find(x => (x.Name == UniqueName)) != null; if (!alreadyExists) { loadedPreset.Name = UniqueName; bCanAdd = true; break; } } } } else { bCanAdd = true; } if (bCanAdd) { settings.Presets.Add(loadedPreset); ListViewItem lvi = new ListViewItem(loadedPreset.Name); lvi.Tag = loadedPreset; listViewPresetManage.Items.Add(lvi); int itemIdx = comboBoxPreset.Items.Add(loadedPreset); comboBoxPreset.SelectedIndex = itemIdx; } } }