refactor: made the read and set settings functions more efficient

This commit is contained in:
Michael Green
2023-05-19 23:25:46 +10:00
parent 95872ac847
commit ae49f2f47c
2 changed files with 57 additions and 15 deletions

View File

@@ -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); Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
db.InitDB(); db.InitDB();
// load app settings
Config.InitSettings();
// set initial values // set initial values
Guid APIKey = Guid.NewGuid(); Guid APIKey = Guid.NewGuid();
if (Config.ReadSetting("API Key", "Test API Key") == "Test API Key") if (Config.ReadSetting("API Key", "Test API Key") == "Test API Key")

View File

@@ -138,32 +138,62 @@ namespace gaseous_tools
File.WriteAllText(ConfigurationFilePath, configRaw); File.WriteAllText(ConfigurationFilePath, configRaw);
} }
public static string ReadSetting(string SettingName, string DefaultValue) private static Dictionary<string, string> AppSettings = new Dictionary<string, string>();
public static void InitSettings()
{ {
Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
string sql = "SELECT * FROM settings WHERE setting = @settingname"; string sql = "SELECT * FROM settings";
Dictionary<string, object> dbDict = new Dictionary<string, object>();
dbDict.Add("settingname", SettingName);
dbDict.Add("value", DefaultValue);
try DataTable dbResponse = db.ExecuteCMD(sql);
foreach (DataRow dataRow in dbResponse.Rows)
{ {
Logging.Log(Logging.LogType.Debug, "Database", "Reading setting '" + SettingName + "'"); if (AppSettings.ContainsKey((string)dataRow["setting"]))
DataTable dbResponse = db.ExecuteCMD(sql, dbDict);
if (dbResponse.Rows.Count == 0)
{ {
// no value with that name stored - respond with the default value AppSettings[(string)dataRow["setting"]] = (string)dataRow["value"];
return DefaultValue;
} }
else 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); return AppSettings[SettingName];
throw; }
else
{
Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
string sql = "SELECT * FROM settings WHERE setting = @settingname";
Dictionary<string, object> dbDict = new Dictionary<string, object>();
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 try
{ {
db.ExecuteCMD(sql, dbDict); db.ExecuteCMD(sql, dbDict);
if (AppSettings.ContainsKey(SettingName))
{
AppSettings[SettingName] = Value;
}
else
{
AppSettings.Add(SettingName, Value);
}
} }
catch (Exception ex) catch (Exception ex)
{ {