refactor: separated import code into it’s component chunks to allow for updating a ROM’s link to a platform and/or game

This commit is contained in:
Michael Green
2023-06-28 13:23:10 +10:00
parent ee4e5d4037
commit f5cfe9deb6
2 changed files with 197 additions and 156 deletions

View File

@@ -1,8 +1,10 @@
using System; using System;
using System.Data; using System.Data;
using System.Security.Policy;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using gaseous_tools; using gaseous_tools;
using MySqlX.XDevAPI;
using Org.BouncyCastle.Utilities.IO.Pem; using Org.BouncyCastle.Utilities.IO.Pem;
using static gaseous_server.Classes.Metadata.Games; using static gaseous_server.Classes.Metadata.Games;
@@ -75,6 +77,26 @@ namespace gaseous_server.Classes
Logging.Log(Logging.LogType.Information, "Import Game", " " + GameFileImportPath + " not in database - processing"); Logging.Log(Logging.LogType.Information, "Import Game", " " + GameFileImportPath + " not in database - processing");
// process as a single file // process as a single file
Models.Signatures_Games discoveredSignature = GetFileSignature(hash, fi, GameFileImportPath);
// get discovered platform
IGDB.Models.Platform determinedPlatform = Metadata.Platforms.GetPlatform(discoveredSignature.Flags.IGDBPlatformId);
if (determinedPlatform == null)
{
determinedPlatform = new IGDB.Models.Platform();
}
IGDB.Models.Game determinedGame = SearchForGame(discoveredSignature);
// add to database
StoreROM(hash, determinedGame, determinedPlatform, discoveredSignature, GameFileImportPath);
}
}
}
}
public static Models.Signatures_Games GetFileSignature(Common.hashObject hash, FileInfo fi, string GameFileImportPath)
{
// check 1: do we have a signature for it? // check 1: do we have a signature for it?
gaseous_server.Controllers.SignaturesController sc = new Controllers.SignaturesController(); gaseous_server.Controllers.SignaturesController sc = new Controllers.SignaturesController();
List<Models.Signatures_Games> signatures = sc.GetSignature(hash.md5hash); List<Models.Signatures_Games> signatures = sc.GetSignature(hash.md5hash);
@@ -160,13 +182,12 @@ namespace gaseous_server.Classes
} }
Logging.Log(Logging.LogType.Information, "Import Game", " Determined import file as: " + discoveredSignature.Game.Name + " (" + discoveredSignature.Game.Year + ") " + discoveredSignature.Game.System); Logging.Log(Logging.LogType.Information, "Import Game", " Determined import file as: " + discoveredSignature.Game.Name + " (" + discoveredSignature.Game.Year + ") " + discoveredSignature.Game.System);
// get discovered platform
IGDB.Models.Platform determinedPlatform = Metadata.Platforms.GetPlatform(discoveredSignature.Flags.IGDBPlatformId); return discoveredSignature;
if (determinedPlatform == null)
{
determinedPlatform = new IGDB.Models.Platform();
} }
public static IGDB.Models.Game SearchForGame(Models.Signatures_Games discoveredSignature)
{
// search discovered game - case insensitive exact match first // search discovered game - case insensitive exact match first
IGDB.Models.Game determinedGame = new IGDB.Models.Game(); IGDB.Models.Game determinedGame = new IGDB.Models.Game();
@@ -186,10 +207,12 @@ namespace gaseous_server.Classes
determinedGame = Metadata.Games.GetGame((long)games[0].Id, false, false); determinedGame = Metadata.Games.GetGame((long)games[0].Id, false, false);
Logging.Log(Logging.LogType.Information, "Import Game", " IGDB game: " + determinedGame.Name); Logging.Log(Logging.LogType.Information, "Import Game", " IGDB game: " + determinedGame.Name);
break; break;
} else if (games.Length > 0) }
else if (games.Length > 0)
{ {
Logging.Log(Logging.LogType.Information, "Import Game", " " + games.Length + " search results found"); Logging.Log(Logging.LogType.Information, "Import Game", " " + games.Length + " search results found");
} else }
else
{ {
Logging.Log(Logging.LogType.Information, "Import Game", " No search results found"); Logging.Log(Logging.LogType.Information, "Import Game", " No search results found");
} }
@@ -205,12 +228,26 @@ namespace gaseous_server.Classes
Logging.Log(Logging.LogType.Information, "Import Game", " Unable to determine game"); Logging.Log(Logging.LogType.Information, "Import Game", " Unable to determine game");
} }
// add to database return determinedGame;
}
public static long StoreROM(Common.hashObject hash, IGDB.Models.Game determinedGame, IGDB.Models.Platform determinedPlatform, Models.Signatures_Games discoveredSignature, string GameFileImportPath, long UpdateId = 0)
{
Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
string sql = "";
if (UpdateId == 0)
{
sql = "INSERT INTO games_roms (platformid, gameid, name, size, crc, md5, sha1, developmentstatus, flags, romtype, romtypemedia, medialabel, path, metadatasource) VALUES (@platformid, @gameid, @name, @size, @crc, @md5, @sha1, @developmentstatus, @flags, @romtype, @romtypemedia, @medialabel, @path, @metadatasource); SELECT CAST(LAST_INSERT_ID() AS SIGNED);"; sql = "INSERT INTO games_roms (platformid, gameid, name, size, crc, md5, sha1, developmentstatus, flags, romtype, romtypemedia, medialabel, path, metadatasource) VALUES (@platformid, @gameid, @name, @size, @crc, @md5, @sha1, @developmentstatus, @flags, @romtype, @romtypemedia, @medialabel, @path, @metadatasource); SELECT CAST(LAST_INSERT_ID() AS SIGNED);";
}
Dictionary<string, object> dbDict = new Dictionary<string, object>();
dbDict.Add("platformid", Common.ReturnValueIfNull(determinedPlatform.Id, 0)); dbDict.Add("platformid", Common.ReturnValueIfNull(determinedPlatform.Id, 0));
dbDict.Add("gameid", Common.ReturnValueIfNull(determinedGame.Id, 0)); dbDict.Add("gameid", Common.ReturnValueIfNull(determinedGame.Id, 0));
dbDict.Add("name", Common.ReturnValueIfNull(discoveredSignature.Rom.Name, "")); dbDict.Add("name", Common.ReturnValueIfNull(discoveredSignature.Rom.Name, ""));
dbDict.Add("size", Common.ReturnValueIfNull(discoveredSignature.Rom.Size, 0)); dbDict.Add("size", Common.ReturnValueIfNull(discoveredSignature.Rom.Size, 0));
dbDict.Add("md5", hash.md5hash);
dbDict.Add("sha1", hash.sha1hash);
dbDict.Add("crc", Common.ReturnValueIfNull(discoveredSignature.Rom.Crc, "")); dbDict.Add("crc", Common.ReturnValueIfNull(discoveredSignature.Rom.Crc, ""));
dbDict.Add("developmentstatus", Common.ReturnValueIfNull(discoveredSignature.Rom.DevelopmentStatus, "")); dbDict.Add("developmentstatus", Common.ReturnValueIfNull(discoveredSignature.Rom.DevelopmentStatus, ""));
dbDict.Add("metadatasource", discoveredSignature.Rom.SignatureSource); dbDict.Add("metadatasource", discoveredSignature.Rom.SignatureSource);
@@ -240,9 +277,8 @@ namespace gaseous_server.Classes
// move to destination // move to destination
MoveGameFile(romId); MoveGameFile(romId);
}
} return romId;
}
} }
public static string ComputeROMPath(long RomId) public static string ComputeROMPath(long RomId)

View File

@@ -99,6 +99,11 @@
artworks = result.artworks.ids; artworks = result.artworks.ids;
artworksPostition = 0; artworksPostition = 0;
rotateBackground(); rotateBackground();
} else {
if (result.cover) {
var bg = document.getElementById('bgImage');
bg.setAttribute('style', 'background-image: url("/api/v1/Games/' + gameId + '/cover/image"); background-position: center; background-repeat: no-repeat; background-size: cover; filter: blur(10px); -webkit-filter: blur(10px);');
}
} }
// load cover // load cover