feat: continued work on gb inporter

This commit is contained in:
lantzelot-swe 2021-03-06 13:36:55 +01:00
parent e21db04d66
commit 0b3e77bbc1
7 changed files with 82 additions and 13 deletions

12
pom.xml
View File

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>se.lantz</groupId>
<artifactId>PCUGameManager</artifactId>
<version>1.4.1</version>
<version>1.5.0</version>
<name>PCUGameManager</name>
<dependencies>
<dependency>
@ -52,6 +52,16 @@
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>
<dependency>
<groupId>net.sf.ucanaccess</groupId>
<artifactId>ucanaccess</artifactId>
<version>4.0.4</version>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -13,6 +13,7 @@ import java.sql.Statement;
import se.lantz.manager.ImportManager;
import se.lantz.scraper.GamebaseScraper;
import se.lantz.util.ExceptionHandler;
import se.lantz.util.FileManager;
public class GamebaseImporter
@ -81,7 +82,7 @@ public class GamebaseImporter
sql =
"SELECT Games.Name, Musicians.Musician, Genres.Genre, Publishers.Publisher, Games.Filename, Games.ScrnshotFilename, Years.Year, Games.GA_Id, Games.Control, Games.V_PalNTSC, Games.V_TrueDriveEmu, Games.Gemus\r\n" +
"FROM Years INNER JOIN (Publishers INNER JOIN ((Games INNER JOIN Musicians ON Games.MU_Id = Musicians.MU_Id) INNER JOIN Genres ON Games.GE_Id = Genres.GE_Id) ON Publishers.PU_Id = Games.PU_Id) ON Years.YE_Id = Games.YE_Id\r\n" +
"WHERE (((Games.Name)='Birds, The'));";
"WHERE (((Games.Name) LIKE 'alien attack'));";
result = statement.executeQuery(sql);
int gameCount = 0;
@ -102,7 +103,13 @@ public class GamebaseImporter
int palOrNtsc = result.getInt("V_PalNTSC");
int trueDriveEmu = result.getInt("V_TrueDriveEmu");
String gemus = result.getString("Gemus");
if (gamefile.isEmpty())
{
builder.append("Ignoring " + title + " (No game file available)\n");
continue;
}
//Setup video mode
//0=PAL, 1=BOTH, 2=NTSC, 3=PAL[+NTSC?]
String video = (palOrNtsc == 2) ? "ntsc" : "pal";
@ -127,8 +134,7 @@ public class GamebaseImporter
joy1config = "J:1" + joyBase;
joy2config = "J:2*" + joyBase;
}
//Fix game file, but only for C64?
gamefile = getFileToInclude(gbDatabasePath, gamefile);//isC64 ? getFileToInclude(gbDatabasePath, gamefile) : gamefile;
//Fix screenshots
screen1 = gbDatabasePath.toString() + "\\screenshots\\" + screen1;
@ -152,6 +158,38 @@ public class GamebaseImporter
{
coverFile = gbDatabasePath.toString() + "\\extras\\" + coverFile;
}
//Get cartridge if available, easyflash is preferred
String cartridgeSql =
"SELECT Extras.Name, Extras.Path\r\n" + "FROM Games INNER JOIN Extras ON Games.GA_Id = Extras.GA_Id\r\n" +
"WHERE (((Games.GA_Id)=" + gameId + ") AND ((Extras.Name) Like \"*Cartridge*\"));";
sqlResult = statement.executeQuery(cartridgeSql);
String cartridgePath = "";
while (sqlResult.next())
{
if (cartridgePath.isEmpty())
{
cartridgePath = sqlResult.getString("Path");
}
//Pick easyflash if available
String name = sqlResult.getString("Name");
if (name.contains("EasyFlash"))
{
cartridgePath = sqlResult.getString("Path");
}
}
if (!cartridgePath.isEmpty())
{
gamefile = gbDatabasePath.toString() + "\\extras\\" + cartridgePath;
}
//Fix game file
gamefile = getFileToInclude(gbDatabasePath, gamefile);
importManager.addFromGamebaseImporter(title,
year,
publisher,
@ -169,6 +207,7 @@ public class GamebaseImporter
catch (Exception e)
{
builder.append("ERROR: Could not fetch all info for " + title + ":\n" + e.toString() + "\n");
ExceptionHandler.handleException(e, "Could not fetch all info for " + title);
}
}
builder.append("Read " + gameCount + " games from the gamebase db.\n");
@ -176,6 +215,7 @@ public class GamebaseImporter
catch (SQLException ex)
{
builder.append("ERROR: Query failed : " + ex.toString() + "\n");
ExceptionHandler.handleException(ex, "Query failed");
}
return builder;
}

View File

@ -32,7 +32,10 @@ public class CarouselImportWorker extends SwingWorker<Void, String>
publish("Importing to db...");
publish(importManager.insertRowsIntoDb().toString());
publish("Copying screenshots, covers and game files...");
publish(importManager.copyFiles(false).toString());
for (List<String> rowList : importManager.getDbRowReadChunks())
{
publish(importManager.copyFiles(false, rowList).toString());
}
importManager.clearAfterImport();
publish("Done!");
return null;

View File

@ -30,7 +30,10 @@ public class GamebaseImportWorker extends SwingWorker<Void, String>
publish("Importing to db...");
publish(importManager.insertRowsIntoDb().toString());
publish("Copying screenshots, covers and game files...");
publish(importManager.copyFiles(true).toString());
for (List<String> rowList : importManager.getDbRowReadChunks())
{
publish(importManager.copyFiles(true, rowList).toString());
}
importManager.clearAfterImport();
publish("Done!");
return null;

View File

@ -96,6 +96,11 @@ public class ImportProgressPanel extends JPanel
//Check for errors
String text = getTextArea().getText();
int count = text.length() - text.replace("ERROR:", "").length();
int ignoreCount = text.length() - text.replace("Ignoring", "").length();
if (ignoreCount > 0)
{
getTextArea().append("\n" + ignoreCount/8 + " games ignored.\n");
}
if (count > 0)
{
getTextArea().append("\nImport ended with " + count/6 + " errors. See log file for details.");

View File

@ -24,6 +24,8 @@ import javax.imageio.ImageIO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
import se.lantz.model.MainViewModel;
import se.lantz.util.ExceptionHandler;
import se.lantz.util.FileManager;
@ -428,10 +430,10 @@ public class ImportManager
int duplicateIndex = 0;
if (selectedOption == Options.ADD)
{
duplicateIndex = uiModel.getDbConnector().getGameDuplicateIndexToUse(title);
//Check any duplicates in added rows also
duplicateIndex = duplicateIndex + getDbRowDuplicate(title);
duplicateIndex = uiModel.getDbConnector().getGameDuplicateIndexToUse(title);
}
//Check any duplicates in added rows, always use this otherwise duplicates uses same names.
duplicateIndex = duplicateIndex + getDbRowDuplicate(title);
return duplicateIndex;
}
@ -462,12 +464,18 @@ public class ImportManager
}
return lines;
}
public List<List<String>> getDbRowReadChunks()
{
return Lists.partition(dbRowDataList, 50);
}
public StringBuilder copyFiles(boolean gamebaseImport)
public StringBuilder copyFiles(boolean gamebaseImport, List<String> rowList)
{
StringBuilder infoBuilder = new StringBuilder();
//Copy with the existing file names. At export convert to a name that works with the maxi tool if needed.
dbRowDataList.stream().forEach(dbRowData -> copyFiles(dbRowData, infoBuilder, gamebaseImport));
rowList.stream().forEach(dbRowData -> copyFiles(dbRowData, infoBuilder, gamebaseImport));
return infoBuilder;
}

View File

@ -316,7 +316,7 @@ public class FileManager
}
// Do the conversion
List<Character> forbiddenCharsList =
" ,:'-.!+*<>()".chars().mapToObj(item -> (char) item).collect(Collectors.toList());
" ,:'-.!+*<>()/".chars().mapToObj(item -> (char) item).collect(Collectors.toList());
List<Character> newName =
title.chars().mapToObj(item -> (char) item).filter(character -> !forbiddenCharsList.contains(character))