Recursively import files in the import directory. Duplicates are now moved to the same path, but in the import errors directory (#159)

This commit is contained in:
Michael Green
2023-10-14 21:45:50 -07:00
committed by GitHub
parent a8bf5a9412
commit 7c504ba8fd
3 changed files with 78 additions and 70 deletions

View File

@@ -22,8 +22,13 @@ namespace gaseous_server.Classes
// import files first // import files first
foreach (string importContent in importContents_Files) { foreach (string importContent in importContents_Files) {
ImportGame.ImportGameFile(importContent, null, false); ImportGame.ImportGameFile(importContent, null);
} }
// import sub directories
foreach (string importDir in importContents_Directories) {
Classes.ImportGames importGames = new Classes.ImportGames(importDir);
}
} }
else else
{ {
@@ -37,7 +42,7 @@ namespace gaseous_server.Classes
public class ImportGame public class ImportGame
{ {
public static void ImportGameFile(string GameFileImportPath, IGDB.Models.Platform? OverridePlatform, bool IsDirectory = false) public static void ImportGameFile(string GameFileImportPath, IGDB.Models.Platform? OverridePlatform)
{ {
Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); Database db = new gaseous_tools.Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
string sql = ""; string sql = "";
@@ -49,88 +54,89 @@ namespace gaseous_server.Classes
} }
else else
{ {
if (IsDirectory == false) FileInfo fi = new FileInfo(GameFileImportPath);
{ Common.hashObject hash = new Common.hashObject(GameFileImportPath);
FileInfo fi = new FileInfo(GameFileImportPath);
Common.hashObject hash = new Common.hashObject(GameFileImportPath);
Models.PlatformMapping.PlatformMapItem? IsBios = Classes.Bios.BiosHashSignatureLookup(hash.md5hash); Models.PlatformMapping.PlatformMapItem? IsBios = Classes.Bios.BiosHashSignatureLookup(hash.md5hash);
if (IsBios == null) if (IsBios == null)
{
// file is a rom
// check to make sure we don't already have this file imported
sql = "SELECT COUNT(Id) AS count FROM Games_Roms WHERE MD5=@md5 AND SHA1=@sha1";
dbDict.Add("md5", hash.md5hash);
dbDict.Add("sha1", hash.sha1hash);
DataTable importDB = db.ExecuteCMD(sql, dbDict);
if ((Int64)importDB.Rows[0]["count"] > 0)
{ {
// file is a rom // import source was the import directory
// check to make sure we don't already have this file imported if (GameFileImportPath.StartsWith(Config.LibraryConfiguration.LibraryImportDirectory))
sql = "SELECT COUNT(Id) AS count FROM Games_Roms WHERE MD5=@md5 AND SHA1=@sha1";
dbDict.Add("md5", hash.md5hash);
dbDict.Add("sha1", hash.sha1hash);
DataTable importDB = db.ExecuteCMD(sql, dbDict);
if ((Int64)importDB.Rows[0]["count"] > 0)
{ {
// import source was the import directory Logging.Log(Logging.LogType.Warning, "Import Game", " " + GameFileImportPath + " already in database - moving to " + Config.LibraryConfiguration.LibraryImportDuplicatesDirectory);
if (GameFileImportPath.StartsWith(Config.LibraryConfiguration.LibraryImportDirectory))
{
Logging.Log(Logging.LogType.Warning, "Import Game", " " + GameFileImportPath + " already in database - moving to " + Config.LibraryConfiguration.LibraryImportDuplicatesDirectory);
if (!Directory.Exists(Config.LibraryConfiguration.LibraryImportDuplicatesDirectory))
{
Directory.CreateDirectory(Config.LibraryConfiguration.LibraryImportDuplicatesDirectory);
}
File.Move(GameFileImportPath, Path.Combine(Config.LibraryConfiguration.LibraryImportDuplicatesDirectory, Path.GetFileName(GameFileImportPath)), true);
}
// import source was the upload directory string targetPathWithFileName = GameFileImportPath.Replace(Config.LibraryConfiguration.LibraryImportDirectory, Config.LibraryConfiguration.LibraryImportDuplicatesDirectory);
if (GameFileImportPath.StartsWith(Config.LibraryConfiguration.LibraryUploadDirectory)) string targetPath = Path.GetDirectoryName(targetPathWithFileName);
if (!Directory.Exists(targetPath))
{ {
Logging.Log(Logging.LogType.Warning, "Import Game", " " + GameFileImportPath + " already in database - skipping import"); Directory.CreateDirectory(targetPath);
} }
File.Move(GameFileImportPath, targetPathWithFileName, true);
} }
else
// import source was the upload directory
if (GameFileImportPath.StartsWith(Config.LibraryConfiguration.LibraryUploadDirectory))
{ {
Logging.Log(Logging.LogType.Information, "Import Game", " " + GameFileImportPath + " not in database - processing"); Logging.Log(Logging.LogType.Warning, "Import Game", " " + GameFileImportPath + " already in database - skipping import");
Models.Signatures_Games discoveredSignature = GetFileSignature(hash, fi, GameFileImportPath);
// get discovered platform
IGDB.Models.Platform? determinedPlatform = null;
if (OverridePlatform == null)
{
determinedPlatform = Metadata.Platforms.GetPlatform(discoveredSignature.Flags.IGDBPlatformId);
if (determinedPlatform == null)
{
determinedPlatform = new IGDB.Models.Platform();
}
}
else
{
determinedPlatform = OverridePlatform;
discoveredSignature.Flags.IGDBPlatformId = (long)determinedPlatform.Id;
discoveredSignature.Flags.IGDBPlatformName = determinedPlatform.Name;
}
IGDB.Models.Game determinedGame = SearchForGame(discoveredSignature.Game.Name, discoveredSignature.Flags.IGDBPlatformId);
// add to database
StoreROM(GameLibrary.GetDefaultLibrary, hash, determinedGame, determinedPlatform, discoveredSignature, GameFileImportPath);
} }
} }
else else
{ {
// file is a bios Logging.Log(Logging.LogType.Information, "Import Game", " " + GameFileImportPath + " not in database - processing");
if (IsBios.WebEmulator != null)
Models.Signatures_Games discoveredSignature = GetFileSignature(hash, fi, GameFileImportPath);
// get discovered platform
IGDB.Models.Platform? determinedPlatform = null;
if (OverridePlatform == null)
{ {
foreach (Classes.Bios.BiosItem biosItem in Classes.Bios.GetBios()) determinedPlatform = Metadata.Platforms.GetPlatform(discoveredSignature.Flags.IGDBPlatformId);
if (determinedPlatform == null)
{ {
if (biosItem.Available == false && biosItem.hash == hash.md5hash) determinedPlatform = new IGDB.Models.Platform();
}
}
else
{
determinedPlatform = OverridePlatform;
discoveredSignature.Flags.IGDBPlatformId = (long)determinedPlatform.Id;
discoveredSignature.Flags.IGDBPlatformName = determinedPlatform.Name;
}
IGDB.Models.Game determinedGame = SearchForGame(discoveredSignature.Game.Name, discoveredSignature.Flags.IGDBPlatformId);
// add to database
StoreROM(GameLibrary.GetDefaultLibrary, hash, determinedGame, determinedPlatform, discoveredSignature, GameFileImportPath);
}
}
else
{
// file is a bios
if (IsBios.WebEmulator != null)
{
foreach (Classes.Bios.BiosItem biosItem in Classes.Bios.GetBios())
{
if (biosItem.Available == false && biosItem.hash == hash.md5hash)
{
string biosPath = biosItem.biosPath.Replace(biosItem.filename, "");
if (!Directory.Exists(biosPath))
{ {
string biosPath = biosItem.biosPath.Replace(biosItem.filename, ""); Directory.CreateDirectory(biosPath);
if (!Directory.Exists(biosPath))
{
Directory.CreateDirectory(biosPath);
}
File.Move(GameFileImportPath, biosItem.biosPath, true);
break;
} }
File.Move(GameFileImportPath, biosItem.biosPath, true);
break;
} }
} }
} }
@@ -574,7 +580,7 @@ namespace gaseous_server.Classes
Logging.Log(Logging.LogType.Information, "Organise Library", "Finsihed default library organisation"); Logging.Log(Logging.LogType.Information, "Organise Library", "Finsihed default library organisation");
} }
private static void DeleteOrphanedDirectories(string startLocation) public static void DeleteOrphanedDirectories(string startLocation)
{ {
foreach (var directory in Directory.GetDirectories(startLocation)) foreach (var directory in Directory.GetDirectories(startLocation))
{ {

View File

@@ -70,7 +70,7 @@ namespace gaseous_server.Controllers
// Process uploaded files // Process uploaded files
foreach (Dictionary<string, object> UploadedFile in UploadedFiles) foreach (Dictionary<string, object> UploadedFile in UploadedFiles)
{ {
Classes.ImportGame.ImportGameFile((string)UploadedFile["fullpath"], OverridePlatform, false); Classes.ImportGame.ImportGameFile((string)UploadedFile["fullpath"], OverridePlatform);
} }
if (Directory.Exists(workPath)) if (Directory.Exists(workPath))

View File

@@ -116,6 +116,8 @@ namespace gaseous_server
Logging.Log(Logging.LogType.Debug, "Timered Event", "Starting Title Ingestor"); Logging.Log(Logging.LogType.Debug, "Timered Event", "Starting Title Ingestor");
Classes.ImportGames importGames = new Classes.ImportGames(Config.LibraryConfiguration.LibraryImportDirectory); Classes.ImportGames importGames = new Classes.ImportGames(Config.LibraryConfiguration.LibraryImportDirectory);
Classes.ImportGame.DeleteOrphanedDirectories(Config.LibraryConfiguration.LibraryImportDirectory);
_SaveLastRunTime = true; _SaveLastRunTime = true;
break; break;