From 81b58e9b9ff4c624a52a2815fe2ac751dacc89ed Mon Sep 17 00:00:00 2001 From: Michael Green <84688932+michael-j-green@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:46:04 +1100 Subject: [PATCH] Add Redump and No-Intro DAT support (#467) --- gaseous-server/Classes/Common.cs | 44 ++ gaseous-server/Classes/DatabaseMigration.cs | 44 ++ gaseous-server/Classes/ImportGames.cs | 25 +- .../Classes/SignatureIngestors/XML.cs | 506 ++++++++++++------ gaseous-server/Classes/SignatureManagement.cs | 15 +- gaseous-server/ProcessQueue.cs | 30 +- gaseous-server/Support/Country.txt | 73 +++ .../Support/Database/MySQL/gaseous-1023.sql | 37 ++ gaseous-server/Support/Language.txt | 47 ++ gaseous-server/gaseous-server.csproj | 6 +- .../wwwroot/images/NoIntro-logo.svg | 8 + gaseous-server/wwwroot/images/redump.png | Bin 0 -> 93945 bytes .../wwwroot/pages/settings/about.html | 21 + 13 files changed, 670 insertions(+), 186 deletions(-) create mode 100644 gaseous-server/Support/Country.txt create mode 100644 gaseous-server/Support/Database/MySQL/gaseous-1023.sql create mode 100644 gaseous-server/Support/Language.txt create mode 100644 gaseous-server/wwwroot/images/NoIntro-logo.svg create mode 100644 gaseous-server/wwwroot/images/redump.png diff --git a/gaseous-server/Classes/Common.cs b/gaseous-server/Classes/Common.cs index bd6cf8e..05946f7 100644 --- a/gaseous-server/Classes/Common.cs +++ b/gaseous-server/Classes/Common.cs @@ -159,6 +159,50 @@ namespace gaseous_server.Classes return defaultValue; } } + + public static int GetLookupByCode(LookupTypes LookupType, string Code) + { + Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); + string sql = "SELECT Id FROM " + LookupType.ToString() + " WHERE Code = @code"; + Dictionary dbDict = new Dictionary{ + { "code", Code } + }; + + DataTable data = db.ExecuteCMD(sql, dbDict); + if (data.Rows.Count == 0) + { + return -1; + } + else + { + return (int)data.Rows[0]["Id"]; + } + } + + public static int GetLookupByValue(LookupTypes LookupType, string Value) + { + Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); + string sql = "SELECT Id FROM " + LookupType.ToString() + " WHERE Value = @value"; + Dictionary dbDict = new Dictionary{ + { "value", Value } + }; + + DataTable data = db.ExecuteCMD(sql, dbDict); + if (data.Rows.Count == 0) + { + return -1; + } + else + { + return (int)data.Rows[0]["Id"]; + } + } + + public enum LookupTypes + { + Country, + Language + } } /// diff --git a/gaseous-server/Classes/DatabaseMigration.cs b/gaseous-server/Classes/DatabaseMigration.cs index b901b28..b739195 100644 --- a/gaseous-server/Classes/DatabaseMigration.cs +++ b/gaseous-server/Classes/DatabaseMigration.cs @@ -64,6 +64,8 @@ namespace gaseous_server.Classes public static void PostUpgradeScript(int TargetSchemaVersion, Database.databaseType? DatabaseType) { + var assembly = Assembly.GetExecutingAssembly(); + Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); string sql = ""; Dictionary dbDict = new Dictionary(); @@ -103,6 +105,48 @@ namespace gaseous_server.Classes sql = "DELETE FROM Settings WHERE Setting LIKE 'LastRun_%';"; db.ExecuteNonQuery(sql); break; + + case 1023: + // load country list + Logging.Log(Logging.LogType.Information, "Database Upgrade", "Adding country look up table contents"); + + string countryResourceName = "gaseous_server.Support.Country.txt"; + using (Stream stream = assembly.GetManifestResourceStream(countryResourceName)) + using (StreamReader reader = new StreamReader(stream)) + { + do + { + string[] line = reader.ReadLine().Split("|"); + + sql = "INSERT INTO Country (Code, Value) VALUES (@code, @value);"; + dbDict = new Dictionary{ + { "code", line[0] }, + { "value", line[1] } + }; + db.ExecuteNonQuery(sql, dbDict); + } while (reader.EndOfStream == false); + } + + // load language list + Logging.Log(Logging.LogType.Information, "Database Upgrade", "Adding language look up table contents"); + + string languageResourceName = "gaseous_server.Support.Language.txt"; + using (Stream stream = assembly.GetManifestResourceStream(languageResourceName)) + using (StreamReader reader = new StreamReader(stream)) + { + do + { + string[] line = reader.ReadLine().Split("|"); + + sql = "INSERT INTO Language (Code, Value) VALUES (@code, @value);"; + dbDict = new Dictionary{ + { "code", line[0] }, + { "value", line[1] } + }; + db.ExecuteNonQuery(sql, dbDict); + } while (reader.EndOfStream == false); + } + break; } break; } diff --git a/gaseous-server/Classes/ImportGames.cs b/gaseous-server/Classes/ImportGames.cs index 01c5759..69dd005 100644 --- a/gaseous-server/Classes/ImportGames.cs +++ b/gaseous-server/Classes/ImportGames.cs @@ -429,23 +429,20 @@ namespace gaseous_server.Classes Logging.Log(Logging.LogType.Information, "Move Game ROM", "Moving " + romPath + " to " + DestinationPath); if (File.Exists(DestinationPath)) { - Logging.Log(Logging.LogType.Information, "Move Game ROM", "A file with the same name exists at the destination - aborting"); - return false; + Logging.Log(Logging.LogType.Information, "Move Game ROM", "A file with the same name exists at the destination - overwriting"); } - else - { - File.Move(romPath, DestinationPath); - // update the db - Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); - string sql = "UPDATE Games_Roms SET Path=@path WHERE Id=@id"; - Dictionary dbDict = new Dictionary(); - dbDict.Add("id", RomId); - dbDict.Add("path", DestinationPath); - db.ExecuteCMD(sql, dbDict); + File.Move(romPath, DestinationPath, true); - return true; - } + // update the db + Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); + string sql = "UPDATE Games_Roms SET Path=@path WHERE Id=@id"; + Dictionary dbDict = new Dictionary(); + dbDict.Add("id", RomId); + dbDict.Add("path", DestinationPath); + db.ExecuteCMD(sql, dbDict); + + return true; } } else diff --git a/gaseous-server/Classes/SignatureIngestors/XML.cs b/gaseous-server/Classes/SignatureIngestors/XML.cs index 75eb02f..ff5ee6f 100644 --- a/gaseous-server/Classes/SignatureIngestors/XML.cs +++ b/gaseous-server/Classes/SignatureIngestors/XML.cs @@ -8,21 +8,49 @@ namespace gaseous_server.SignatureIngestors.XML { public class XMLIngestor : QueueItemStatus { - public void Import(string SearchPath, gaseous_signature_parser.parser.SignatureParser XMLType) + public void Import(string SearchPath, string ProcessedDirectory, gaseous_signature_parser.parser.SignatureParser XMLType) { // connect to database Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); + string? XMLDBSearchPath = null; + string? XMLDBProcessedDirectory = null; + if (XMLType == gaseous_signature_parser.parser.SignatureParser.NoIntro) + { + XMLDBSearchPath = Path.Combine(SearchPath, "DB"); + XMLDBProcessedDirectory = Path.Combine(ProcessedDirectory, "DB"); + SearchPath = Path.Combine(SearchPath, "DAT"); + ProcessedDirectory = Path.Combine(ProcessedDirectory, "DAT"); + } + // process provided files - Logging.Log(Logging.LogType.Information, "Signature Ingestor - XML", "Importing from " + SearchPath); if (!Directory.Exists(SearchPath)) { Directory.CreateDirectory(SearchPath); } + if (!Directory.Exists(ProcessedDirectory)) + { + Directory.CreateDirectory(ProcessedDirectory); + } string[] PathContents = Directory.GetFiles(SearchPath); Array.Sort(PathContents); + string[]? DBPathContents = null; + if (XMLDBSearchPath != null) + { + if (!Directory.Exists(XMLDBSearchPath)) + { + Directory.CreateDirectory(XMLDBSearchPath); + } + if (!Directory.Exists(XMLDBProcessedDirectory)) + { + Directory.CreateDirectory(XMLDBProcessedDirectory); + } + + DBPathContents = Directory.GetFiles(XMLDBSearchPath); + } + string sql = ""; Dictionary dbDict = new Dictionary(); System.Data.DataTable sigDB; @@ -33,226 +61,380 @@ namespace gaseous_server.SignatureIngestors.XML SetStatus(i + 1, PathContents.Length, "Processing signature file: " + XMLFile); - if (Common.SkippableFiles.Contains(Path.GetFileName(XMLFile), StringComparer.OrdinalIgnoreCase)) - { - Logging.Log(Logging.LogType.Information, "Signature Ingestor - XML", "Skipping file: " + XMLFile); - } - else - { - // check xml file md5 - Common.hashObject hashObject = new Common.hashObject(XMLFile); - sql = "SELECT * FROM Signatures_Sources WHERE SourceMD5=@sourcemd5"; - dbDict = new Dictionary(); - dbDict.Add("sourcemd5", hashObject.md5hash); - sigDB = db.ExecuteCMD(sql, dbDict); + Logging.Log(Logging.LogType.Information, "Signature Ingest", "(" + (i + 1) + " / " + PathContents.Length + ") Processing " + XMLType.ToString() + " DAT file: " + XMLFile); - if (sigDB.Rows.Count == 0) + string? DBFile = null; + if (XMLDBSearchPath != null) + { + switch (XMLType) { - try - { - Logging.Log(Logging.LogType.Information, "Signature Ingestor - XML", "Importing file: " + XMLFile); - - // start parsing file - gaseous_signature_parser.parser Parser = new gaseous_signature_parser.parser(); - RomSignatureObject Object = Parser.ParseSignatureDAT(XMLFile, XMLType); - - // store in database - string[] flipNameAndDescription = { - "MAMEArcade", - "MAMEMess" - }; - - // store source object - bool processGames = false; - if (Object.SourceMd5 != null) + case gaseous_signature_parser.parser.SignatureParser.NoIntro: + for (UInt16 x = 0; x < DBPathContents.Length; x++) { - sql = "SELECT * FROM Signatures_Sources WHERE SourceMD5=@sourcemd5"; - dbDict = new Dictionary(); - string sourceUriStr = ""; - if (Object.Url != null) + string tempDBFileName = Path.GetFileNameWithoutExtension(DBPathContents[x].Replace(" (DB Export)", "")); + if (tempDBFileName == Path.GetFileNameWithoutExtension(XMLFile)) { - sourceUriStr = Object.Url.ToString(); + DBFile = DBPathContents[x]; + Logging.Log(Logging.LogType.Information, "Signature Ingest", "Using DB file: " + DBFile); + break; } - dbDict.Add("name", Common.ReturnValueIfNull(Object.Name, "")); - dbDict.Add("description", Common.ReturnValueIfNull(Object.Description, "")); - dbDict.Add("category", Common.ReturnValueIfNull(Object.Category, "")); - dbDict.Add("version", Common.ReturnValueIfNull(Object.Version, "")); - dbDict.Add("author", Common.ReturnValueIfNull(Object.Author, "")); - dbDict.Add("email", Common.ReturnValueIfNull(Object.Email, "")); - dbDict.Add("homepage", Common.ReturnValueIfNull(Object.Homepage, "")); - dbDict.Add("uri", sourceUriStr); - dbDict.Add("sourcetype", Common.ReturnValueIfNull(Object.SourceType, "")); - dbDict.Add("sourcemd5", Object.SourceMd5); - dbDict.Add("sourcesha1", Object.SourceSHA1); + } + break; + } + } + + // check xml file md5 + Common.hashObject hashObject = new Common.hashObject(XMLFile); + sql = "SELECT * FROM Signatures_Sources WHERE SourceMD5=@sourcemd5"; + dbDict = new Dictionary(); + dbDict.Add("sourcemd5", hashObject.md5hash); + sigDB = db.ExecuteCMD(sql, dbDict); + + if (sigDB.Rows.Count == 0) + { + try + { + // start parsing file + gaseous_signature_parser.parser Parser = new gaseous_signature_parser.parser(); + RomSignatureObject Object = Parser.ParseSignatureDAT(XMLFile, DBFile, XMLType); + + // store in database + string[] flipNameAndDescription = { + "MAMEArcade", + "MAMEMess" + }; + + // store source object + bool processGames = false; + if (Object.SourceMd5 != null) + { + int sourceId = 0; + + sql = "SELECT * FROM Signatures_Sources WHERE `SourceMD5`=@sourcemd5"; + dbDict = new Dictionary + { + { "name", Common.ReturnValueIfNull(Object.Name, "") }, + { "description", Common.ReturnValueIfNull(Object.Description, "") }, + { "category", Common.ReturnValueIfNull(Object.Category, "") }, + { "version", Common.ReturnValueIfNull(Object.Version, "") }, + { "author", Common.ReturnValueIfNull(Object.Author, "") }, + { "email", Common.ReturnValueIfNull(Object.Email, "") }, + { "homepage", Common.ReturnValueIfNull(Object.Homepage, "") } + }; + if (Object.Url == null) + { + dbDict.Add("uri", ""); + } + else + { + dbDict.Add("uri", Common.ReturnValueIfNull(Object.Url.ToString(), "")); + } + dbDict.Add("sourcetype", Common.ReturnValueIfNull(Object.SourceType, "")); + dbDict.Add("sourcemd5", Object.SourceMd5); + dbDict.Add("sourcesha1", Object.SourceSHA1); + + sigDB = db.ExecuteCMD(sql, dbDict); + if (sigDB.Rows.Count == 0) + { + // entry not present, insert it + sql = "INSERT INTO Signatures_Sources (`Name`, `Description`, `Category`, `Version`, `Author`, `Email`, `Homepage`, `Url`, `SourceType`, `SourceMD5`, `SourceSHA1`) VALUES (@name, @description, @category, @version, @author, @email, @homepage, @uri, @sourcetype, @sourcemd5, @sourcesha1); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; sigDB = db.ExecuteCMD(sql, dbDict); - if (sigDB.Rows.Count == 0) + + sourceId = Convert.ToInt32(sigDB.Rows[0][0]); + + processGames = true; + } + + if (processGames == true) + { + for (int x = 0; x < Object.Games.Count; ++x) { - // entry not present, insert it - sql = "INSERT INTO Signatures_Sources (Name, Description, Category, Version, Author, Email, Homepage, Url, SourceType, SourceMD5, SourceSHA1) VALUES (@name, @description, @category, @version, @author, @email, @homepage, @uri, @sourcetype, @sourcemd5, @sourcesha1)"; + RomSignatureObject.Game gameObject = Object.Games[x]; - db.ExecuteCMD(sql, dbDict); - - processGames = true; - } - - if (processGames == true) - { - for (int x = 0; x < Object.Games.Count; ++x) + // set up game dictionary + dbDict = new Dictionary(); + if (flipNameAndDescription.Contains(Object.SourceType)) { - RomSignatureObject.Game gameObject = Object.Games[x]; + dbDict.Add("name", Common.ReturnValueIfNull(gameObject.Description, "")); + dbDict.Add("description", Common.ReturnValueIfNull(gameObject.Name, "")); + } + else + { + dbDict.Add("name", Common.ReturnValueIfNull(gameObject.Name, "")); + dbDict.Add("description", Common.ReturnValueIfNull(gameObject.Description, "")); + } + dbDict.Add("year", Common.ReturnValueIfNull(gameObject.Year, "")); + dbDict.Add("publisher", Common.ReturnValueIfNull(gameObject.Publisher, "")); + dbDict.Add("demo", (int)gameObject.Demo); + dbDict.Add("system", Common.ReturnValueIfNull(gameObject.System, "")); + dbDict.Add("platform", Common.ReturnValueIfNull(gameObject.System, "")); + dbDict.Add("systemvariant", Common.ReturnValueIfNull(gameObject.SystemVariant, "")); + dbDict.Add("video", Common.ReturnValueIfNull(gameObject.Video, "")); - // set up game dictionary - dbDict = new Dictionary(); - if (flipNameAndDescription.Contains(Object.SourceType)) + List gameCountries = new List(); + if ( + gameObject.Country != null && + gameObject.Country != "Unknown" + ) + { + string[] countries = gameObject.Country.Split(","); + foreach (string country in countries) { - dbDict.Add("name", Common.ReturnValueIfNull(gameObject.Description, "")); - dbDict.Add("description", Common.ReturnValueIfNull(gameObject.Name, "")); - } - else - { - dbDict.Add("name", Common.ReturnValueIfNull(gameObject.Name, "")); - dbDict.Add("description", Common.ReturnValueIfNull(gameObject.Description, "")); - } - dbDict.Add("year", Common.ReturnValueIfNull(gameObject.Year, "")); - dbDict.Add("publisher", Common.ReturnValueIfNull(gameObject.Publisher, "")); - dbDict.Add("demo", (int)gameObject.Demo); - dbDict.Add("system", Common.ReturnValueIfNull(gameObject.System, "")); - dbDict.Add("platform", Common.ReturnValueIfNull(gameObject.System, "")); - dbDict.Add("systemvariant", Common.ReturnValueIfNull(gameObject.SystemVariant, "")); - dbDict.Add("video", Common.ReturnValueIfNull(gameObject.Video, "")); - dbDict.Add("country", Common.ReturnValueIfNull(gameObject.Country, "")); - dbDict.Add("language", Common.ReturnValueIfNull(gameObject.Language, "")); - dbDict.Add("copyright", Common.ReturnValueIfNull(gameObject.Copyright, "")); - - // store platform - int gameSystem = 0; - if (gameObject.System != null) - { - sql = "SELECT Id FROM Signatures_Platforms WHERE Platform=@platform"; - - sigDB = db.ExecuteCMD(sql, dbDict); - if (sigDB.Rows.Count == 0) + int countryId = -1; + countryId = Common.GetLookupByCode(Common.LookupTypes.Country, (string)Common.ReturnValueIfNull(country.Trim(), "")); + if (countryId == -1) { - // entry not present, insert it - sql = "INSERT INTO Signatures_Platforms (Platform) VALUES (@platform); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; - sigDB = db.ExecuteCMD(sql, dbDict); + countryId = Common.GetLookupByValue(Common.LookupTypes.Country, (string)Common.ReturnValueIfNull(country.Trim(), "")); - gameSystem = Convert.ToInt32(sigDB.Rows[0][0]); + if (countryId == -1) + { + Logging.Log(Logging.LogType.Warning, "Signature Ingest", "Unable to locate country id for " + country.Trim()); + sql = "INSERT INTO Country (`Code`, `Value`) VALUES (@code, @name); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; + Dictionary countryDict = new Dictionary{ + { "code", country.Trim() }, + { "name", country.Trim() } + }; + countryId = int.Parse(db.ExecuteCMD(sql, countryDict).Rows[0][0].ToString()); + } } - else + + if (countryId > 0) { - gameSystem = (int)sigDB.Rows[0][0]; + gameCountries.Add(countryId); } } - dbDict.Add("systemid", gameSystem); + } - // store publisher - int gamePublisher = 0; - if (gameObject.Publisher != null) + List gameLanguages = new List(); + if ( + gameObject.Language != null && + gameObject.Language != "nolang" + ) + { + string[] languages = gameObject.Language.Split(","); + foreach (string language in languages) { - sql = "SELECT * FROM Signatures_Publishers WHERE Publisher=@publisher"; + int languageId = -1; + languageId = Common.GetLookupByCode(Common.LookupTypes.Language, (string)Common.ReturnValueIfNull(language.Trim(), "")); + if (languageId == -1) + { + languageId = Common.GetLookupByValue(Common.LookupTypes.Language, (string)Common.ReturnValueIfNull(language.Trim(), "")); - sigDB = db.ExecuteCMD(sql, dbDict); - if (sigDB.Rows.Count == 0) - { - // entry not present, insert it - sql = "INSERT INTO Signatures_Publishers (Publisher) VALUES (@publisher); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; - sigDB = db.ExecuteCMD(sql, dbDict); - gamePublisher = Convert.ToInt32(sigDB.Rows[0][0]); + if (languageId == -1) + { + Logging.Log(Logging.LogType.Warning, "Signature Ingest", "Unable to locate language id for " + language.Trim()); + sql = "INSERT INTO Language (`Code`, `Value`) VALUES (@code, @name); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; + Dictionary langDict = new Dictionary{ + { "code", language.Trim() }, + { "name", language.Trim() } + }; + languageId = int.Parse(db.ExecuteCMD(sql, langDict).Rows[0][0].ToString()); + } } - else + + if (languageId > 0) { - gamePublisher = (int)sigDB.Rows[0][0]; + gameLanguages.Add(languageId); } } - dbDict.Add("publisherid", gamePublisher); + } - // store game - int gameId = 0; - sql = "SELECT * FROM Signatures_Games WHERE Name=@name AND Year=@year AND Publisherid=@publisher AND Systemid=@systemid AND Country=@country AND Language=@language"; + dbDict.Add("copyright", Common.ReturnValueIfNull(gameObject.Copyright, "")); + + // store platform + int gameSystem = 0; + if (gameObject.System != null) + { + sql = "SELECT `Id` FROM Signatures_Platforms WHERE `Platform`=@platform"; sigDB = db.ExecuteCMD(sql, dbDict); if (sigDB.Rows.Count == 0) { // entry not present, insert it - sql = "INSERT INTO Signatures_Games " + - "(Name, Description, Year, PublisherId, Demo, SystemId, SystemVariant, Video, Country, Language, Copyright) VALUES " + - "(@name, @description, @year, @publisherid, @demo, @systemid, @systemvariant, @video, @country, @language, @copyright); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; + sql = "INSERT INTO Signatures_Platforms (`Platform`) VALUES (@platform); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; sigDB = db.ExecuteCMD(sql, dbDict); - gameId = Convert.ToInt32(sigDB.Rows[0][0]); + gameSystem = Convert.ToInt32(sigDB.Rows[0][0]); } else { - gameId = (int)sigDB.Rows[0][0]; + gameSystem = (int)sigDB.Rows[0][0]; } + } + dbDict.Add("systemid", gameSystem); - // store rom - foreach (RomSignatureObject.Game.Rom romObject in gameObject.Roms) + // store publisher + int gamePublisher = 0; + if (gameObject.Publisher != null) + { + sql = "SELECT * FROM Signatures_Publishers WHERE `Publisher`=@publisher"; + + sigDB = db.ExecuteCMD(sql, dbDict); + if (sigDB.Rows.Count == 0) { - if (romObject.Md5 != null || romObject.Sha1 != null) + // entry not present, insert it + sql = "INSERT INTO Signatures_Publishers (`Publisher`) VALUES (@publisher); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; + sigDB = db.ExecuteCMD(sql, dbDict); + gamePublisher = Convert.ToInt32(sigDB.Rows[0][0]); + } + else + { + gamePublisher = (int)sigDB.Rows[0][0]; + } + } + dbDict.Add("publisherid", gamePublisher); + + // store game + long gameId = 0; + sql = "SELECT * FROM Signatures_Games WHERE `Name`=@name AND `Year`=@year AND `PublisherId`=@publisherid AND `SystemId`=@systemid"; + + sigDB = db.ExecuteCMD(sql, dbDict); + if (sigDB.Rows.Count == 0) + { + // entry not present, insert it + sql = "INSERT INTO Signatures_Games " + + "(`Name`, `Description`, `Year`, `PublisherId`, `Demo`, `SystemId`, `SystemVariant`, `Video`, `Copyright`) VALUES " + + "(@name, @description, @year, @publisherid, @demo, @systemid, @systemvariant, @video, @copyright); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; + sigDB = db.ExecuteCMD(sql, dbDict); + + gameId = Convert.ToInt32(sigDB.Rows[0][0]); + } + else + { + gameId = (int)sigDB.Rows[0][0]; + } + + // insert countries + foreach (int gameCountry in gameCountries) + { + try + { + sql = "SELECT * FROM Signatures_Games_Countries WHERE GameId = @gameid AND CountryId = @Countryid"; + Dictionary countryDict = new Dictionary{ + { "gameid", gameId }, + { "Countryid", gameCountry } + }; + if (db.ExecuteCMD(sql, countryDict).Rows.Count == 0) { - int romId = 0; - sql = "SELECT * FROM Signatures_Roms WHERE `GameId`=@gameid AND (`MD5`=@md5 AND `SHA1`=@sha1)"; - dbDict = new Dictionary(); - dbDict.Add("gameid", gameId); - dbDict.Add("name", Common.ReturnValueIfNull(romObject.Name, "")); - dbDict.Add("size", Common.ReturnValueIfNull(romObject.Size, "")); - dbDict.Add("crc", Common.ReturnValueIfNull(romObject.Crc, "").ToString().ToLower()); - dbDict.Add("md5", Common.ReturnValueIfNull(romObject.Md5, "").ToString().ToLower()); - dbDict.Add("sha1", Common.ReturnValueIfNull(romObject.Sha1, "").ToString().ToLower()); - dbDict.Add("developmentstatus", Common.ReturnValueIfNull(romObject.DevelopmentStatus, "")); + sql = "INSERT INTO Signatures_Games_Countries (GameId, CountryId) VALUES (@gameid, @Countryid)"; + db.ExecuteCMD(sql, countryDict); + } + } + catch + { + Console.WriteLine("Game id: " + gameId + " with Country " + gameCountry); + } + } - if (romObject.Attributes != null) + // insert languages + foreach (int gameLanguage in gameLanguages) + { + try + { + sql = "SELECT * FROM Signatures_Games_Languages WHERE GameId = @gameid AND LanguageId = @languageid"; + Dictionary langDict = new Dictionary{ + { "gameid", gameId }, + { "languageid", gameLanguage } + }; + if (db.ExecuteCMD(sql, langDict).Rows.Count == 0) + { + sql = "INSERT INTO Signatures_Games_Languages (GameId, LanguageId) VALUES (@gameid, @languageid)"; + db.ExecuteCMD(sql, langDict); + } + } + catch + { + Console.WriteLine("Game id: " + gameId + " with language " + gameLanguage); + } + } + + // store rom + foreach (RomSignatureObject.Game.Rom romObject in gameObject.Roms) + { + if (romObject.Md5 != null || romObject.Sha1 != null) + { + long romId = 0; + sql = "SELECT * FROM Signatures_Roms WHERE `GameId`=@gameid AND (`MD5`=@md5 OR `SHA1`=@sha1)"; + dbDict = new Dictionary(); + dbDict.Add("gameid", gameId); + dbDict.Add("name", Common.ReturnValueIfNull(romObject.Name, "")); + dbDict.Add("size", Common.ReturnValueIfNull(romObject.Size, "")); + dbDict.Add("crc", Common.ReturnValueIfNull(romObject.Crc, "").ToString().ToLower()); + dbDict.Add("md5", Common.ReturnValueIfNull(romObject.Md5, "").ToString().ToLower()); + dbDict.Add("sha1", Common.ReturnValueIfNull(romObject.Sha1, "").ToString().ToLower()); + dbDict.Add("developmentstatus", Common.ReturnValueIfNull(romObject.DevelopmentStatus, "")); + + if (romObject.Attributes != null) + { + if (romObject.Attributes.Count > 0) { - if (romObject.Attributes.Count > 0) - { - dbDict.Add("attributes", Newtonsoft.Json.JsonConvert.SerializeObject(romObject.Attributes)); - } - else - { - dbDict.Add("attributes", "[ ]"); - } + dbDict.Add("attributes", Newtonsoft.Json.JsonConvert.SerializeObject(romObject.Attributes)); } else { - dbDict.Add("attributes", "[ ]"); + dbDict.Add("attributes", ""); } - dbDict.Add("romtype", (int)romObject.RomType); - dbDict.Add("romtypemedia", Common.ReturnValueIfNull(romObject.RomTypeMedia, "")); - dbDict.Add("medialabel", Common.ReturnValueIfNull(romObject.MediaLabel, "")); - dbDict.Add("metadatasource", romObject.SignatureSource); - dbDict.Add("ingestorversion", 2); + } + else + { + dbDict.Add("attributes", ""); + } + dbDict.Add("romtype", (int)romObject.RomType); + dbDict.Add("romtypemedia", Common.ReturnValueIfNull(romObject.RomTypeMedia, "")); + dbDict.Add("medialabel", Common.ReturnValueIfNull(romObject.MediaLabel, "")); + dbDict.Add("metadatasource", romObject.SignatureSource); + dbDict.Add("ingestorversion", 2); + sigDB = db.ExecuteCMD(sql, dbDict); + if (sigDB.Rows.Count == 0) + { + // entry not present, insert it + sql = "INSERT INTO Signatures_Roms (`GameId`, `Name`, `Size`, `CRC`, `MD5`, `SHA1`, `DevelopmentStatus`, `Attributes`, `RomType`, `RomTypeMedia`, `MediaLabel`, `MetadataSource`, `IngestorVersion`) VALUES (@gameid, @name, @size, @crc, @md5, @sha1, @developmentstatus, @attributes, @romtype, @romtypemedia, @medialabel, @metadatasource, @ingestorversion); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; sigDB = db.ExecuteCMD(sql, dbDict); - if (sigDB.Rows.Count == 0) - { - // entry not present, insert it - sql = "INSERT INTO Signatures_Roms (GameId, Name, Size, CRC, MD5, SHA1, DevelopmentStatus, Attributes, RomType, RomTypeMedia, MediaLabel, MetadataSource, IngestorVersion) VALUES (@gameid, @name, @size, @crc, @md5, @sha1, @developmentstatus, @attributes, @romtype, @romtypemedia, @medialabel, @metadatasource, @ingestorversion); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; - sigDB = db.ExecuteCMD(sql, dbDict); + romId = Convert.ToInt32(sigDB.Rows[0][0]); + } + else + { + romId = (int)sigDB.Rows[0][0]; + } - romId = Convert.ToInt32(sigDB.Rows[0][0]); - } - else - { - romId = (int)sigDB.Rows[0][0]; - } + // map the rom to the source + sql = "SELECT * FROM Signatures_RomToSource WHERE SourceId=@sourceid AND RomId=@romid;"; + dbDict.Add("romid", romId); + dbDict.Add("sourceId", sourceId); + + sigDB = db.ExecuteCMD(sql, dbDict); + if (sigDB.Rows.Count == 0) + { + sql = "INSERT INTO Signatures_RomToSource (`SourceId`, `RomId`) VALUES (@sourceid, @romid);"; + db.ExecuteCMD(sql, dbDict); } } } } } } - catch (Exception ex) + + File.Move(XMLFile, Path.Combine(ProcessedDirectory, Path.GetFileName(XMLFile))); + if (DBFile != null) { - Logging.Log(Logging.LogType.Warning, "Signature Ingestor - XML", "Invalid import file: " + XMLFile, ex); + File.Move(DBFile, Path.Combine(XMLDBProcessedDirectory, Path.GetFileName(DBFile))); } } - else + catch (Exception ex) { - Logging.Log(Logging.LogType.Debug, "Signature Ingestor - XML", "Rejecting already imported file: " + XMLFile); + Logging.Log(Logging.LogType.Warning, "Signature Ingest", "Error ingesting " + XMLType.ToString() + " file: " + XMLFile, ex); + } + } + else + { + Logging.Log(Logging.LogType.Information, "Signature Ingest", "Rejecting already imported " + XMLType.ToString() + " file: " + XMLFile); + File.Move(XMLFile, Path.Combine(ProcessedDirectory, Path.GetFileName(XMLFile))); + if (DBFile != null) + { + File.Move(DBFile, Path.Combine(XMLDBProcessedDirectory, Path.GetFileName(DBFile))); } } } diff --git a/gaseous-server/Classes/SignatureManagement.cs b/gaseous-server/Classes/SignatureManagement.cs index f56792f..f87e561 100644 --- a/gaseous-server/Classes/SignatureManagement.cs +++ b/gaseous-server/Classes/SignatureManagement.cs @@ -56,8 +56,8 @@ namespace gaseous_server.Classes System = (string)sigDbRow["Platform"], SystemVariant = (string)sigDbRow["SystemVariant"], Video = (string)sigDbRow["Video"], - Country = (string)sigDbRow["Country"], - Language = (string)sigDbRow["Language"], + Country = "", + Language = "", Copyright = (string)sigDbRow["Copyright"] }, Rom = new gaseous_server.Models.Signatures_Games.RomItem @@ -69,13 +69,22 @@ namespace gaseous_server.Classes Md5 = ((string)sigDbRow["MD5"]).ToLower(), Sha1 = ((string)sigDbRow["SHA1"]).ToLower(), DevelopmentStatus = (string)sigDbRow["DevelopmentStatus"], - Attributes = Newtonsoft.Json.JsonConvert.DeserializeObject>>((string)Common.ReturnValueIfNull(sigDbRow["Attributes"], "[]")), RomType = (gaseous_server.Models.Signatures_Games.RomItem.RomTypes)(int)sigDbRow["RomType"], RomTypeMedia = (string)sigDbRow["RomTypeMedia"], MediaLabel = (string)sigDbRow["MediaLabel"], SignatureSource = (gaseous_server.Models.Signatures_Games.RomItem.SignatureSourceType)(Int32)sigDbRow["MetadataSource"] } }; + string attributeValues = (string)Common.ReturnValueIfNull(sigDbRow["Attributes"], "[]"); + Dictionary attributesDict = Newtonsoft.Json.JsonConvert.DeserializeObject>(attributeValues); + if (attributesDict != null) + { + gameItem.Rom.Attributes = [.. attributesDict]; + } + else + { + gameItem.Rom.Attributes = new List>(); + } GamesList.Add(gameItem); } return GamesList; diff --git a/gaseous-server/ProcessQueue.cs b/gaseous-server/ProcessQueue.cs index bd90002..83883d7 100644 --- a/gaseous-server/ProcessQueue.cs +++ b/gaseous-server/ProcessQueue.cs @@ -245,14 +245,32 @@ namespace gaseous_server CallingQueueItem = this }; - Logging.Log(Logging.LogType.Debug, "Signature Import", "Processing TOSEC files"); - tIngest.Import(Path.Combine(Config.LibraryConfiguration.LibrarySignatureImportDirectory, "TOSEC"), gaseous_signature_parser.parser.SignatureParser.TOSEC); + foreach (int i in Enum.GetValues(typeof(gaseous_signature_parser.parser.SignatureParser))) + { + gaseous_signature_parser.parser.SignatureParser parserType = (gaseous_signature_parser.parser.SignatureParser)i; + if ( + parserType != gaseous_signature_parser.parser.SignatureParser.Auto && + parserType != gaseous_signature_parser.parser.SignatureParser.Unknown + ) + { + Logging.Log(Logging.LogType.Debug, "Signature Import", "Processing " + parserType + " files"); - Logging.Log(Logging.LogType.Debug, "Signature Import", "Processing MAME Arcade files"); - tIngest.Import(Path.Combine(Config.LibraryConfiguration.LibrarySignatureImportDirectory, "MAME Arcade"), gaseous_signature_parser.parser.SignatureParser.MAMEArcade); + string SignaturePath = Path.Combine(Config.LibraryConfiguration.LibrarySignatureImportDirectory, parserType.ToString()); + string SignatureProcessedPath = Path.Combine(Config.LibraryConfiguration.LibrarySignatureImportDirectory, parserType.ToString()); - Logging.Log(Logging.LogType.Debug, "Signature Import", "Processing MAME MESS files"); - tIngest.Import(Path.Combine(Config.LibraryConfiguration.LibrarySignatureImportDirectory, "MAME MESS"), gaseous_signature_parser.parser.SignatureParser.MAMEMess); + if (!Directory.Exists(SignaturePath)) + { + Directory.CreateDirectory(SignaturePath); + } + + if (!Directory.Exists(SignatureProcessedPath)) + { + Directory.CreateDirectory(SignatureProcessedPath); + } + + tIngest.Import(SignaturePath, SignatureProcessedPath, parserType); + } + } _SaveLastRunTime = true; diff --git a/gaseous-server/Support/Country.txt b/gaseous-server/Support/Country.txt new file mode 100644 index 0000000..d9878d8 --- /dev/null +++ b/gaseous-server/Support/Country.txt @@ -0,0 +1,73 @@ +AE|United Arab Emirates +AL|Albania +AS|Asia +AT|Austria +AU|Australia +BA|Bosnia and Herzegovina +BE|Belgium +BG|Bulgaria +BR|Brazil +CA|Canada +CH|Switzerland +CL|Chile +CN|China +CS|Serbia and Montenegro +CY|Cyprus +CZ|Czech Republic +DE|Germany +DK|Denmark +EE|Estonia +EG|Egypt +ES|Spain +EU|Europe +FI|Finland +FR|France +GB|United Kingdom +GR|Greece +HK|Hong Kong +HR|Croatia +HU|Hungary +ID|Indonesia +IE|Ireland +IL|Israel +IN|India +IR|Iran +IS|Iceland +IT|Italy +JO|Jordan +JP|Japan +KR|Korea +KR|South Korea +LT|Lithuania +LU|Luxembourg +LV|Latvia +MN|Mongolia +MX|Mexico +MY|Malaysia +NL|Netherlands +NO|Norway +NP|Nepal +NZ|New Zealand +OM|Oman +PE|Peru +PH|Philippines +PL|Poland +PT|Portugal +QA|Qatar +RO|Romania +RU|Russia +SE|Sweden +SG|Singapore +SI|Slovenia +SK|Slovakia +TH|Thailand +TR|Turkey +TW|Taiwan +US|United States +USA|United States +VN|Vietnam +YU|Yugoslavia +ZA|South Africa +World|World +Europe|Europe +Asia|Asia \ No newline at end of file diff --git a/gaseous-server/Support/Database/MySQL/gaseous-1023.sql b/gaseous-server/Support/Database/MySQL/gaseous-1023.sql new file mode 100644 index 0000000..fb0228a --- /dev/null +++ b/gaseous-server/Support/Database/MySQL/gaseous-1023.sql @@ -0,0 +1,37 @@ +CREATE TABLE `Country` ( + `Id` INT NOT NULL AUTO_INCREMENT, + `Code` VARCHAR(20) NULL, + `Value` VARCHAR(255) NULL, + PRIMARY KEY (`Id`), + INDEX `id_Code` (`Code` ASC) VISIBLE, + INDEX `id_Value` (`Value` ASC) VISIBLE +); + +CREATE TABLE `Language` ( + `Id` INT NOT NULL AUTO_INCREMENT, + `Code` VARCHAR(20) NULL, + `Value` VARCHAR(255) NULL, + PRIMARY KEY (`Id`), + INDEX `id_Code` (`Code` ASC) VISIBLE, + INDEX `id_Value` (`Value` ASC) VISIBLE +); + +CREATE TABLE `Signatures_RomToSource` ( + `SourceId` int NOT NULL, + `RomId` int NOT NULL, + PRIMARY KEY (`SourceId`, `RomId`) +); + +CREATE TABLE `Signatures_Games_Countries` ( + `GameId` INT NOT NULL, + `CountryId` INT NOT NULL, + PRIMARY KEY (`GameId`, `CountryId`), + CONSTRAINT `GameCountry` FOREIGN KEY (`GameId`) REFERENCES `Signatures_Games` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION +); + +CREATE TABLE `Signatures_Games_Languages` ( + `GameId` INT NOT NULL, + `LanguageId` INT NOT NULL, + PRIMARY KEY (`GameId`, `LanguageId`), + CONSTRAINT `GameLanguage` FOREIGN KEY (`GameId`) REFERENCES `Signatures_Games` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION +); \ No newline at end of file diff --git a/gaseous-server/Support/Language.txt b/gaseous-server/Support/Language.txt new file mode 100644 index 0000000..eafb948 --- /dev/null +++ b/gaseous-server/Support/Language.txt @@ -0,0 +1,47 @@ +ar|Arabic +bg|Bulgarian +bs|Bosnian +cs|Czech +cy|Welsh +da|Danish +de|German +el|Greek +en|English +eo|Esperanto +es|Spanish +et|Estonian +fa|Persian +fi|Finnish +fr|French +fr-ca|French Canadian +ga|Irish +gd|Gaelic +gu|Gujarati +he|Hebrew +hi|Hindi +hr|Croatian +hu|Hungarian +is|Icelandic +it|Italian +ja|Japanese +ko|Korean +lt|Lithuanian +lv|Latvian +ms|Malay +nl|Dutch +no|Norwegian +pl|Polish +pt|Portuguese +ro|Romanian +ru|Russian +sk|Slovakian +sl|Slovenian +sq|Albanian +sr|Serbian +sv|Swedish +th|Thai +tr|Turkish +ur|Urdu +vi|Vietnamese +yi|Yiddish +zh|Chinese \ No newline at end of file diff --git a/gaseous-server/gaseous-server.csproj b/gaseous-server/gaseous-server.csproj index d2e2038..0a2760a 100644 --- a/gaseous-server/gaseous-server.csproj +++ b/gaseous-server/gaseous-server.csproj @@ -18,7 +18,7 @@ - + @@ -65,6 +65,7 @@ + @@ -86,6 +87,8 @@ true PreserveNewest + + @@ -110,5 +113,6 @@ + \ No newline at end of file diff --git a/gaseous-server/wwwroot/images/NoIntro-logo.svg b/gaseous-server/wwwroot/images/NoIntro-logo.svg new file mode 100644 index 0000000..adbd546 --- /dev/null +++ b/gaseous-server/wwwroot/images/NoIntro-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/gaseous-server/wwwroot/images/redump.png b/gaseous-server/wwwroot/images/redump.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2dd84fc448cd1dcffda46f45aee442b378c57d GIT binary patch literal 93945 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 x|2hKyIe`9`l literal 0 HcmV?d00001 diff --git a/gaseous-server/wwwroot/pages/settings/about.html b/gaseous-server/wwwroot/pages/settings/about.html index 83dde1b..6ac6c9d 100644 --- a/gaseous-server/wwwroot/pages/settings/about.html +++ b/gaseous-server/wwwroot/pages/settings/about.html @@ -85,6 +85,27 @@ class="romlink">https://www.progettosnaps.net/index.php + + + + + + No-Intro
+ https://no-intro.org + + + + + + + + Redump
+ http://redump.org + +