diff --git a/gaseous-server/Program.cs b/gaseous-server/Program.cs index 3c5fa0d..c3ee292 100644 --- a/gaseous-server/Program.cs +++ b/gaseous-server/Program.cs @@ -8,6 +8,9 @@ Logging.Log(Logging.LogType.Information, "Startup", "Starting Gaseous Server"); Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); db.InitDB(); +// load app settings +Config.InitSettings(); + // set initial values Guid APIKey = Guid.NewGuid(); if (Config.ReadSetting("API Key", "Test API Key") == "Test API Key") diff --git a/gaseous-tools/Config.cs b/gaseous-tools/Config.cs index de72de4..05ac47f 100644 --- a/gaseous-tools/Config.cs +++ b/gaseous-tools/Config.cs @@ -138,32 +138,62 @@ namespace gaseous_tools File.WriteAllText(ConfigurationFilePath, configRaw); } - public static string ReadSetting(string SettingName, string DefaultValue) + private static Dictionary AppSettings = new Dictionary(); + + public static void InitSettings() { Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); - string sql = "SELECT * FROM settings WHERE setting = @settingname"; - Dictionary dbDict = new Dictionary(); - dbDict.Add("settingname", SettingName); - dbDict.Add("value", DefaultValue); + string sql = "SELECT * FROM settings"; - try + DataTable dbResponse = db.ExecuteCMD(sql); + foreach (DataRow dataRow in dbResponse.Rows) { - Logging.Log(Logging.LogType.Debug, "Database", "Reading setting '" + SettingName + "'"); - DataTable dbResponse = db.ExecuteCMD(sql, dbDict); - if (dbResponse.Rows.Count == 0) + if (AppSettings.ContainsKey((string)dataRow["setting"])) { - // no value with that name stored - respond with the default value - return DefaultValue; + AppSettings[(string)dataRow["setting"]] = (string)dataRow["value"]; } else { - return (string)dbResponse.Rows[0][0]; + AppSettings.Add((string)dataRow["setting"], (string)dataRow["value"]); } } - catch (Exception ex) + } + + public static string ReadSetting(string SettingName, string DefaultValue) + { + if (AppSettings.ContainsKey(SettingName)) { - Logging.Log(Logging.LogType.Critical, "Database", "Failed reading setting " + SettingName, ex); - throw; + return AppSettings[SettingName]; + } + else + { + Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); + string sql = "SELECT * FROM settings WHERE setting = @settingname"; + Dictionary dbDict = new Dictionary(); + dbDict.Add("settingname", SettingName); + dbDict.Add("value", DefaultValue); + + try + { + Logging.Log(Logging.LogType.Debug, "Database", "Reading setting '" + SettingName + "'"); + DataTable dbResponse = db.ExecuteCMD(sql, dbDict); + if (dbResponse.Rows.Count == 0) + { + // no value with that name stored - respond with the default value + SetSetting(SettingName, DefaultValue); + return DefaultValue; + } + else + { + AppSettings.Add(SettingName, (string)dbResponse.Rows[0][0]); + return (string)dbResponse.Rows[0][0]; + } + } + catch (Exception ex) + { + Logging.Log(Logging.LogType.Critical, "Database", "Failed reading setting " + SettingName, ex); + throw; + } } } @@ -179,6 +209,15 @@ namespace gaseous_tools try { db.ExecuteCMD(sql, dbDict); + + if (AppSettings.ContainsKey(SettingName)) + { + AppSettings[SettingName] = Value; + } + else + { + AppSettings.Add(SettingName, Value); + } } catch (Exception ex) {