code clean up
* the mwc init process is now only one call in main * renamed a few methodes for better clearance * added a few TODOs
This commit is contained in:
		| @ -17,6 +17,7 @@ | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
| 		</attributes> | ||||
| 	</classpathentry> | ||||
| 	<classpathentry kind="src" path="src/test/main"/> | ||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | ||||
| 		<attributes> | ||||
| 			<attribute name="maven.pomderived" value="true"/> | ||||
|  | ||||
| @ -85,7 +85,6 @@ public class Main extends Application { | ||||
| 			FXMLLoader loader = new FXMLLoader(); | ||||
| 			loader.setLocation(ClassLoader.getSystemResource("fxml/MainWindow.fxml")); | ||||
| 			pane = (AnchorPane) loader.load(); | ||||
| //			primaryStage.setResizable(false); | ||||
| 			primaryStage.setTitle("cemu_UI"); | ||||
| //			primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("/resources/Homeflix_Icon_64x64.png"))); //adds application icon | ||||
|  | ||||
| @ -157,10 +156,11 @@ public class Main extends Application { | ||||
| 			} | ||||
| 			 | ||||
| 			// loading settings and initialize UI, dbController.main() loads all databases | ||||
| 			mainWindowController.loadSettings(); | ||||
| 			mainWindowController.checkAutoUpdate(); | ||||
| 			mainWindowController.initActions(); | ||||
| 			mainWindowController.initUI(); | ||||
| 			mainWindowController.init(); | ||||
| //			mainWindowController.loadSettings(); | ||||
| //			mainWindowController.checkAutoUpdate(); | ||||
| //			mainWindowController.initActions(); | ||||
| //			mainWindowController.initUI(); | ||||
| 			mainWindowController.dbController.main(); | ||||
| 			if(mainWindowController.isCloudSync()) { | ||||
| 				cloudController.initializeConnection(mainWindowController.getCloudService(), mainWindowController.getCemuPath()); | ||||
|  | ||||
| @ -48,7 +48,6 @@ import javax.swing.ProgressMonitorInputStream; | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
|  | ||||
| import com.cemu_UI.controller.SmmdbAPIController; | ||||
| import com.cemu_UI.controller.UpdateController; | ||||
| import com.cemu_UI.controller.dbController; | ||||
| @ -61,6 +60,7 @@ import com.cemu_UI.uiElements.JFXOkayCancelDialog; | ||||
| import com.jfoenix.controls.JFXButton; | ||||
| import com.jfoenix.controls.JFXColorPicker; | ||||
| import com.jfoenix.controls.JFXHamburger; | ||||
| import com.jfoenix.controls.JFXSpinner; | ||||
| import com.jfoenix.controls.JFXTextField; | ||||
| import com.jfoenix.controls.JFXToggleButton; | ||||
| import com.jfoenix.controls.JFXTreeTableColumn; | ||||
| @ -70,6 +70,7 @@ import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition; | ||||
| import javafx.animation.FadeTransition; | ||||
| import javafx.animation.ParallelTransition; | ||||
| import javafx.animation.TranslateTransition; | ||||
| import javafx.application.Platform; | ||||
| import javafx.beans.value.ChangeListener; | ||||
| import javafx.beans.value.ObservableValue; | ||||
| import javafx.collections.FXCollections; | ||||
| @ -318,7 +319,21 @@ public class MainWindowController { | ||||
| 		smmdbAPIController = new SmmdbAPIController(); | ||||
| 	} | ||||
| 	 | ||||
| 	void initUI() { | ||||
| 	/** | ||||
| 	 * initialize the MainWindowController | ||||
| 	 * loadSettings, checkAutoUpdate, initUI and initActions | ||||
| 	 */ | ||||
| 	void init() { | ||||
| 		loadSettings(); | ||||
| 		checkAutoUpdate(); | ||||
| 		initUI(); | ||||
| 		initActions(); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * initialize all variable UI parameters and elements | ||||
| 	 */ | ||||
| 	private void initUI() { | ||||
| 		LOGGER.info("initializing UI ..."); | ||||
| 		 | ||||
| 		if (getWindowWidth() > 100 && getWindowHeight() > 100) { | ||||
| @ -368,7 +383,7 @@ public class MainWindowController { | ||||
| 	/** | ||||
| 	 * initialize all actions not initialized by a own method | ||||
| 	 */ | ||||
| 	void initActions() { | ||||
| 	private void initActions() { | ||||
| 		LOGGER.info("initializing Actions ..."); | ||||
| 		 | ||||
| 		MWC = this; | ||||
| @ -435,7 +450,7 @@ public class MainWindowController { | ||||
| 						public void handle(ActionEvent event) { | ||||
| 							try { | ||||
| 								games.remove(selectedUIDataIndex); // remove game form games-list | ||||
| 								dbController.removeRom(selectedGameTitleID); // remove game from database | ||||
| 								dbController.removeGame(selectedGameTitleID); // remove game from database | ||||
| 								refreshUIData(); // refresh all games at gamesAnchorPane (UI) | ||||
| 							} catch (Exception e) { | ||||
| 								LOGGER.error("error while removing ROM from database!", e); | ||||
| @ -717,10 +732,31 @@ public class MainWindowController { | ||||
|      | ||||
| 	@FXML | ||||
| 	void reloadRomsBtnAction() throws IOException { | ||||
| 		reloadRomsBtn.setText("reloading..."); | ||||
| 		dbController.loadRomDirectory(getRomPath()); // TODO own thread | ||||
| 		Runtime.getRuntime().exec("java -jar cemu_UI.jar"); // start again (preventing Bugs) | ||||
| 		System.exit(0); // finishes itself | ||||
| 		 | ||||
| 		//TODO needs testing | ||||
| 		JFXSpinner spinner = new JFXSpinner(); | ||||
| 		spinner.setPrefSize(30, 30); | ||||
| 		main.pane.getChildren().add(spinner); | ||||
| 		AnchorPane.setTopAnchor(spinner, (main.pane.getHeight()-spinner.getPrefHeight())/2); | ||||
|     	AnchorPane.setLeftAnchor(spinner, (main.pane.getWidth()-spinner.getPrefWidth())/2); | ||||
|     	 | ||||
|     	Thread thread = new Thread(new Runnable() { | ||||
| 			@Override | ||||
| 			public void run() { | ||||
| 				dbController.loadRomDirectory(getRomPath()); // reload the rom directory | ||||
| 				refreshUIData(); // refresh the list of games displayed on screen | ||||
| 				 | ||||
| 				Platform.runLater(() -> { | ||||
| 					main.pane.getChildren().remove(spinner); | ||||
|                 }); | ||||
| 			} | ||||
| 		}); | ||||
| 		thread.start(); | ||||
| 		 | ||||
| //		reloadRomsBtn.setText("reloading..."); | ||||
| //		dbController.loadRomDirectory(getRomPath()); | ||||
| //		Runtime.getRuntime().exec("java -jar cemu_UI.jar"); // start again (preventing Bugs) | ||||
| //		System.exit(0); // finishes itself | ||||
| 	} | ||||
|      | ||||
| 	@FXML | ||||
| @ -1009,8 +1045,8 @@ public class MainWindowController { | ||||
| 			} | ||||
| 			 | ||||
| 			try { | ||||
| 				dbController.addRom(title, coverPath, romPath, titleID, "", "", "", "0"); | ||||
| 				dbController.loadSingleRom(titleID); | ||||
| 				dbController.addGame(title, coverPath, romPath, titleID, "", "", "", "0"); | ||||
| 				dbController.loadSingleGame(titleID); | ||||
| 				if (menuTrue) { | ||||
| 					sideMenuSlideOut(); | ||||
| 					burgerTask.setRate(-1.0); | ||||
| @ -1027,7 +1063,7 @@ public class MainWindowController { | ||||
| 	public void editBtnReturn(String title, String coverPath, String romPath, String titleID) { | ||||
| 		dbController.setGameInfo(title, coverPath, romPath, titleID); | ||||
| 		games.remove(selectedUIDataIndex); | ||||
| 		dbController.loadSingleRom(titleID); | ||||
| 		dbController.loadSingleGame(titleID); | ||||
| 		refreshUIData(); | ||||
|  | ||||
| 		LOGGER.info("successfully edited " + titleID + ", new name is \"" + title + "\""); | ||||
| @ -1038,7 +1074,7 @@ public class MainWindowController { | ||||
|      * @param title : game title | ||||
|      * @param coverPath : path to cover (cache) | ||||
|      * @param romPath : path to ROM file (.rpx) | ||||
|      * @param titleID : ROM ID | ||||
|      * @param titleID : game ID | ||||
|      */ | ||||
|     public void addGame(String title, String coverPath, String romPath, String titleID){ | ||||
|     	VBox VBox = new VBox(); | ||||
| @ -1176,7 +1212,7 @@ public class MainWindowController { | ||||
| 		lastTimePlayedBtn.setLayoutX((width / 2) + 50 + 20.5); | ||||
| 	} | ||||
|  | ||||
| 	void checkAutoUpdate() { | ||||
| 	private void checkAutoUpdate() { | ||||
|  | ||||
| 		if (isAutoUpdate()) { | ||||
| 			try { | ||||
| @ -1444,7 +1480,7 @@ public class MainWindowController { | ||||
|      * loading saved settings from the config.xml file | ||||
|      * if a value is not present, default is used instead | ||||
|      */ | ||||
|     void loadSettings(){ | ||||
|     private void loadSettings(){ | ||||
|     	LOGGER.info("loading settings ..."); | ||||
| 		InputStream inputStream; | ||||
| 		try { | ||||
|  | ||||
| @ -55,7 +55,7 @@ public class dbController { | ||||
| 	 | ||||
| 	private MainWindowController mainWindowController; | ||||
| 	private ArrayList<String> entries = new ArrayList<>(); | ||||
| 	private String DB_PATH; | ||||
| 	private String DB_PATH_localRoms; | ||||
| 	private String DB_PATH_games; | ||||
| 	private Connection connection = null; | ||||
| 	private Connection connectionGames = null; | ||||
| @ -66,20 +66,25 @@ public class dbController { | ||||
| 		loadRomDatabase(); | ||||
| 		loadGamesDatabase(); | ||||
| 		createRomDatabase(); | ||||
| 		loadAllRoms(); | ||||
| 		loadAllGames(); | ||||
| 		checkRemoveEntry(); | ||||
| 		LOGGER.info("<==========finished loading sql==========>"); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * set the path to the localRoms.db file and initialize the connection | ||||
| 	 *  | ||||
| 	 * TODO this should be called LocalGames | ||||
| 	 */ | ||||
| 	private void loadRomDatabase(){ | ||||
| 		if (System.getProperty("os.name").equals("Linux")) { | ||||
| 			DB_PATH = System.getProperty("user.home") + "/cemu_UI/localRoms.db"; | ||||
| 			DB_PATH_localRoms = System.getProperty("user.home") + "/cemu_UI/localRoms.db"; | ||||
| 		}else{ | ||||
| 			DB_PATH = System.getProperty("user.home") + "\\Documents\\cemu_UI" + "\\" + "localRoms.db"; | ||||
| 			DB_PATH_localRoms = System.getProperty("user.home") + "\\Documents\\cemu_UI" + "\\" + "localRoms.db"; | ||||
| 		} | ||||
| 		try { | ||||
| 			// create a database connection | ||||
| 			connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH); | ||||
| 			connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH_localRoms); | ||||
| 			connection.setAutoCommit(false);	//AutoCommit to false -> manual commit is active | ||||
| 		} catch (SQLException e) { | ||||
| 			// if the error message is "out of memory", it probably means no database file is found | ||||
| @ -89,28 +94,34 @@ public class dbController { | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * this method is used to load the games database with additional informations about a game | ||||
| 	 * it is used if a new game is added (automatic or manual) | ||||
| 	 * set the path to the localRoms.db file and initialize the connection | ||||
| 	 *  | ||||
| 	 * games.dbcontains a reverence list to for the automatic detection mode | ||||
| 	 * TODO this should be called ReferenceGameList the games table should be called reference_games | ||||
| 	 */ | ||||
| 	private void loadGamesDatabase(){ | ||||
| 	private void loadGamesDatabase() { | ||||
| 		if (System.getProperty("os.name").equals("Linux")) { | ||||
| 			DB_PATH_games = System.getProperty("user.home") + "/cemu_UI/games.db"; | ||||
| 		}else{ | ||||
| 		} else { | ||||
| 			DB_PATH_games = System.getProperty("user.home") + "\\Documents\\cemu_UI" + "\\" + "games.db"; | ||||
| 		} | ||||
| 		try { | ||||
| 			// create a database connection | ||||
| 			connectionGames = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH_games); | ||||
| 			connectionGames.setAutoCommit(false);	//AutoCommit to false -> manual commit is active | ||||
| 			connectionGames.setAutoCommit(false); // AutoCommit to false -> manual commit is active | ||||
| 		} catch (SQLException e) { | ||||
| 			// if the error message is "out of memory", it probably means no database file is found | ||||
| 			LOGGER.error("error while loading the games database", e); | ||||
| 		} | ||||
| 		LOGGER.info("games database loaded successfull"); | ||||
| 	} | ||||
| 	 | ||||
| 	//creating database, if database has 0 entries search for all .rpx files in the roms directory and add them | ||||
| 	void createRomDatabase() {  | ||||
| 	/** | ||||
| 	 * creating the local_roms table in localRoms.db | ||||
| 	 * if the table has no entries, call loadRomDirectory | ||||
| 	 *  | ||||
| 	 * TODO the local_roms table should be called local_games | ||||
| 	 */ | ||||
| 	void createRomDatabase() { | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			stmt.executeUpdate("create table if not exists local_roms (title, coverPath, romPath, titleID, productCode, region, lastPlayed, timePlayed)"); | ||||
| @ -119,24 +130,25 @@ public class dbController { | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("error while creating ROM database", e); | ||||
| 		} | ||||
| 		 | ||||
| 		try {  | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms");  | ||||
| 			while (rs.next()) {  | ||||
|  | ||||
| 		try { | ||||
| 			Statement stmt = connection.createStatement(); | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms"); | ||||
| 			while (rs.next()) { | ||||
| 				entries.add(rs.getString(2)); | ||||
| 			} | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		}catch (SQLException e){ | ||||
| 		} catch (SQLException e) { | ||||
| 			LOGGER.error("error while loading ROMs from ROM database, local_roms table", e); | ||||
| 		} | ||||
| 		if(entries.size() == 0){ | ||||
| 		if (entries.size() == 0) { | ||||
| 			loadRomDirectory(mainWindowController.getRomPath()); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public void addRom(String title, String coverPath, String romPath, String titleID, String productCode, String region, String lastPlayed, String timePlayed) throws SQLException{ | ||||
| 	// add a Ggame to the database | ||||
| 	public void addGame(String title, String coverPath, String romPath, String titleID, String productCode, String region, String lastPlayed, String timePlayed) throws SQLException{ | ||||
| 		Statement stmt = connection.createStatement(); | ||||
| 		stmt.executeUpdate("insert into local_roms values ('"+title+"','"+coverPath+"','"+romPath+"','"+titleID+"'," | ||||
| 				+ "'"+productCode+"','"+region+"','"+lastPlayed+"','"+timePlayed+"')"); | ||||
| @ -145,7 +157,7 @@ public class dbController { | ||||
| 		LOGGER.info("added \""+title+"\" to ROM database"); | ||||
| 	} | ||||
| 	 | ||||
| 	public void removeRom(String titleID) throws SQLException{ | ||||
| 	public void removeGame(String titleID) throws SQLException{ | ||||
| 		Statement stmt = connection.createStatement(); | ||||
| 		stmt.executeUpdate("delete from local_roms where titleID = '"+titleID+"'"); | ||||
| 		connection.commit(); | ||||
| @ -154,8 +166,8 @@ public class dbController { | ||||
| 	} | ||||
| 	 | ||||
| 	//load all ROMs on startup to the mainWindowController | ||||
| 	void loadAllRoms(){ | ||||
| 		LOGGER.info("loading all rom's on startup into the mainWindowController ..."); | ||||
| 	void loadAllGames(){ | ||||
| 		LOGGER.info("loading all games on startup into the mainWindowController ..."); | ||||
| 		try {  | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms");  | ||||
| @ -165,13 +177,13 @@ public class dbController { | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		}catch (Exception e){ | ||||
| 			LOGGER.error("error while loading all ROMs into the mainWindowController", e); | ||||
| 			LOGGER.error("error while loading all games into the mainWindowController", e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	//load one single ROM after manual adding into the mainWindowController | ||||
| 	public void loadSingleRom(String titleID){ | ||||
| 		LOGGER.info("loading a single ROM (ID: "+titleID+") into the mainWindowController ...");  | ||||
| 	public void loadSingleGame(String titleID){ | ||||
| 		LOGGER.info("loading a single game (ID: "+titleID+") into the mainWindowController ...");  | ||||
| 		try {  | ||||
| 			Statement stmt = connection.createStatement();  | ||||
| 			ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms where titleID = '"+titleID+"'");  | ||||
| @ -181,11 +193,14 @@ public class dbController { | ||||
| 			stmt.close(); | ||||
| 			rs.close(); | ||||
| 		}catch (Exception e){ | ||||
| 			LOGGER.error("error while loading a single ROM into the mainWindowController", e); | ||||
| 			LOGGER.error("error while loading a single game into the mainWindowController", e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	//get all files with .rpx TODO add other formats | ||||
| 	/** | ||||
| 	 * get all .rpx files from a given directory and add them to the games database if they don't exist there | ||||
| 	 * @param directory where to search for the .rpx files | ||||
| 	 */ | ||||
| 	public void loadRomDirectory(String directory){ | ||||
| 		File dir = new File(directory); | ||||
| 		File appFile; | ||||
| @ -203,6 +218,7 @@ public class dbController { | ||||
| 			Statement stmt = connectionGames.createStatement(); | ||||
| 			List<File> files = (List<File>) FileUtils.listFiles(dir, extensions, true); | ||||
| 			LOGGER.info("Getting all .rpx files in " + dir.getCanonicalPath()+" including those in subdirectories"); | ||||
| 			// for all files in dir get the app.xml | ||||
| 			for (File file : files) { | ||||
| 				if(System.getProperty("os.name").equals("Linux")){ | ||||
| 					appFile = new File(file.getParent()+"/app.xml"); | ||||
| @ -212,10 +228,11 @@ public class dbController { | ||||
| 				DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); | ||||
| 				DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); | ||||
| 				Document document = documentBuilder.parse(appFile); | ||||
| 				String title_ID = document.getElementsByTagName("title_id").item(0).getTextContent(); | ||||
| 				String title_ID = document.getElementsByTagName("title_id").item(0).getTextContent(); //get titile_ID from app.xml | ||||
| 				title_ID = title_ID.substring(0, 8) + "-" + title_ID.substring(8, title_ID.length()); | ||||
| 				LOGGER.info("Name: "+file.getName()+"; Title ID: "+title_ID); | ||||
| 				ResultSet rs = stmt.executeQuery("SELECT * FROM games WHERE TitleID = '"+title_ID+"';"); | ||||
| 				// for all elements in the games table check if it's already present, else add it | ||||
| 				while (rs.next()) { | ||||
| 					if (checkEntry(rs.getString(2))) { | ||||
| 						LOGGER.info(rs.getString(2) + ": game already in database"); | ||||
| @ -233,7 +250,7 @@ public class dbController { | ||||
| 					    } | ||||
| 					     | ||||
| 						LOGGER.info(rs.getString(2) + ": adding ROM"); | ||||
| 						addRom(rs.getString(2), coverPath, file.getCanonicalPath(), rs.getString(1), rs.getString(3), rs.getString(5),"","0"); | ||||
| 						addGame(rs.getString(2), coverPath, file.getCanonicalPath(), rs.getString(1), rs.getString(3), rs.getString(5),"","0"); | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
							
								
								
									
										43
									
								
								src/test/main/com/cemu_UI/test/AppTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/test/main/com/cemu_UI/test/AppTest.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| package com.cemu_UI.test; | ||||
|  | ||||
| import java.io.File; | ||||
|  | ||||
| import junit.framework.Assert; | ||||
| import junit.framework.Test; | ||||
| import junit.framework.TestCase; | ||||
| import junit.framework.TestSuite; | ||||
|  | ||||
| /** | ||||
|  * Unit test for simple App. | ||||
|  */ | ||||
| public class AppTest extends TestCase { | ||||
|  | ||||
| 	/** | ||||
| 	 * Create the test case | ||||
| 	 * | ||||
| 	 * @param testName | ||||
| 	 *            name of the test case | ||||
| 	 */ | ||||
| 	public AppTest(String testName) { | ||||
| 		super(testName); | ||||
| 	} | ||||
|  | ||||
| 	private void testClientsSecret() { | ||||
| 		File client_secret = new File("/client_secret.json"); | ||||
| 		Assert.assertTrue(client_secret.exists()); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the suite of tests being tested | ||||
| 	 */ | ||||
| 	public static Test suite() { | ||||
| 		return new TestSuite(AppTest.class); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Rigourous Test :-) | ||||
| 	 */ | ||||
| 	public void testApp() { | ||||
| 		assertTrue(true); | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user