Compare commits

...

1 Commits

Author SHA1 Message Date
Michael Green
f2a58d23f0 Fix for broken first run on fresh installs (#297)
* Fix for broken first run on fresh installs
2024-02-11 00:53:22 +11:00
2 changed files with 87 additions and 37 deletions

View File

@@ -204,6 +204,8 @@ namespace gaseous_server.Classes
Logging.Log(Logging.LogType.Information, "Load Settings", "Loading setting " + SettingName + " from database"); Logging.Log(Logging.LogType.Information, "Load Settings", "Loading setting " + SettingName + " from database");
try try
{
if (Database.schema_version >= 1016)
{ {
switch ((int)dataRow["ValueType"]) switch ((int)dataRow["ValueType"])
{ {
@@ -219,6 +221,11 @@ namespace gaseous_server.Classes
break; break;
} }
} }
else
{
AppSettings.Add(SettingName, dataRow["Value"]);
}
}
catch (InvalidCastException castEx) catch (InvalidCastException castEx)
{ {
Logging.Log(Logging.LogType.Warning, "Settings", "Exception when reading server setting " + SettingName + ". Resetting to default.", castEx); Logging.Log(Logging.LogType.Warning, "Settings", "Exception when reading server setting " + SettingName + ". Resetting to default.", castEx);
@@ -249,17 +256,22 @@ namespace gaseous_server.Classes
} }
else else
{ {
string sql;
string sql = "SELECT Value, ValueDate FROM Settings WHERE Setting = @SettingName";
Dictionary<string, object> dbDict = new Dictionary<string, object> Dictionary<string, object> dbDict = new Dictionary<string, object>
{ {
{ "SettingName", SettingName } { "SettingName", SettingName }
}; };
DataTable dbResponse;
try try
{ {
Logging.Log(Logging.LogType.Debug, "Database", "Reading setting '" + SettingName + "'"); Logging.Log(Logging.LogType.Debug, "Database", "Reading setting '" + SettingName + "'");
DataTable dbResponse = db.ExecuteCMD(sql, dbDict);
if (Database.schema_version >= 1016)
{
sql = "SELECT Value, ValueDate FROM Settings WHERE Setting = @SettingName";
dbResponse = db.ExecuteCMD(sql, dbDict);
Type type = typeof(T); Type type = typeof(T);
if (dbResponse.Rows.Count == 0) if (dbResponse.Rows.Count == 0)
{ {
@@ -271,12 +283,31 @@ namespace gaseous_server.Classes
{ {
if (type.ToString() == "System.DateTime") if (type.ToString() == "System.DateTime")
{ {
AppSettings.Add(SettingName, dbResponse.Rows[0]["ValueDate"]); AppSettings.Add(SettingName, (T)dbResponse.Rows[0]["ValueDate"]);
return (T)dbResponse.Rows[0]["ValueDate"]; return (T)dbResponse.Rows[0]["ValueDate"];
} }
else else
{ {
AppSettings.Add(SettingName, dbResponse.Rows[0]["Value"]); AppSettings.Add(SettingName, (T)dbResponse.Rows[0]["Value"]);
return (T)dbResponse.Rows[0]["Value"];
}
}
}
else
{
sql = "SELECT Value FROM Settings WHERE Setting = @SettingName";
dbResponse = db.ExecuteCMD(sql, dbDict);
Type type = typeof(T);
if (dbResponse.Rows.Count == 0)
{
// no value with that name stored - respond with the default value
SetSetting<T>(SettingName, DefaultValue);
return DefaultValue;
}
else
{
AppSettings.Add(SettingName, (T)dbResponse.Rows[0]["Value"]);
return (T)dbResponse.Rows[0]["Value"]; return (T)dbResponse.Rows[0]["Value"];
} }
} }
@@ -317,8 +348,12 @@ namespace gaseous_server.Classes
public static void SetSetting<T>(string SettingName, T Value) public static void SetSetting<T>(string SettingName, T Value)
{ {
Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
string sql = "REPLACE INTO Settings (Setting, ValueType, Value, ValueDate) VALUES (@SettingName, @ValueType, @Value, @ValueDate)"; string sql;
Dictionary<string, object> dbDict; Dictionary<string, object> dbDict;
if (Database.schema_version >= 1016)
{
sql = "REPLACE INTO Settings (Setting, ValueType, Value, ValueDate) VALUES (@SettingName, @ValueType, @Value, @ValueDate)";
Type type = typeof(T); Type type = typeof(T);
if (type.ToString() == "System.DateTime") if (type.ToString() == "System.DateTime")
{ {
@@ -340,6 +375,16 @@ namespace gaseous_server.Classes
{ "ValueDate", null } { "ValueDate", null }
}; };
} }
}
else
{
sql = "REPLACE INTO Settings (Setting, Value) VALUES (@SettingName, @Value)";
dbDict = new Dictionary<string, object>
{
{ "SettingName", SettingName },
{ "Value", Value }
};
}
Logging.Log(Logging.LogType.Debug, "Database", "Storing setting '" + SettingName + "' to value: '" + Value + "'"); Logging.Log(Logging.LogType.Debug, "Database", "Storing setting '" + SettingName + "' to value: '" + Value + "'");
try try

View File

@@ -9,6 +9,8 @@ namespace gaseous_server.Classes
{ {
public class Database public class Database
{ {
public static int schema_version = 0;
public Database() public Database()
{ {
@@ -123,6 +125,9 @@ namespace gaseous_server.Classes
// run post-upgrade code // run post-upgrade code
DatabaseMigration.PostUpgradeScript(i, _ConnectorType); DatabaseMigration.PostUpgradeScript(i, _ConnectorType);
// update schema version variable
Database.schema_version = i;
} }
catch (Exception ex) catch (Exception ex)
{ {