diff --git a/gaseous-signature-ingestor/Program.cs b/gaseous-signature-ingestor/Program.cs index 8dda979..163d953 100644 --- a/gaseous-signature-ingestor/Program.cs +++ b/gaseous-signature-ingestor/Program.cs @@ -47,8 +47,6 @@ foreach (string commandLineArg in commandLineArgs) } } -tosecXML = "/Users/michaelgreen/Downloads/TOSEC - DAT Pack - Complete (3764) (TOSEC-v2023-01-23)/TOSEC"; - // check if configPath is valid and create it if not if (!Directory.Exists(configPath)) { @@ -98,78 +96,15 @@ if (Directory.Exists(tosecXML)) { sql = "SELECT * FROM signatures_sources WHERE sourcemd5=@sourcemd5"; dbDict = new Dictionary(); - if (tosecObject.Name != null) - { - dbDict.Add("name", tosecObject.Name); - } - else - { - dbDict.Add("name", ""); - } - if (tosecObject.Description != null) - { - dbDict.Add("description", tosecObject.Description); - } - else - { - dbDict.Add("description", ""); - } - if (tosecObject.Category != null) - { - dbDict.Add("category", tosecObject.Category); - } - else - { - dbDict.Add("category", ""); - } - if (tosecObject.Version != null) - { - dbDict.Add("version", tosecObject.Version); - } - else - { - dbDict.Add("version", ""); - } - if (tosecObject.Author != null) - { - dbDict.Add("author", tosecObject.Author); - } - else - { - dbDict.Add("author", ""); - } - if (tosecObject.Email != null) - { - dbDict.Add("email", tosecObject.Email); - } - else - { - dbDict.Add("email", ""); - } - if (tosecObject.Homepage != null) - { - dbDict.Add("homepage", tosecObject.Homepage); - } - else - { - dbDict.Add("homepage", ""); - } - if (tosecObject.Url != null) - { - dbDict.Add("uri", tosecObject.Url.ToString()); - } - else - { - dbDict.Add("uri", ""); - } - if (tosecObject.SourceType != null) - { - dbDict.Add("sourcetype", tosecObject.SourceType); - } - else - { - dbDict.Add("sourcetype", ""); - } + dbDict.Add("name", Common.ReturnValueIfNull(tosecObject.Name, "")); + dbDict.Add("description", Common.ReturnValueIfNull(tosecObject.Description, "")); + dbDict.Add("category", Common.ReturnValueIfNull(tosecObject.Category, "")); + dbDict.Add("version", Common.ReturnValueIfNull(tosecObject.Version, "")); + dbDict.Add("author", Common.ReturnValueIfNull(tosecObject.Author, "")); + dbDict.Add("email", Common.ReturnValueIfNull(tosecObject.Email, "")); + dbDict.Add("homepage", Common.ReturnValueIfNull(tosecObject.Homepage, "")); + dbDict.Add("uri", Common.ReturnValueIfNull(tosecObject.Url, "")); + dbDict.Add("sourcetype", Common.ReturnValueIfNull(tosecObject.SourceType, "")); dbDict.Add("sourcemd5", tosecObject.SourceMd5); dbDict.Add("sourcesha1", tosecObject.SourceSHA1); @@ -201,88 +136,19 @@ if (Directory.Exists(tosecXML)) // set up game dictionary dbDict = new Dictionary(); - if (gameObject.Name != null) - { - dbDict.Add("name", gameObject.Name); - } else - { - dbDict.Add("name", ""); - } - if (gameObject.Description != null) - { - dbDict.Add("description", gameObject.Description); - } - else - { - dbDict.Add("description", ""); - } - if (gameObject.Year != null) - { - dbDict.Add("year", gameObject.Year); - } - else - { - dbDict.Add("year", ""); - } - if (gameObject.Publisher != null) - { - dbDict.Add("publisher", gameObject.Publisher); - } - else - { - dbDict.Add("publisher", ""); - } + 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); - if (gameObject.System != null) - { - dbDict.Add("system", gameObject.System); - dbDict.Add("platform", gameObject.System); - } - else - { - dbDict.Add("system", ""); - } - if (gameObject.SystemVariant != null) - { - dbDict.Add("systemvariant", gameObject.SystemVariant); - } - else - { - dbDict.Add("systemvariant", ""); - } - if (gameObject.Video != null) - { - dbDict.Add("video", gameObject.Video); - } - else - { - dbDict.Add("video", ""); - } - if (gameObject.Country != null) - { - dbDict.Add("country", gameObject.Country); - } - else - { - dbDict.Add("country", ""); - } - if (gameObject.Language != null) - { - dbDict.Add("language", gameObject.Language); - } - else - { - dbDict.Add("language", ""); - } - if (gameObject.Copyright != null) - { - dbDict.Add("copyright", gameObject.Copyright); - } - else - { - dbDict.Add("copyright", ""); - } - + 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) @@ -354,46 +220,13 @@ if (Directory.Exists(tosecXML)) sql = "SELECT * FROM signatures_roms WHERE gameid=@gameid AND md5=@md5"; dbDict = new Dictionary(); dbDict.Add("gameid", gameId); - if (romObject.Name != null) - { - dbDict.Add("name", romObject.Name); - } else - { - dbDict.Add("name", ""); - } - if (romObject.Size != null) - { - dbDict.Add("size", romObject.Size); - } - else - { - dbDict.Add("size", 0); - } - if (romObject.Crc != null) - { - dbDict.Add("crc", romObject.Crc); - } - else - { - dbDict.Add("name", ""); - } + dbDict.Add("name", Common.ReturnValueIfNull(romObject.Name, "")); + dbDict.Add("size", Common.ReturnValueIfNull(romObject.Size, "")); + dbDict.Add("crc", Common.ReturnValueIfNull(romObject.Crc, "")); dbDict.Add("md5", romObject.Md5); - if (romObject.Sha1 != null) - { - dbDict.Add("sha1", romObject.Sha1); - } - else - { - dbDict.Add("sha1", ""); - } - if (romObject.DevelopmentStatus != null) - { - dbDict.Add("developmentstatus", romObject.DevelopmentStatus); - } - else - { - dbDict.Add("developmentstatus", ""); - } + dbDict.Add("sha1", Common.ReturnValueIfNull(romObject.Sha1, "")); + dbDict.Add("developmentstatus", Common.ReturnValueIfNull(romObject.DevelopmentStatus, "")); + if (romObject.flags != null) { if (romObject.flags.Count > 0) @@ -401,30 +234,16 @@ if (Directory.Exists(tosecXML)) dbDict.Add("flags", Newtonsoft.Json.JsonConvert.SerializeObject(romObject.flags)); } else { - dbDict.Add("flags", "{ }"); + dbDict.Add("flags", "[ ]"); } } else { - dbDict.Add("flags", "{ }"); + dbDict.Add("flags", "[ ]"); } dbDict.Add("romtype", (int)romObject.RomType); - if (romObject.RomTypeMedia != null) - { - dbDict.Add("romtypemedia", romObject.RomTypeMedia); - } - else - { - dbDict.Add("romtypemedia", ""); - } - if (romObject.MediaLabel != null) - { - dbDict.Add("medialabel", romObject.MediaLabel); - } - else - { - dbDict.Add("medialabel", ""); - } + dbDict.Add("romtypemedia", Common.ReturnValueIfNull(romObject.RomTypeMedia, "")); + dbDict.Add("medialabel", Common.ReturnValueIfNull(romObject.MediaLabel, "")); sigDB = db.ExecuteCMD(sql, dbDict); if (sigDB.Rows.Count == 0) diff --git a/gaseous-tools/Common.cs b/gaseous-tools/Common.cs new file mode 100644 index 0000000..756e410 --- /dev/null +++ b/gaseous-tools/Common.cs @@ -0,0 +1,24 @@ +using System; +namespace gaseous_tools +{ + public class Common + { + /// + /// Returns IfNullValue if the ObjectToCheck is null + /// + /// Any nullable object to check for null + /// Any object to return if ObjectToCheck is null + /// + static public object ReturnValueIfNull(object? ObjectToCheck, object IfNullValue) + { + if (ObjectToCheck == null) + { + return IfNullValue; + } else + { + return ObjectToCheck; + } + } + } +} + diff --git a/gaseous-tools/Database/MySQL/gaseous.sql b/gaseous-tools/Database/MySQL/gaseous.sql new file mode 100644 index 0000000..098b318 --- /dev/null +++ b/gaseous-tools/Database/MySQL/gaseous.sql @@ -0,0 +1,144 @@ +-- MySQL dump 10.13 Distrib 8.0.32, for macos13.0 (arm64) +-- +-- Host: localhost Database: gaseous +-- ------------------------------------------------------ +-- Server version 8.0.32 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `signatures_games` +-- + +DROP TABLE IF EXISTS `signatures_games`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `signatures_games` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `description` varchar(255) DEFAULT NULL, + `year` varchar(15) DEFAULT NULL, + `publisherid` int DEFAULT NULL, + `demo` int DEFAULT NULL, + `systemid` int DEFAULT NULL, + `systemvariant` varchar(100) DEFAULT NULL, + `video` varchar(10) DEFAULT NULL, + `country` varchar(5) DEFAULT NULL, + `language` varchar(5) DEFAULT NULL, + `copyright` varchar(15) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id_UNIQUE` (`id`), + KEY `publisher_idx` (`publisherid`), + KEY `system_idx` (`systemid`), + KEY `ingest_idx` (`name`,`year`,`publisherid`,`systemid`,`country`,`language`) USING BTREE, + CONSTRAINT `publisher` FOREIGN KEY (`publisherid`) REFERENCES `signatures_publishers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `system` FOREIGN KEY (`systemid`) REFERENCES `signatures_platforms` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=1134279 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `signatures_platforms` +-- + +DROP TABLE IF EXISTS `signatures_platforms`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `signatures_platforms` ( + `id` int NOT NULL AUTO_INCREMENT, + `platform` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `idsignatures_platforms_UNIQUE` (`id`), + KEY `platforms_idx` (`platform`,`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1091 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `signatures_publishers` +-- + +DROP TABLE IF EXISTS `signatures_publishers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `signatures_publishers` ( + `id` int NOT NULL AUTO_INCREMENT, + `publisher` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id_UNIQUE` (`id`), + KEY `publisher_idx` (`publisher`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=71898 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `signatures_roms` +-- + +DROP TABLE IF EXISTS `signatures_roms`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `signatures_roms` ( + `id` int NOT NULL AUTO_INCREMENT, + `gameid` int DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `size` bigint DEFAULT NULL, + `crc` varchar(20) DEFAULT NULL, + `md5` varchar(100) DEFAULT NULL, + `sha1` varchar(100) DEFAULT NULL, + `developmentstatus` varchar(100) DEFAULT NULL, + `flags` json DEFAULT NULL, + `romtype` int DEFAULT NULL, + `romtypemedia` varchar(100) DEFAULT NULL, + `medialabel` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id_UNIQUE` (`id`,`gameid`) USING BTREE, + KEY `gameid_idx` (`gameid`), + KEY `flags_idx` ((cast(`flags` as char(255) array))), + CONSTRAINT `gameid` FOREIGN KEY (`gameid`) REFERENCES `signatures_games` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=2587448 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `signatures_sources` +-- + +DROP TABLE IF EXISTS `signatures_sources`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `signatures_sources` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `description` varchar(255) DEFAULT NULL, + `category` varchar(45) DEFAULT NULL, + `version` varchar(45) DEFAULT NULL, + `author` varchar(255) DEFAULT NULL, + `email` varchar(45) DEFAULT NULL, + `homepage` varchar(45) DEFAULT NULL, + `url` varchar(45) DEFAULT NULL, + `sourcetype` varchar(45) DEFAULT NULL, + `sourcemd5` varchar(45) DEFAULT NULL, + `sourcesha1` varchar(45) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `id_UNIQUE` (`id`), + KEY `sourcemd5_idx` (`sourcemd5`,`id`) USING BTREE, + KEY `sourcesha1_idx` (`sourcesha1`,`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=5968 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2023-02-26 23:40:56 diff --git a/gaseous-tools/gaseous-tools.csproj b/gaseous-tools/gaseous-tools.csproj index 3d07bdc..bf015c7 100644 --- a/gaseous-tools/gaseous-tools.csproj +++ b/gaseous-tools/gaseous-tools.csproj @@ -10,4 +10,12 @@ + + + + + + + +