From 7bbe7816458f872f1495c11f21af38100f864485 Mon Sep 17 00:00:00 2001 From: Seil0 Date: Sat, 25 Mar 2017 15:18:45 +0100 Subject: [PATCH] added time played in total, code clean up time played in total, current way is not really nice maybe will be change in a future update --- bin/application/MainWindow.fxml | 8 +- bin/application/MainWindowController$1.class | Bin 2422 -> 2239 bytes bin/application/MainWindowController$2.class | Bin 2952 -> 3966 bytes bin/application/MainWindowController$3.class | Bin 4235 -> 4240 bytes bin/application/MainWindowController$4.class | Bin 1093 -> 1093 bytes bin/application/MainWindowController$5.class | Bin 1124 -> 1091 bytes bin/application/MainWindowController$6.class | Bin 1124 -> 1091 bytes bin/application/MainWindowController$7.class | Bin 3939 -> 4118 bytes bin/application/MainWindowController.class | Bin 24237 -> 25175 bytes bin/application/dbController.class | Bin 10852 -> 11298 bytes src/application/MainWindow.fxml | 8 +- src/application/MainWindowController.java | 224 +++++++++++-------- src/application/dbController.java | 27 ++- 13 files changed, 167 insertions(+), 100 deletions(-) diff --git a/bin/application/MainWindow.fxml b/bin/application/MainWindow.fxml index 75c7178..e840dec 100644 --- a/bin/application/MainWindow.fxml +++ b/bin/application/MainWindow.fxml @@ -43,6 +43,11 @@ + + + + + @@ -60,9 +65,6 @@ - - - diff --git a/bin/application/MainWindowController$1.class b/bin/application/MainWindowController$1.class index 866f9d0159ad7cdc51577f97e6aa827cec3ea421..fa220751a08365cd6bfe8009ec0685f10fbe9d69 100644 GIT binary patch delta 264 zcmXAjJxf9X6o#LBy&rgW$g7fqNJ~KtLFOVz+0a=y+{gKI~1|a2BisgM|Fr3ERV6VnU)}j)VrQ2mE z!%8>SiA{;eQ9Q+|!E8C}7PF-R_kPxY7~=`U3L}><6a^BQWX9$ievBJDs|ydbc_hZD zE;Rd#o~JQi&X;_}`Fpxw|EL@8-R_)U@Pbd~6VPA58L#y!!Wyyut$ZTOz?{-_L<{=C4RHaA3ku1LskEw zsnc+pxS(cZVp7tui|4!`BGy)3GA?Y6X0eRR3tma3MdUA)WMemHcrA_w(UMXX5j@%6 x@s)`hlR9-I%xg&rGM!LCnoQy9!*@)F(hReL1{dX?d0~#6X^S4WB+o*+`9D!~Wqkku diff --git a/bin/application/MainWindowController$2.class b/bin/application/MainWindowController$2.class index 925c44a101788399489a0ab50397917eac8fbd8e..9438d1f29efa7892eec39e14328411ec458637ff 100644 GIT binary patch delta 1478 zcmZ{kdu&s66vscmcI$1+HL}8BGjl6p=r%JNB09$=FmS|%vFR8P;vaY^*V)mvv%4J+ zA64;z&!HDl=L=t(Z{3)e0SfrQ2P%qy0uDvQM>HxX5=k`Z@3wQBQJeIf^ZR|zIp1^6 z@8qr?dotg<^W^5Oz+}Ga_HJ+`Jydd)%GFF4s59$oX9er$R5b+aYTYCS{;Ig{UlB|A zTN4AuGA(NOjhKIl9?=cm?_~nlsa#L7z^#QsdTVRpWH&bm9R6uuZeq2<%>rMO)}{p# zMmQ3vYcayHs1{MV1w)L)*{B;HZsQJx+XV&Y8fW&{841IPMH^PM=qh*8E|b;G7K}67 zonuOdunL>}E|t4!8X`Z(OB-uds=3GPcjYDTRk?3Cey&Fbb*MbRgRJ zR;fZDbeVXtgT}yMw8X~L#6ntRz7`K_izB+dRSmWwDEp6GmG+X2AGTyuWrkByEzHqc zQh^Ge$Tcv9JEuS}Ha)k?mIw4UJ!%B1ZCPQ@M{vMg=k5@P%}E|Z>@_<*`Ci8*WZ(iZ z!`$Urk=$9*i`qwHS}nDRStQQiLixfTuG~mfZK>}9i&>?$r%-l?iZQVFHD$2wZ-W-mOGzGVmBv4`(v=noS4 zkz@SCAN(xb922?xB1-sGoXv4j#&4pM6QW9F;**pYqS$k06r<(Iw%*}g`6%T~Whd{+ zg4>hy@ID_%vxBbGrBl*e&MrPALnh1QBX&#qv5Z&k_e^1XWM_NjO##l|S@|d1$W#yt z`{ch|k)J%Nx1Yc@vWjfkxL|~IE|w$?sXZlUZD*gw{%(0Nr;W&&bWj=&IgtL8J|w4s YB$yy4@};zV5))F}ze-vAk?FaA0d@nSkpKVy delta 541 zcmYk3$xl;J6vlt|0rvIv8nJ4Kv8h4O*pf(0z({b8EKJ0WgtC3sY63jnM`$bRMt3T$Z8rmW5xrK*g4Jl!g#G;bWwAO%m0hkDYo|xR+=t* zMeqt;0j?^drrVB|Xu7#(ChhgX9*qkFi?-E$zNC|kX= z)y=s3j#Z~Jse|e22H)1lngjHkU7=+q4vPCG7wT8Trb4IHJJYA5j!IBWk!hEc z4IioF6Px)g4>iSJzR=EBj*|UGC*SGe2Lnv=jGv70i`V=iEG^=qRg|)b#ezQT<)*Av z$0iK7u%xn<+uRX$SK>C-44pIVDBa2u`XnL eKIBmzA2TReEZ;W7h_JAvDnb8jkjYQBEd2}LG=f$D diff --git a/bin/application/MainWindowController$3.class b/bin/application/MainWindowController$3.class index 5c96335e143825942280630069afa7eba1094b72..49a7677aa82d556659e51f760c9ae0a12d41fd13 100644 GIT binary patch delta 202 zcmWN|Jxc-s0LS6~PrUP>m-D3;E%dy&ObW6WH40n;hoGUY(a9wUBU+kV3W8gLga$Xq zmVz@ysBhqQd#hi;DfHPN-+gtzzKvMf(j6+i{TS)!eXI2lgvP*(UJud?R0D$55Eq6VituU0LPMeM$*(C;v!Dcjdkx06lx>O?R(uBldGg?SaH4^@T z&D5oWoiL3TZ&A@Rw5P)PbgH_Y&obS6`qyb|$7g?DPCtntAHpKS5P z4&OBRp~;XVemNFSm2)%PI>LjaJR0(3mVpt^j*&Xf&#TduS-0SU i^B%fj%c7;Wi=MgUh09)A^2!x&T(xJ}JF7`Gx9=Yo7cEBs diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class index 4f71d50da6ca1778f58815850c094b5fe4dcd9b5..0ce8dfa51eec276d1ec543dcef6662224a32e548 100644 GIT binary patch delta 23 ecmX@gag<|212dz;6&o3vqZ=oN)~Wr374MtPa%&274xW}&aMWz32|~$6w#!Srs4BAev%5pJ6dOS f;%+1E);%ll_Y&nJNH9d7XrYV&Mr4X5Lgf4aD+wHA delta 253 zcmXAkJ5B>Z5JX?^ERsDqVENdK#EPH6>>B(>#9V?Hu#h130k{Jb5pf1f2q6N5M8*+_ zeE?2iQT9$SRr97*-ThseRs7HV;}aM$ocdp@ds6mm9N>-W&3Jq_nKb)@Fte-p#K^** zWh)+|2-nez^`G3m^}>VOeY_Qn6trEuQhTTIOj5e6l)b4w9f|IBVz8lFj7aR9)GoxJ zUIwtire2ETkfvgfTHAqB6ArhS>sI5XF&Txx+ zKDp=ISMr`TkI&@_V2shhJjK3cDJ?rwzI5zH?PXw#dM#7C)z$3^0>xW5IwEsMX$SLX zl>=Q3hdWDz%wc2!N0xBu75^!C$Wt+o8tUw7kZXvOo1lOujWmsr$MKU?)V;w!p&fUt cxZ4H^FARPvMD)Whdc*|E=wnD`SRzEu7e2WhhyVZp delta 253 zcmXAkO-chn5QV>*9wBM7aQsO|aPTiN&P0ugt^}1_!nGO%UFQJaA-!_t83H2WLIign z!F3Mc34$+9FZ#Xyx_DLfRhd@&_w4-xIOSyGf2{6F*{-pJH>x+o;oWG|?DfOcuHt9SI`Ci-+Fx|fN;&eh_A#4br~ zAO`g^fE8BtQWU#172A?`Sh_S|jXi-yfn3G&e$}G$N&7V-4>PxscZ4DiIQ-Wmy3$xX M9n+VaPi|73Ke!|!&j0`b diff --git a/bin/application/MainWindowController$7.class b/bin/application/MainWindowController$7.class index bc89952066f2d158b4acea98a73b6f7d59f7bb3a..8fadaa721d4d9c209ae2f7fc3503674f6fbdf71e 100644 GIT binary patch delta 1016 zcma)*Yiv|S6vuyO_Og%5wXIh~u(Vx^t!|;V)>>*nVod{rt@VR3K@;WLy)=;0irqGD zBdoz-k)}}@Mde);5MNkYmjx7y52{EN#RopW_}RpdCPw1yE(!FTGs&F)ocW*soH;r3 zN9nd`(di4vP5|}%9zqG_dR-toQoAr<)d>sqU)Ef`H4v-4#bz-}9q!^zA>y^S`#n9^ z-&~*dE_b+_mdm`i3eCB|0;|Dl5biLWn7%)Fjoxg>vpjg2u&AB1)~oK17bDi z!z%P(sCz|LSUbGHmdk{1v*~A>!%J)suITU+_pM&*-`nXW{kY9WUUAsY4k6U%b@uvg ztAxrMTh@4eUQMUh)lt*-$Qr*rp(QeN?k>TKu3g;~W{+Se&8Ti|t&SU&VO|UIYPJk3 z!{yT)UT2?P6kc}S0S<6}U}sv4sx!+<-OW+;!h9_NM?SvW?oF*DMJUTUEnma(TSywR|)H*6u549@6Le)yF;RaUM`f z`c*$W)e}sp^_){1_*bO_^`r#VMwz9al2o1AB#r86X;uT$rZ&ri>KS=RZIMlCNDisz zXAQFW#!zPv`iF_e z3oHpSEHbn5Z(>D7O_W{Bw+MxX5<{5@k*ay)tW0xGmln>6eQ!L9ANVn6&-0V9mg$b4 N`OP5P#EP+I{0E#>4&DF& delta 857 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 literal 24237 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 AwEzGB diff --git a/bin/application/dbController.class b/bin/application/dbController.class index 1e4f6eaa38101709ec0fae5cedb2a357f99b7029..f29611066863485307401aa3bd2f86d4e525cdf9 100644 GIT binary patch literal 11298 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 literal 10852 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 k*^PhSSx9~^qQ&5VR`6 + + + + + @@ -60,9 +65,6 @@ - - - diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java index 4780489..6d2a3cc 100644 --- a/src/application/MainWindowController.java +++ b/src/application/MainWindowController.java @@ -63,6 +63,9 @@ public class MainWindowController { @FXML private JFXButton addBtn; + @FXML + private JFXButton reloadRomsBtn; + @FXML private JFXButton cemuTFBtn; @@ -148,7 +151,7 @@ public class MainWindowController { public void setMain(Main main) { this.main = main; - dbController = new dbController(this); + dbController = new dbController(this); } void initUI(){ @@ -157,6 +160,7 @@ public class MainWindowController { colorPicker.setValue(Color.valueOf(getColor())); fullscreenToggleBtn.setSelected(isFullscreen()); addDLC.setDisable(true); + edit.setDisable(true); applyColor(); } @@ -167,7 +171,6 @@ public class MainWindowController { menuHam.addEventHandler(MouseEvent.MOUSE_PRESSED, (e)->{ if(playTrue){ playBtnSlideOut(); - lastTimePlayedBtnSlideOut(); } if(menuTrue == false){ sideMenuSlideIn(); @@ -201,12 +204,7 @@ public class MainWindowController { alert.initOwner(main.primaryStage); alert.showAndWait(); }else{ - System.out.println("show edit window TODO!"); - double i = 13; - double j = 4; - i = i/j; - System.out.println(Math.ceil(i)); //aufrunden - System.out.println(Math.floor(i)); //abrunden + System.out.println("show edit window TODO!"); //TODO } } }); @@ -226,14 +224,39 @@ public class MainWindowController { } else{ int i = gameCover.indexOf((selectedEvent).getSource()); - gameVBox.remove(i); - gameCover.remove(i); - gameLabel.remove(i); -// dbController.removeRom(selectedGameTitleID); + + Alert alert = new Alert(AlertType.CONFIRMATION); + alert.setTitle("remove"); + alert.setHeaderText("cemu_UI"); + alert.setContentText("Are you sure you want to delete "+selectedGameTitle+" ?"); + alert.initOwner(main.primaryStage); + + Optional result = alert.showAndWait(); + if (result.get() == ButtonType.OK){ + try { + gameVBox.remove(i); + gameCover.remove(i); + gameLabel.remove(i); + dbController.removeRom(selectedGameTitleID); + gamesAnchorPane.getChildren().remove(i); + + //TODO remove if animations are done + Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again (preventing Bugs) + System.exit(0); //finishes itself + + } catch (SQLException | IOException e) { + e.printStackTrace(); + } + } + //TODO nachrück animation // platz(i)/4 -> aufrunden = Reihe; plath(i)-(platz(i)/4 -> abrunden*4) // jetzt haben wir den platz des gelöschten elements und lönnen alle nachfolgenden nachrücken - gamesAnchorPane.getChildren().remove(i); +// double a = 13; +// double b = 4; +// a = a/b; +// System.out.println(Math.ceil(a)); //aufrunden +// System.out.println(Math.floor(a)); //abrunden } } }); @@ -256,7 +279,7 @@ public class MainWindowController { Alert updateAlert = new Alert(AlertType.CONFIRMATION); //new alert with file-chooser updateAlert.setTitle("cemu_UI"); updateAlert.setHeaderText("update "+selectedGameTitle); - updateAlert.setContentText("pleas select the update directory"); + updateAlert.setContentText("pleas select the update root directory"); updateAlert.initOwner(main.primaryStage); Optional result = updateAlert.showAndWait(); @@ -306,7 +329,6 @@ public class MainWindowController { public void handle(MouseEvent event) { if (playTrue) { playBtnSlideOut(); - lastTimePlayedBtnSlideOut(); } } }); @@ -316,7 +338,6 @@ public class MainWindowController { public void handle(MouseEvent event) { if (playTrue) { playBtnSlideOut(); - lastTimePlayedBtnSlideOut(); } } }); @@ -329,28 +350,13 @@ public class MainWindowController { } @FXML - void playBtnAction(ActionEvent event){ - dbController.setLastPlayed(selectedGameTitleID); - try{ - if(fullscreen){ - Runtime.getRuntime().exec(getCemuPath()+"\\Cemu.exe -f -g \""+gameExecutePath+"\""); - }else{ - Runtime.getRuntime().exec(getCemuPath()+"\\Cemu.exe -g \""+gameExecutePath+"\""); - } - } catch (IOException e) { - //Auto-generated catch block - e.printStackTrace(); - } - } - - @FXML - void timePlayedBtnAction(ActionEvent event){ - - } - - @FXML - void lastTimePlayedBtnAction(ActionEvent event){ - + void aboutBtnAction(){ + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle("about"); + alert.setHeaderText("cemu_UI"); + alert.setContentText("cemu_UI by @Seil0 \npre release 0.1.1 \nwww.kellerkinder.xyz"); + alert.initOwner(main.primaryStage); + alert.showAndWait(); } @FXML @@ -367,13 +373,57 @@ public class MainWindowController { } @FXML - void aboutBtnAction(){ - Alert alert = new Alert(AlertType.INFORMATION); - alert.setTitle("about"); - alert.setHeaderText("cemu_UI"); - alert.setContentText("cemu_UI by @Seil0 \npre release 0.1.0 \nwww.kellerkinder.xyz"); - alert.initOwner(main.primaryStage); - alert.showAndWait(); + void reloadRomsBtnAction() throws IOException{ + dbController.loadRomDirectory(getRomPath()); + Runtime.getRuntime().exec("java -jar cemu_UI.jar"); //start again (preventing Bugs) + System.exit(0); //finishes itself + } + + @FXML + void playBtnAction(ActionEvent event) throws InterruptedException, IOException{ + dbController.setLastPlayed(selectedGameTitleID); + long startTime; + long endTime; + int playedTime; + int timePlayed; + Process p; + + main.primaryStage.setIconified(true); + startTime = System.currentTimeMillis(); + try{ + + if(fullscreen){ + p = Runtime.getRuntime().exec(getCemuPath()+"\\Cemu.exe -f -g \""+gameExecutePath+"\""); + }else{ + p = Runtime.getRuntime().exec(getCemuPath()+"\\Cemu.exe -g \""+gameExecutePath+"\""); + } + + p.waitFor(); + endTime = System.currentTimeMillis(); + playedTime = (int) Math.floor(((endTime - startTime)/1000/60)); + System.out.println((endTime - startTime)/1000+"; "+(endTime - startTime)/1000/60+"; "+playedTime); + + + timePlayed = Integer.parseInt(dbController.getTimePlayed(selectedGameTitleID))+playedTime; + System.out.println(timePlayed); + + dbController.setTimePlayed(Integer.toString(timePlayed), selectedGameTitleID); + timePlayedBtn.setText(dbController.getTimePlayed(selectedGameTitleID)+ " min"); + main.primaryStage.setIconified(false); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + @FXML + void timePlayedBtnAction(ActionEvent event){ + + } + + @FXML + void lastTimePlayedBtnAction(ActionEvent event){ + } @FXML @@ -483,7 +533,7 @@ public class MainWindowController { Alert romAlert = new Alert(AlertType.CONFIRMATION); //new alert with file-chooser romAlert.setTitle("cemu_UI"); romAlert.setHeaderText("add new Game"); - romAlert.setContentText("pleas select the .rpx file from the Game you whish to add"); + romAlert.setContentText("Please select the .rpx file from the game you want to add."); romAlert.initOwner(main.primaryStage); Optional result = romAlert.showAndWait(); @@ -500,7 +550,7 @@ public class MainWindowController { Alert coverAlert = new Alert(AlertType.CONFIRMATION); //new alert with file-chooser coverAlert.setTitle("cemu_UI"); coverAlert.setHeaderText("add new Game"); - coverAlert.setContentText("pleas select the cover for the Game you whish to add"); + coverAlert.setContentText("Please select the cover for the game you want to add."); coverAlert.initOwner(main.primaryStage); Optional coverResult = coverAlert.showAndWait(); @@ -585,6 +635,7 @@ public class MainWindowController { if(dbController.getLastPlayed(titleID).equals("") || dbController.getLastPlayed(titleID).equals(null)){ lastTimePlayedBtn.setText("Last played, never"); + timePlayedBtn.setText(dbController.getTimePlayed(titleID)+ " min"); }else{ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -598,11 +649,12 @@ public class MainWindowController { }else{ lastTimePlayedBtn.setText("Last played, "+dbController.getLastPlayed(titleID)); } + + timePlayedBtn.setText(dbController.getTimePlayed(titleID)+ " min"); } if(playTrue == false){ - playBtnSlideIn(); //TODO anderes design(mehr details spielzeit, etc.) - lastTimePlayedBtnSlideIn(); + playBtnSlideIn(); } } }); @@ -639,12 +691,13 @@ public class MainWindowController { cemuTextField.setFocusColor(Color.valueOf(getColor())); romTextField.setFocusColor(Color.valueOf(getColor())); + aboutBtn.setStyle("-fx-text-fill: BLACK;"); settingsBtn.setStyle("-fx-text-fill: BLACK;"); addBtn.setStyle("-fx-text-fill: BLACK;"); + reloadRomsBtn.setStyle("-fx-text-fill: BLACK;"); playBtn.setStyle("-fx-text-fill: BLACK;"); cemuTFBtn.setStyle(btnStyleBlack); romTFBtn.setStyle(btnStyleBlack); - aboutBtn.setStyle(btnStyleBlack); playBtn.setStyle(btnStyleBlack); lastTimePlayedBtn.setStyle(timeBtnStyle); @@ -734,51 +787,42 @@ public class MainWindowController { private void playBtnSlideIn(){ playBtn.setVisible(true); + lastTimePlayedBtn.setVisible(true); + timePlayedBtn.setVisible(true); playTrue = true; - TranslateTransition translateTransition = new TranslateTransition(Duration.millis(300), playBtn); - translateTransition.setFromY(55); - translateTransition.setToY(0); - translateTransition.play(); + + TranslateTransition playBtnTransition = new TranslateTransition(Duration.millis(300), playBtn); + playBtnTransition.setFromY(55); + playBtnTransition.setToY(0); + playBtnTransition.play(); + + TranslateTransition lastTimePlayedBtnTransition = new TranslateTransition(Duration.millis(300), lastTimePlayedBtn); + lastTimePlayedBtnTransition.setFromY(55); + lastTimePlayedBtnTransition.setToY(0); + lastTimePlayedBtnTransition.play(); + + TranslateTransition timePlayedBtnTransition = new TranslateTransition(Duration.millis(300), timePlayedBtn); + timePlayedBtnTransition.setFromY(55); + timePlayedBtnTransition.setToY(0); + timePlayedBtnTransition.play(); } private void playBtnSlideOut(){ playTrue = false; - TranslateTransition translateTransition = new TranslateTransition(Duration.millis(300), playBtn); - translateTransition.setFromY(0); - translateTransition.setToY(56); - translateTransition.play(); - } - - @SuppressWarnings("unused") - private void timePlayedBtnSlideIn(){ - timePlayedBtn.setVisible(true); - TranslateTransition translateTransition = new TranslateTransition(Duration.millis(300), timePlayedBtn); - translateTransition.setFromY(55); - translateTransition.setToY(0); - translateTransition.play(); - } - - @SuppressWarnings("unused") - private void timePlayedBtnSlideOut(){ - TranslateTransition translateTransition = new TranslateTransition(Duration.millis(300), timePlayedBtn); - translateTransition.setFromY(0); - translateTransition.setToY(56); - translateTransition.play(); - } - - private void lastTimePlayedBtnSlideIn(){ - lastTimePlayedBtn.setVisible(true); - TranslateTransition translateTransition = new TranslateTransition(Duration.millis(300), lastTimePlayedBtn); - translateTransition.setFromY(55); - translateTransition.setToY(0); - translateTransition.play(); - } - - private void lastTimePlayedBtnSlideOut(){ - TranslateTransition translateTransition = new TranslateTransition(Duration.millis(300), lastTimePlayedBtn); - translateTransition.setFromY(0); - translateTransition.setToY(56); - translateTransition.play(); + TranslateTransition playBtnTransition = new TranslateTransition(Duration.millis(300), playBtn); + playBtnTransition.setFromY(0); + playBtnTransition.setToY(56); + playBtnTransition.play(); + + TranslateTransition lastTimePlayedBtnTransition = new TranslateTransition(Duration.millis(300), lastTimePlayedBtn); + lastTimePlayedBtnTransition.setFromY(0); + lastTimePlayedBtnTransition.setToY(56); + lastTimePlayedBtnTransition.play(); + + TranslateTransition timePlayedBtnTransition = new TranslateTransition(Duration.millis(300), timePlayedBtn); + timePlayedBtnTransition.setFromY(0); + timePlayedBtnTransition.setToY(56); + timePlayedBtnTransition.play(); } private void editColor(String input){ diff --git a/src/application/dbController.java b/src/application/dbController.java index 6241dcd..996c6c8 100644 --- a/src/application/dbController.java +++ b/src/application/dbController.java @@ -10,6 +10,7 @@ import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; @@ -28,6 +29,7 @@ public class dbController { } private MainWindowController mainWindowController; + private ArrayList entries = new ArrayList<>(); private String DB_PATH; private String DB_PATH_games; private Connection connection = null; @@ -38,7 +40,6 @@ public class dbController { loadRomDatabase(); loadGamesDatabase(); createRomDatabase(); - loadRomDirectory(mainWindowController.getRomPath()); loadRoms(); checkRemoveEntry(); System.out.println("<==========finished loading sql==========>"); @@ -82,6 +83,7 @@ public class dbController { System.out.println("games database loaded successfull"); } + //creating database, if db has 0 entries search for all .rpx files in the roms directory and add them void createRomDatabase() { try { Statement stmt = connection.createStatement(); @@ -91,6 +93,22 @@ public class dbController { } catch (SQLException e1) { e1.printStackTrace(); } + + 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 ea){ + System.err.println("Ups! an error occured!"); + ea.printStackTrace(); + } + if(entries.size() == 0){ + loadRomDirectory(mainWindowController.getRomPath()); + } } void addRom(String title, String coverPath, String romPath, String titleID, String productCode, String region, String lastPlayed, String timePlayed) throws SQLException{ @@ -181,7 +199,7 @@ public class dbController { ImageIO.write(resizeImagePNG, "png", new File(pictureCache+"\\"+rs.getString(3)+".png")); //change path where you want it saved coverPath = pictureCache+"\\"+rs.getString(3)+".png"; - addRom(rs.getString(2), coverPath, file.getCanonicalPath(), rs.getString(1), rs.getString(3), rs.getString(5),"",""); + addRom(rs.getString(2), coverPath, file.getCanonicalPath(), rs.getString(1), rs.getString(3), rs.getString(5),"","0"); } } System.out.println(""); @@ -244,7 +262,7 @@ public class dbController { void setTimePlayed(String timePlayed, String titleID){ try{ Statement stmt = connection.createStatement(); - stmt.executeUpdate("UPDATE local_roms SET timePlayed='' WHERE titleID = '"+titleID+"';"); + stmt.executeUpdate("UPDATE local_roms SET timePlayed='"+timePlayed+"' WHERE titleID = '"+titleID+"';"); connection.commit(); stmt.close(); }catch(SQLException e){ @@ -257,7 +275,7 @@ public class dbController { try{ Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT timePlayed FROM local_roms WHERE titleID = '"+titleID+"';" ); - timePlayed = rs.getString(4); + timePlayed = rs.getString(1); stmt.close(); rs.close(); }catch(SQLException e){ @@ -265,5 +283,6 @@ public class dbController { } return timePlayed; } + }