diff --git a/gaseous-server/Classes/SignatureIngestors/XML.cs b/gaseous-server/Classes/SignatureIngestors/XML.cs index e30d83c..a44845c 100644 --- a/gaseous-server/Classes/SignatureIngestors/XML.cs +++ b/gaseous-server/Classes/SignatureIngestors/XML.cs @@ -244,101 +244,5 @@ namespace gaseous_server.SignatureIngestors.XML } } } - - public void MigrateMetadatVersion() { - Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); - string sql = ""; - Dictionary dbDict = new Dictionary(); - - // update signature roms to v2 - sql = "SELECT Id, Flags, Attributes, IngestorVersion FROM Signatures_Roms WHERE IngestorVersion = 1"; - DataTable data = db.ExecuteCMD(sql); - if (data.Rows.Count > 0) - { - Logging.Log(Logging.LogType.Information, "Signature Ingestor - Database Update", "Updating " + data.Rows.Count + " database entries"); - int Counter = 0; - int LastCounterCheck = 0; - foreach (DataRow row in data.Rows) - { - List Flags = Newtonsoft.Json.JsonConvert.DeserializeObject>((string)Common.ReturnValueIfNull(row["flags"], "[]")); - List> Attributes = new List>(); - foreach (string Flag in Flags) - { - if (Flag.StartsWith("a")) - { - Attributes.Add( - new KeyValuePair( - "a", - Flag - ) - ); - } - else - { - string[] FlagCompare = Flag.Split(' '); - switch (FlagCompare[0].Trim().ToLower()) - { - case "cr": - // cracked - case "f": - // fixed - case "h": - // hacked - case "m": - // modified - case "p": - // pirated - case "t": - // trained - case "tr": - // translated - case "o": - // overdump - case "u": - // underdump - case "v": - // virus - case "b": - // bad dump - case "a": - // alternate - case "!": - // known verified dump - // ------------------- - string shavedToken = Flag.Substring(FlagCompare[0].Trim().Length).Trim(); - Attributes.Add(new KeyValuePair( - FlagCompare[0].Trim().ToLower(), - shavedToken - )); - break; - } - } - } - - string AttributesJson; - if (Attributes.Count > 0) - { - AttributesJson = Newtonsoft.Json.JsonConvert.SerializeObject(Attributes); - } - else - { - AttributesJson = "[]"; - } - - string updateSQL = "UPDATE Signatures_Roms SET Attributes=@attributes, IngestorVersion=2 WHERE Id=@id"; - dbDict = new Dictionary(); - dbDict.Add("attributes", AttributesJson); - dbDict.Add("id", (int)row["Id"]); - db.ExecuteCMD(updateSQL, dbDict); - - if ((Counter - LastCounterCheck) > 10) - { - LastCounterCheck = Counter; - Logging.Log(Logging.LogType.Information, "Signature Ingestor - Database Update", "Updating " + Counter + " / " + data.Rows.Count + " database entries"); - } - Counter += 1; - } - } - } } } \ No newline at end of file diff --git a/gaseous-server/Controllers/SystemController.cs b/gaseous-server/Controllers/SystemController.cs index 7cc40fc..df11c92 100644 --- a/gaseous-server/Controllers/SystemController.cs +++ b/gaseous-server/Controllers/SystemController.cs @@ -62,7 +62,9 @@ namespace gaseous_server.Controllers [Route("VersionFile")] [ProducesResponseType(StatusCodes.Status200OK)] public FileContentResult GetSystemVersionAsFile() { - string ver = "var AppVersion = \"" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + "\""; + Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); + string ver = "var AppVersion = \"" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + "\";" + Environment.NewLine + + "var DBSchemaVersion = \"" + db.GetDatabaseSchemaVersion() + "\";"; byte[] bytes = Encoding.UTF8.GetBytes(ver); return File(bytes, "text/javascript"); } diff --git a/gaseous-server/Program.cs b/gaseous-server/Program.cs index 0262a0a..f496f15 100644 --- a/gaseous-server/Program.cs +++ b/gaseous-server/Program.cs @@ -144,10 +144,6 @@ gaseous_server.Classes.Metadata.Platforms.GetPlatform(0); // organise library //gaseous_server.Classes.ImportGame.OrganiseLibrary(); -// Migrate signature data if needed -XMLIngestor ingestor = new XMLIngestor(); -ingestor.MigrateMetadatVersion(); - // add background tasks ProcessQueue.QueueItems.Add(new ProcessQueue.QueueItem(ProcessQueue.QueueItemType.SignatureIngestor, 60)); ProcessQueue.QueueItems.Add(new ProcessQueue.QueueItem( diff --git a/gaseous-server/wwwroot/images/ProgettoSnaps.gif b/gaseous-server/wwwroot/images/ProgettoSnaps.gif new file mode 100644 index 0000000..3caee9f Binary files /dev/null and b/gaseous-server/wwwroot/images/ProgettoSnaps.gif differ diff --git a/gaseous-server/wwwroot/pages/settings/about.html b/gaseous-server/wwwroot/pages/settings/about.html index af7c7a0..7975e4e 100644 --- a/gaseous-server/wwwroot/pages/settings/about.html +++ b/gaseous-server/wwwroot/pages/settings/about.html @@ -15,6 +15,10 @@ Server Version + + Database Schema Version + +

Data Sources

@@ -42,13 +46,20 @@ The Old School Emulation Center + + + + + + Progetto-Snaps + + \ No newline at end of file diff --git a/gaseous-tools/Database.cs b/gaseous-tools/Database.cs index c7d1bfe..5b81da0 100644 --- a/gaseous-tools/Database.cs +++ b/gaseous-tools/Database.cs @@ -108,14 +108,20 @@ namespace gaseous_tools Logging.Log(Logging.LogType.Information, "Database", "Schema version is " + SchemaVer); if (SchemaVer < i) { + // run pre-upgrade code + gaseous_tools.DatabaseMigration.PreUpgradeScript(i, _ConnectorType); + // apply schema! - Logging.Log(Logging.LogType.Information, "Database", "Schema update available - applying"); + Logging.Log(Logging.LogType.Information, "Database", "Updating schema to version " + i); ExecuteCMD(dbScript, dbDict); sql = "UPDATE schema_version SET schema_version=@schemaver"; dbDict = new Dictionary(); dbDict.Add("schemaver", i); ExecuteCMD(sql, dbDict); + + // run post-upgrade code + gaseous_tools.DatabaseMigration.PostUpgradeScript(i, _ConnectorType); } } } @@ -178,6 +184,28 @@ namespace gaseous_tools } } + public int GetDatabaseSchemaVersion() + { + switch (_ConnectorType) + { + case databaseType.MySql: + string sql = "SELECT schema_version FROM schema_version;"; + DataTable SchemaVersion = ExecuteCMD(sql); + if (SchemaVersion.Rows.Count == 0) + { + return 0; + } + else + { + return (int)SchemaVersion.Rows[0][0]; + } + + default: + return 0; + + } + } + public class SQLTransactionItem { public SQLTransactionItem() diff --git a/gaseous-tools/DatabaseMigration.cs b/gaseous-tools/DatabaseMigration.cs new file mode 100644 index 0000000..8d1f9db --- /dev/null +++ b/gaseous-tools/DatabaseMigration.cs @@ -0,0 +1,123 @@ +using System; +using System.Data; + +namespace gaseous_tools +{ + public static class DatabaseMigration + { + public static void PreUpgradeScript(int TargetSchemaVersion, gaseous_tools.Database.databaseType? DatabaseType) { + + } + + public static void PostUpgradeScript(int TargetSchemaVersion, gaseous_tools.Database.databaseType? DatabaseType) { + switch(DatabaseType) + { + case gaseous_tools.Database.databaseType.MySql: + switch (TargetSchemaVersion) + { + case 1002: + MySql_1002_MigrateMetadataVersion(); + break; + } + break; + + } + } + + private static void MySql_1002_MigrateMetadataVersion() { + Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); + string sql = ""; + Dictionary dbDict = new Dictionary(); + + // update signature roms to v2 + sql = "SELECT Id, Flags, Attributes, IngestorVersion FROM Signatures_Roms WHERE IngestorVersion = 1"; + DataTable data = db.ExecuteCMD(sql); + if (data.Rows.Count > 0) + { + Logging.Log(Logging.LogType.Information, "Signature Ingestor - Database Update", "Updating " + data.Rows.Count + " database entries"); + int Counter = 0; + int LastCounterCheck = 0; + foreach (DataRow row in data.Rows) + { + List Flags = Newtonsoft.Json.JsonConvert.DeserializeObject>((string)Common.ReturnValueIfNull(row["flags"], "[]")); + List> Attributes = new List>(); + foreach (string Flag in Flags) + { + if (Flag.StartsWith("a")) + { + Attributes.Add( + new KeyValuePair( + "a", + Flag + ) + ); + } + else + { + string[] FlagCompare = Flag.Split(' '); + switch (FlagCompare[0].Trim().ToLower()) + { + case "cr": + // cracked + case "f": + // fixed + case "h": + // hacked + case "m": + // modified + case "p": + // pirated + case "t": + // trained + case "tr": + // translated + case "o": + // overdump + case "u": + // underdump + case "v": + // virus + case "b": + // bad dump + case "a": + // alternate + case "!": + // known verified dump + // ------------------- + string shavedToken = Flag.Substring(FlagCompare[0].Trim().Length).Trim(); + Attributes.Add(new KeyValuePair( + FlagCompare[0].Trim().ToLower(), + shavedToken + )); + break; + } + } + } + + string AttributesJson; + if (Attributes.Count > 0) + { + AttributesJson = Newtonsoft.Json.JsonConvert.SerializeObject(Attributes); + } + else + { + AttributesJson = "[]"; + } + + string updateSQL = "UPDATE Signatures_Roms SET Attributes=@attributes, IngestorVersion=2 WHERE Id=@id"; + dbDict = new Dictionary(); + dbDict.Add("attributes", AttributesJson); + dbDict.Add("id", (int)row["Id"]); + db.ExecuteCMD(updateSQL, dbDict); + + if ((Counter - LastCounterCheck) > 10) + { + LastCounterCheck = Counter; + Logging.Log(Logging.LogType.Information, "Signature Ingestor - Database Update", "Updating " + Counter + " / " + data.Rows.Count + " database entries"); + } + Counter += 1; + } + } + } + } +} \ No newline at end of file