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:
@@ -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))
|
|
||||||
|
string targetPathWithFileName = GameFileImportPath.Replace(Config.LibraryConfiguration.LibraryImportDirectory, Config.LibraryConfiguration.LibraryImportDuplicatesDirectory);
|
||||||
|
string targetPath = Path.GetDirectoryName(targetPathWithFileName);
|
||||||
|
|
||||||
|
if (!Directory.Exists(targetPath))
|
||||||
{
|
{
|
||||||
Logging.Log(Logging.LogType.Warning, "Import Game", " " + GameFileImportPath + " already in database - moving to " + Config.LibraryConfiguration.LibraryImportDuplicatesDirectory);
|
Directory.CreateDirectory(targetPath);
|
||||||
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
|
|
||||||
if (GameFileImportPath.StartsWith(Config.LibraryConfiguration.LibraryUploadDirectory))
|
|
||||||
{
|
|
||||||
Logging.Log(Logging.LogType.Warning, "Import Game", " " + GameFileImportPath + " already in database - skipping import");
|
|
||||||
}
|
}
|
||||||
|
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))
|
||||||
{
|
{
|
||||||
|
@@ -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))
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user