feat: adds menu option for deleting all games in the selected view.
Also keeps all games that has "THEC64" in the title when deleting multiple games
This commit is contained in:
parent
1ebd4a14e7
commit
4ba96a2a6a
|
@ -831,7 +831,22 @@ public class DbConnector
|
|||
|
||||
public void deleteAllGames()
|
||||
{
|
||||
String sql = "DELETE FROM gameinfo;";
|
||||
String sql = "DELETE FROM gameinfo WHERE title NOT LIKE '%THEC64%'";
|
||||
logger.debug("Generated DELETE String:\n{}", sql);
|
||||
try (Connection conn = this.connect(); PreparedStatement pstmt = conn.prepareStatement(sql))
|
||||
{
|
||||
int value = pstmt.executeUpdate();
|
||||
logger.debug("Executed successfully, value = {}", value);
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
ExceptionHandler.handleException(e, "Could not delete games in db.");
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteAllGamesInView(GameView view)
|
||||
{
|
||||
String sql = "DELETE FROM gameinfo " + view.getSqlQuery() + " AND title NOT LIKE '%THEC64%'";
|
||||
logger.debug("Generated DELETE String:\n{}", sql);
|
||||
try (Connection conn = this.connect(); PreparedStatement pstmt = conn.prepareStatement(sql))
|
||||
{
|
||||
|
|
|
@ -33,21 +33,20 @@ import se.lantz.manager.ImportManager;
|
|||
import se.lantz.manager.RestoreManager;
|
||||
import se.lantz.model.MainViewModel;
|
||||
import se.lantz.model.data.GameListData;
|
||||
import se.lantz.model.data.GameView;
|
||||
import se.lantz.util.FileManager;
|
||||
import se.lantz.util.VersionChecker;
|
||||
|
||||
public class MenuManager
|
||||
{
|
||||
|
||||
private static final String IMPORT_DIR_PROPERTY = "importDir";
|
||||
private static final String EXPORT_DIR_PROPERTY = "exportDir";
|
||||
private JMenu fileMenu;
|
||||
private JMenu editMenu;
|
||||
private JMenu dbMenu;
|
||||
private JMenu toolsMenu;
|
||||
private JMenu helpMenu;
|
||||
|
||||
private JMenuItem addGameItem;
|
||||
private JMenuItem deleteGameItem;
|
||||
|
||||
private JMenuItem runGameItem;
|
||||
private JMenuItem importItem;
|
||||
private JMenuItem exportItem;
|
||||
|
@ -57,7 +56,8 @@ public class MenuManager
|
|||
|
||||
private JMenuItem backupDbItem;
|
||||
private JMenuItem restoreDbItem;
|
||||
private JMenuItem createEmptyDbItem;
|
||||
private JMenuItem deleteAllGamesItem;
|
||||
private JMenuItem deleteGamesForViewItem;
|
||||
|
||||
private JMenuItem convertScreensItem;
|
||||
|
||||
|
@ -104,12 +104,14 @@ public class MenuManager
|
|||
editMenu = new JMenu("Edit");
|
||||
editMenu.add(getToggleFavoriteItem());
|
||||
editMenu.add(getClearFavoritesItem());
|
||||
dbMenu = new JMenu("Tools");
|
||||
dbMenu.add(getBackupDbItem());
|
||||
dbMenu.add(getRestoreDbItem());
|
||||
dbMenu.add(getCreateEmptyDbItem());
|
||||
dbMenu.addSeparator();
|
||||
dbMenu.add(getConvertScreensItem());
|
||||
toolsMenu = new JMenu("Tools");
|
||||
toolsMenu.add(getBackupDbItem());
|
||||
toolsMenu.add(getRestoreDbItem());
|
||||
toolsMenu.addSeparator();
|
||||
toolsMenu.add(getDeleteAllGamesItem());
|
||||
toolsMenu.add(getDeleteGamesForViewMenuItem());
|
||||
toolsMenu.addSeparator();
|
||||
toolsMenu.add(getConvertScreensItem());
|
||||
helpMenu = new JMenu("Help");
|
||||
helpMenu.add(getHelpItem());
|
||||
helpMenu.add(getCheckVersionItem());
|
||||
|
@ -133,7 +135,7 @@ public class MenuManager
|
|||
List<JMenu> menuList = new ArrayList<JMenu>();
|
||||
menuList.add(fileMenu);
|
||||
menuList.add(editMenu);
|
||||
menuList.add(dbMenu);
|
||||
menuList.add(toolsMenu);
|
||||
menuList.add(helpMenu);
|
||||
return menuList;
|
||||
}
|
||||
|
@ -160,6 +162,14 @@ public class MenuManager
|
|||
return deleteGameItem;
|
||||
}
|
||||
|
||||
JMenuItem getDeleteGamesForViewMenuItem()
|
||||
{
|
||||
deleteGamesForViewItem = new JMenuItem("Delete all games in current view");
|
||||
|
||||
deleteGamesForViewItem.addActionListener(e -> deleteAllGamesInView());
|
||||
return deleteGamesForViewItem;
|
||||
}
|
||||
|
||||
JMenuItem getRunGameMenuItem()
|
||||
{
|
||||
runGameItem = new JMenuItem("Run Current Game");
|
||||
|
@ -256,11 +266,11 @@ public class MenuManager
|
|||
return restoreDbItem;
|
||||
}
|
||||
|
||||
private JMenuItem getCreateEmptyDbItem()
|
||||
private JMenuItem getDeleteAllGamesItem()
|
||||
{
|
||||
createEmptyDbItem = new JMenuItem("Delete all games");
|
||||
createEmptyDbItem.addActionListener(e -> deleteAllGames());
|
||||
return createEmptyDbItem;
|
||||
deleteAllGamesItem = new JMenuItem("Delete all games");
|
||||
deleteAllGamesItem.addActionListener(e -> deleteAllGames());
|
||||
return deleteAllGamesItem;
|
||||
}
|
||||
|
||||
private JMenuItem getConvertScreensItem()
|
||||
|
@ -383,7 +393,7 @@ public class MenuManager
|
|||
private void deleteAllGames()
|
||||
{
|
||||
String message =
|
||||
"Do you want to delete all games from the database? A backup will added to the backups folder before deleting.\nCover, screenshot and game files will also be deleted.";
|
||||
"Do you want to delete all games from the database? A backup will added to the backups folder before deleting.\nCovers, screenshots and game files will also be deleted.";
|
||||
int option = JOptionPane.showConfirmDialog(MainWindow.getInstance()
|
||||
.getMainPanel(), message, "Delete all games", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
|
||||
if (option == JOptionPane.YES_OPTION)
|
||||
|
@ -398,6 +408,27 @@ public class MenuManager
|
|||
}
|
||||
}
|
||||
|
||||
private void deleteAllGamesInView()
|
||||
{
|
||||
if (uiModel.getSelectedGameView().getGameViewId() == GameView.ALL_GAMES_ID)
|
||||
{
|
||||
deleteAllGames();
|
||||
}
|
||||
else
|
||||
{
|
||||
String message =
|
||||
"Do you want to delete all games in the current game view?\nCovers, screenshots and game files will also be deleted.";
|
||||
int option = JOptionPane.showConfirmDialog(MainWindow.getInstance()
|
||||
.getMainPanel(), message, "Delete all games in view", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
|
||||
if (option == JOptionPane.YES_OPTION)
|
||||
{
|
||||
MainWindow.getInstance().getMainPanel().clearGameListSelection();
|
||||
uiModel.deleteAllGamesInCurrentView();
|
||||
MainWindow.getInstance().getMainPanel().repaintAfterModifications();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void convertScreens()
|
||||
{
|
||||
String message =
|
||||
|
|
|
@ -46,6 +46,7 @@ public class MainViewModel extends AbstractModel
|
|||
private FileManager fileManager = new FileManager(this);
|
||||
|
||||
private String currentGameId = "";
|
||||
private GameDetails currentGameDetails = null;
|
||||
|
||||
private PropertyChangeListener duplicateListener;
|
||||
|
||||
|
@ -131,45 +132,41 @@ public class MainViewModel extends AbstractModel
|
|||
{
|
||||
this.selectedData = selectedData;
|
||||
currentGameId = selectedData.getGameId();
|
||||
GameDetails details = null;
|
||||
if (selectedData.getGameId().isEmpty())
|
||||
{
|
||||
//Create a default GameDetails and return
|
||||
details = new GameDetails();
|
||||
currentGameDetails = new GameDetails();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Read from db, update all models after that.
|
||||
details = dbConnector.getGameDetails(selectedData.getGameId());
|
||||
currentGameDetails = dbConnector.getGameDetails(selectedData.getGameId());
|
||||
}
|
||||
disableChangeNotification(true);
|
||||
|
||||
// Map to models
|
||||
infoModel.setTitleFromDb(details.getTitle());
|
||||
infoModel.setTitleFromDb(currentGameDetails.getTitle());
|
||||
|
||||
infoModel.setTitle(details.getTitle());
|
||||
infoModel.setDescription(details.getDescription());
|
||||
infoModel.setDescriptionDe(details.getDescriptionDe());
|
||||
infoModel.setDescriptionFr(details.getDescriptionFr());
|
||||
infoModel.setDescriptionEs(details.getDescriptionEs());
|
||||
infoModel.setDescriptionIt(details.getDescriptionIt());
|
||||
infoModel.setYear(details.getYear());
|
||||
infoModel.setAuthor(details.getAuthor());
|
||||
infoModel.setGenre(details.getGenre());
|
||||
infoModel.setComposer(details.getComposer());
|
||||
infoModel.setGamesFile(details.getGame());
|
||||
infoModel.setCoverFile(details.getCover());
|
||||
infoModel.setScreens1File(details.getScreen1());
|
||||
infoModel.setScreens2File(details.getScreen2());
|
||||
infoModel.setTitle(currentGameDetails.getTitle());
|
||||
infoModel.setDescription(currentGameDetails.getDescription());
|
||||
infoModel.setDescriptionDe(currentGameDetails.getDescriptionDe());
|
||||
infoModel.setDescriptionFr(currentGameDetails.getDescriptionFr());
|
||||
infoModel.setDescriptionEs(currentGameDetails.getDescriptionEs());
|
||||
infoModel.setDescriptionIt(currentGameDetails.getDescriptionIt());
|
||||
infoModel.setYear(currentGameDetails.getYear());
|
||||
infoModel.setAuthor(currentGameDetails.getAuthor());
|
||||
infoModel.setGenre(currentGameDetails.getGenre());
|
||||
infoModel.setComposer(currentGameDetails.getComposer());
|
||||
infoModel.setGamesFile(currentGameDetails.getGame());
|
||||
infoModel.setCoverFile(currentGameDetails.getCover());
|
||||
infoModel.setScreens1File(currentGameDetails.getScreen1());
|
||||
infoModel.setScreens2File(currentGameDetails.getScreen2());
|
||||
//Reset and images that where added previously
|
||||
infoModel.resetImagesAndOldFileNames();
|
||||
|
||||
joy1Model.setConfigStringFromDb(details.getJoy1());
|
||||
|
||||
joy2Model.setConfigStringFromDb(details.getJoy2());
|
||||
|
||||
systemModel.setConfigStringFromDb(details.getSystem());
|
||||
systemModel.setVerticalShift(details.getVerticalShift());
|
||||
joy1Model.setConfigStringFromDb(currentGameDetails.getJoy1());
|
||||
joy2Model.setConfigStringFromDb(currentGameDetails.getJoy2());
|
||||
systemModel.setConfigStringFromDb(currentGameDetails.getSystem());
|
||||
systemModel.setVerticalShift(currentGameDetails.getVerticalShift());
|
||||
|
||||
//Set empty title to trigger a change
|
||||
if (selectedData.getGameId().isEmpty())
|
||||
|
@ -416,6 +413,7 @@ public class MainViewModel extends AbstractModel
|
|||
}
|
||||
else
|
||||
{
|
||||
FileManager.deleteFilesForGame(currentGameDetails);
|
||||
dbConnector.deleteGame(currentGameId);
|
||||
//Update all games count, will be reset if its All that is loaded
|
||||
allGamesCount--;
|
||||
|
@ -432,6 +430,25 @@ public class MainViewModel extends AbstractModel
|
|||
reloadCurrentGameView();
|
||||
}
|
||||
|
||||
public void deleteAllGamesInCurrentView()
|
||||
{
|
||||
//First delete all covers, screens and games
|
||||
for (int i = 0; i < getGameListModel().getSize(); i++)
|
||||
{
|
||||
GameListData currentData = getGameListModel().getElementAt(i);
|
||||
if (!currentData.getTitle().contains("THEC64"))
|
||||
{
|
||||
GameDetails details = dbConnector.getGameDetails(currentData.getGameId());
|
||||
FileManager.deleteFilesForGame(details);
|
||||
allGamesCount--;
|
||||
allGameView.setGameCount(allGamesCount);
|
||||
}
|
||||
}
|
||||
dbConnector.deleteAllGamesInView(getSelectedGameView());
|
||||
//Reload the current view
|
||||
reloadCurrentGameView();
|
||||
}
|
||||
|
||||
public void deleteGameView(GameView view)
|
||||
{
|
||||
if (view.getGameViewId() > GameView.ALL_GAMES_ID)
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.zip.GZIPOutputStream;
|
|||
import java.util.zip.ZipEntry;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.ListModel;
|
||||
|
||||
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -38,6 +39,7 @@ import se.lantz.model.InfoModel;
|
|||
import se.lantz.model.MainViewModel;
|
||||
import se.lantz.model.SystemModel;
|
||||
import se.lantz.model.data.GameDetails;
|
||||
import se.lantz.model.data.GameListData;
|
||||
|
||||
public class FileManager
|
||||
{
|
||||
|
@ -664,22 +666,47 @@ public class FileManager
|
|||
|
||||
public static void deleteAllFolderContent()
|
||||
{
|
||||
deleteDirContent(new File(COVERS));
|
||||
deleteDirContent(new File(SCREENS));
|
||||
deleteDirContent(new File(GAMES));
|
||||
deleteDirContent(new File(COVERS), false);
|
||||
deleteDirContent(new File(SCREENS), false);
|
||||
deleteDirContent(new File(GAMES), false);
|
||||
}
|
||||
|
||||
private static void deleteDirContent(File dir)
|
||||
|
||||
private static void deleteDirContent(File dir, boolean deleteAll)
|
||||
{
|
||||
for (File file : dir.listFiles())
|
||||
{
|
||||
if (!file.isDirectory())
|
||||
if (!file.isDirectory() && (deleteAll || !file.getName().contains("THEC64")))
|
||||
{
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteFilesForGame(GameDetails details)
|
||||
{
|
||||
if (!details.getCover().isEmpty())
|
||||
{
|
||||
File coverFile = new File(COVERS + details.getCover());
|
||||
coverFile.delete();
|
||||
}
|
||||
if (!details.getScreen1().isEmpty())
|
||||
{
|
||||
File screens1File = new File(SCREENS + details.getScreen1());
|
||||
screens1File.delete();
|
||||
}
|
||||
if (!details.getScreen2().isEmpty())
|
||||
{
|
||||
File screens2File = new File(SCREENS + details.getScreen2());
|
||||
screens2File.delete();
|
||||
}
|
||||
if (!details.getGame().isEmpty())
|
||||
{
|
||||
File gameFile = new File(GAMES + details.getGame());
|
||||
gameFile.delete();
|
||||
}
|
||||
}
|
||||
|
||||
public static void restoreDb(String backupFolderName)
|
||||
{
|
||||
File backupFolder = new File(BACKUP + "/" + backupFolderName + "/");
|
||||
|
@ -701,7 +728,7 @@ public class FileManager
|
|||
try
|
||||
{
|
||||
File coversDir = new File(COVERS);
|
||||
deleteDirContent(coversDir);
|
||||
deleteDirContent(coversDir, true);
|
||||
copyDirectory(backupFolder.toPath().resolve("covers").toString(), coversDir.toPath().toString());
|
||||
}
|
||||
catch (IOException e)
|
||||
|
@ -716,7 +743,7 @@ public class FileManager
|
|||
try
|
||||
{
|
||||
File coversDir = new File(SCREENS);
|
||||
deleteDirContent(coversDir);
|
||||
deleteDirContent(coversDir, true);
|
||||
copyDirectory(backupFolder.toPath().resolve("screens").toString(), coversDir.toPath().toString());
|
||||
}
|
||||
catch (IOException e)
|
||||
|
@ -731,7 +758,7 @@ public class FileManager
|
|||
try
|
||||
{
|
||||
File coversDir = new File(GAMES);
|
||||
deleteDirContent(coversDir);
|
||||
deleteDirContent(coversDir, true);
|
||||
copyDirectory(backupFolder.toPath().resolve("games").toString(), coversDir.toPath().toString());
|
||||
}
|
||||
catch (IOException e)
|
||||
|
|
Loading…
Reference in New Issue