Skip to content

Commit 812537f

Browse files
Add FBNeo DAT Support (#148)
* FBNeo DATs can now be imported * Added FBNeo support
1 parent f344c6c commit 812537f

File tree

17 files changed

+87
-52
lines changed

17 files changed

+87
-52
lines changed

hasheous/Classes/HashLookup2.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,18 @@ public HashLookup(Database db, hasheous_server.Models.HashLookupModel model, boo
165165
// add signature mapping to game
166166
dataObjects.AddSignature(game.Id, DataObjects.DataObjectType.Game, long.Parse(discoveredSignature.Game.Id));
167167

168+
// add all raw signatures to the game
169+
foreach (Signatures_Games_2 sig in rawSignatures)
170+
{
171+
if (sig.Game != null)
172+
{
173+
if (sig.Game.Id != discoveredSignature.Game.Id)
174+
{
175+
dataObjects.AddSignature(game.Id, DataObjects.DataObjectType.Game, long.Parse(sig.Game.Id));
176+
}
177+
}
178+
}
179+
168180
// VIMMSLair manual search
169181
foreach (AttributeItem attribute in platform.Attributes)
170182
{

hasheous/Classes/SignatureIngestors/XML.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,10 +362,10 @@ public void Import(string SearchPath, string ProcessedDirectory, gaseous_signatu
362362
// store rom
363363
foreach (RomSignatureObject.Game.Rom romObject in gameObject.Roms)
364364
{
365-
if (romObject.Md5 != null || romObject.Sha1 != null)
365+
if (romObject.Md5 != null || romObject.Sha1 != null || romObject.Crc != null)
366366
{
367367
long romId = 0;
368-
sql = "SELECT * FROM Signatures_Roms WHERE `GameId`=@gameid AND (`MD5`=@md5 AND `SHA1`=@sha1)";
368+
sql = "SELECT * FROM Signatures_Roms WHERE `GameId`=@gameid AND (`MD5`=@md5 AND `SHA1`=@sha1 AND `CRC`=@crc);";
369369
dbDict = new Dictionary<string, object>
370370
{
371371
{ "gameid", gameId },

hasheous/Classes/SignatureManagement.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ public List<Signatures_Games_2> GetRawSignatures(HashLookupModel model)
4444
}
4545
}
4646

47+
if (model.CRC != null)
48+
{
49+
if (model.CRC.Length == 8)
50+
{
51+
whereClauses.Add("Signatures_Roms.CRC = @crc");
52+
dbDict.Add("crc", model.CRC);
53+
}
54+
}
55+
4756
if (whereClauses.Count > 0)
4857
{
4958
// lookup the provided hashes
@@ -223,19 +232,19 @@ public Signatures_Games_2.GameItem BuildGameItem(DataRow sigDbRow)
223232
return new Signatures_Games_2.GameItem
224233
{
225234
Id = ((long)sigDbRow["Id"]).ToString(),
226-
Name = (string)sigDbRow["Name"],
227-
Description = (string)sigDbRow["Description"],
228-
Year = (string)sigDbRow["Year"],
235+
Name = (string)Common.ReturnValueIfNull(sigDbRow["Name"], ""),
236+
Description = (string)Common.ReturnValueIfNull(sigDbRow["Description"], ""),
237+
Year = (string)Common.ReturnValueIfNull(sigDbRow["Year"], ""),
229238
Publisher = (string)Common.ReturnValueIfNull(sigDbRow["Publisher"], ""),
230239
PublisherId = (long)(int)Common.ReturnValueIfNull(sigDbRow["PublisherId"], ""),
231240
Demo = (Signatures_Games_2.GameItem.DemoTypes)(int)sigDbRow["Demo"],
232-
SystemId = (int)sigDbRow["PlatformId"],
233-
System = (string)sigDbRow["Platform"],
234-
SystemVariant = (string)sigDbRow["SystemVariant"],
235-
Video = (string)sigDbRow["Video"],
241+
SystemId = (int)Common.ReturnValueIfNull(sigDbRow["PlatformId"], 0),
242+
System = (string)Common.ReturnValueIfNull(sigDbRow["Platform"], ""),
243+
SystemVariant = (string)Common.ReturnValueIfNull(sigDbRow["SystemVariant"], ""),
244+
Video = (string)Common.ReturnValueIfNull(sigDbRow["Video"], ""),
236245
Countries = new Dictionary<string, string>(GetLookup(LookupTypes.Country, (long)sigDbRow["Id"])),
237246
Languages = new Dictionary<string, string>(GetLookup(LookupTypes.Language, (long)sigDbRow["Id"])),
238-
Copyright = (string)sigDbRow["Copyright"],
247+
Copyright = (string)Common.ReturnValueIfNull(sigDbRow["Copyright"], ""),
239248
MetadataSource = (int)sigDbRow["MetadataSource"],
240249
Category = (string)Common.ReturnValueIfNull(sigDbRow["Category"], "")
241250
};
@@ -341,11 +350,12 @@ public Dictionary<string, KeyValuePair<string, string>> GetLookupCorrections(Loo
341350
public hasheous_server.Models.Signatures_Games_2.RomItem GetRomItemByHash(hasheous_server.Models.HashLookupModel model)
342351
{
343352
Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
344-
string sql = "SELECT `Id` AS romid, `Name` AS romname, Signatures_Roms.* FROM Signatures_Roms WHERE MD5 = @md5 OR SHA1 = @sha1;";
353+
string sql = "SELECT `Id` AS romid, `Name` AS romname, Signatures_Roms.* FROM Signatures_Roms WHERE MD5 = @md5 OR SHA1 = @sha1 OR CRC = @crc;";
345354

346355
return BuildRomItem(db.ExecuteCMD(sql, new Dictionary<string, object>{
347356
{ "md5", model.MD5 },
348-
{ "sha1", model.SHA1 }
357+
{ "sha1", model.SHA1 },
358+
{ "crc", model.CRC }
349359
}).Rows[0]);
350360
}
351361

hasheous/Classes/Sources.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public class Sources
1515
case RomSignatureObject.Game.Rom.SignatureSourceType.MAMEArcade:
1616
case RomSignatureObject.Game.Rom.SignatureSourceType.MAMEMess:
1717
case RomSignatureObject.Game.Rom.SignatureSourceType.Redump:
18+
case RomSignatureObject.Game.Rom.SignatureSourceType.RetroAchievements:
19+
case RomSignatureObject.Game.Rom.SignatureSourceType.FBNeo:
1820
SourceTypeLabel = sourceType.ToString();
1921
break;
2022

hasheous/Controllers/V1.0/LookupController.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,16 @@ public async Task<IActionResult> LookupPost(HashLookupModel model, bool? returnA
8181
[ResponseCache(CacheProfileName = "5Minute")]
8282
[Route("ByHash/md5/{md5}")]
8383
[Route("ByHash/sha1/{sha1}")]
84-
public async Task<IActionResult> LookupGet(string? md5, string? sha1)
84+
[Route("ByHash/crc/{crc}")]
85+
public async Task<IActionResult> LookupGet(string? md5, string? sha1, string? crc)
8586
{
8687
try
8788
{
8889
HashLookup hashLookup = new HashLookup(new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString), new HashLookupModel
8990
{
9091
MD5 = md5,
91-
SHA1 = sha1
92+
SHA1 = sha1,
93+
CRC = crc
9294
});
9395

9496
if (hashLookup == null)

hasheous/Controllers/V1.0/SourcesController.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ public async Task<IActionResult> GetSources(RomSignatureObject.Game.Rom.Signatur
7474
case RomSignatureObject.Game.Rom.SignatureSourceType.MAMEMess:
7575
case RomSignatureObject.Game.Rom.SignatureSourceType.NoIntros:
7676
case RomSignatureObject.Game.Rom.SignatureSourceType.Redump:
77+
case RomSignatureObject.Game.Rom.SignatureSourceType.RetroAchievements:
78+
case RomSignatureObject.Game.Rom.SignatureSourceType.FBNeo:
7779
hasheous_server.Classes.Sources sources = new hasheous_server.Classes.Sources();
7880
return Ok(sources.GetSources(sourceType));
7981

hasheous/Models/HashLookupModel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,10 @@ public class HashLookupModel
1414
/// SHA1 hash of the content
1515
/// </summary>
1616
public string? SHA1 { get; set; }
17+
18+
/// <summary>
19+
/// CRC32 hash of the content
20+
/// </summary>
21+
public string? CRC { get; set; }
1722
}
1823
}

hasheous/Schema/hasheous-1017.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE `hasheous`.`Signatures_Roms` ADD INDEX `crc_idx` (`CRC` ASC) VISIBLE;

hasheous/hasheous.csproj

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<DocumentationFile>bin\Release\net8.0\hasheous.xml</DocumentationFile>
1616
</PropertyGroup>
1717
<ItemGroup>
18-
<PackageReference Include="gaseous-signature-parser" Version="2.3.8" />
18+
<PackageReference Include="gaseous-signature-parser" Version="2.3.10" />
1919
<PackageReference Include="gaseous.IGDB" Version="1.0.2" />
2020
<PackageReference Include="hasheous-client" Version="1.2.5.2" />
2121
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.15" />
@@ -34,43 +34,11 @@
3434
<None Remove="Support\Country.txt" />
3535
<None Remove="Support\Language.txt" />
3636
<None Remove="Schema\" />
37-
<None Remove="Schema\hasheous-1000.sql" />
38-
<None Remove="Schema\hasheous-1001.sql" />
39-
<None Remove="Schema\hasheous-1002.sql" />
40-
<None Remove="Schema\hasheous-1003.sql" />
41-
<None Remove="Schema\hasheous-1004.sql" />
42-
<None Remove="Schema\hasheous-1005.sql" />
43-
<None Remove="Schema\hasheous-1006.sql" />
44-
<None Remove="Schema\hasheous-1007.sql" />
45-
<None Remove="Schema\hasheous-1008.sql" />
46-
<None Remove="Schema\hasheous-1009.sql" />
47-
<None Remove="Schema\hasheous-1010.sql" />
48-
<None Remove="Schema\hasheous-1011.sql" />
49-
<None Remove="Schema\hasheous-1012.sql" />
50-
<None Remove="Schema\hasheous-1013.sql" />
51-
<None Remove="Schema\hasheous-1014.sql" />
52-
<None Remove="Schema\hasheous-1015.sql" />
53-
<None Remove="Schema\hasheous-1016.sql" />
37+
<None Remove="Schema\hasheous-*.sql" />
5438
</ItemGroup>
5539
<ItemGroup>
5640
<EmbeddedResource Include="Support\Country.txt" />
5741
<EmbeddedResource Include="Support\Language.txt" />
58-
<EmbeddedResource Include="Schema\hasheous-1000.sql" />
59-
<EmbeddedResource Include="Schema\hasheous-1001.sql" />
60-
<EmbeddedResource Include="Schema\hasheous-1002.sql" />
61-
<EmbeddedResource Include="Schema\hasheous-1003.sql" />
62-
<EmbeddedResource Include="Schema\hasheous-1004.sql" />
63-
<EmbeddedResource Include="Schema\hasheous-1005.sql" />
64-
<EmbeddedResource Include="Schema\hasheous-1006.sql" />
65-
<EmbeddedResource Include="Schema\hasheous-1007.sql" />
66-
<EmbeddedResource Include="Schema\hasheous-1008.sql" />
67-
<EmbeddedResource Include="Schema\hasheous-1009.sql" />
68-
<EmbeddedResource Include="Schema\hasheous-1010.sql" />
69-
<EmbeddedResource Include="Schema\hasheous-1011.sql" />
70-
<EmbeddedResource Include="Schema\hasheous-1012.sql" />
71-
<EmbeddedResource Include="Schema\hasheous-1013.sql" />
72-
<EmbeddedResource Include="Schema\hasheous-1014.sql" />
73-
<EmbeddedResource Include="Schema\hasheous-1015.sql" />
74-
<EmbeddedResource Include="Schema\hasheous-1016.sql" />
42+
<EmbeddedResource Include="Schema\hasheous-*.sql" />
7543
</ItemGroup>
7644
</Project>

hasheous/wwwroot/localisation/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,15 @@
7979
"retroachievements": "RetroAchievements",
8080
"retroachievementsdesc": "RetroAchievements is a website that allows you to earn achievements on classic games by playing them on emulators.",
8181
"retroachievementshomepage": "https://retroachievements.org",
82+
"fbneo": "FBNeo",
83+
"fbneodesc": "FBNeo is an arcade emulator that supports a wide range of arcade games.",
84+
"fbneohomepage": "https://github.com/libretro/FBNeo",
8285
"save": "OK",
8386
"cancel": "Cancel",
8487
"metadatamap": "Metadata Mapping",
8588
"matchmethod": "Match Method",
8689
"igdb": "Internet Game Database (IGDB)",
8790
"thegamesdb": "TheGamesDB",
88-
"retroachievements": "RetroAchievements",
8991
"nomatch": "Unmatched",
9092
"manual": "Manual",
9193
"automatic": "Automatic Match",

0 commit comments

Comments
 (0)