private T ProcessSetting <T>(RawSettings settings, string settingsKey, T defaultValue, Func <string, T> parser) { T t; var defaultValueString = defaultValue.ToString(); if (!settings.ContainsKey(settingsKey)) { settings.Add(settingsKey, defaultValueString); t = defaultValue; } else { try { t = parser(settings.GetItem <string>(settingsKey)); } catch (Exception) { _logger.Warning( $"[Heat] Invalid '{settingsKey}' setting specified; defaulting to '{defaultValueString}'"); settings.Remove(settingsKey); settings.Add(settingsKey, defaultValueString); t = defaultValue; } } return(t); }
private Settings InitializeSettings() { var settings = new RawSettings("Heat.plugin"); if (!settings.ContainsKey("toggleHotkey")) { settings.Add("toggleHotkey", "LeftControl+H"); } var units = ProcessSetting(settings, "units", Units.Automatic, x => (Units)Enum.Parse(typeof(Units), x, true)); var display = ProcessSetting(settings, "display", Display.Watermark, x => (Display)Enum.Parse(typeof(Display), x, true)); var activation = ProcessSetting(settings, "activation", Activation.Always, x => (Activation)Enum.Parse(typeof(Activation), x, true)); var warningThreshold = ProcessSetting(settings, "warningThreshold", 0.8f, float.Parse); settings.Save(); return(new Settings(settings.GetItem <string>("toggleHotkey"), units, display, activation, warningThreshold)); }