From 9ab7b61cd9a0e061b6b02ff6d54525ffc66321be Mon Sep 17 00:00:00 2001 From: Seil0 Date: Thu, 25 May 2017 19:07:16 +0200 Subject: [PATCH] code clean up and minor fixes *better save twice than non *fixed a bug that prevented cemu_UI from finding the savegames folder in google drive --- bin/.gitignore | 3 + bin/application/CloudController$1.class | Bin 2024 -> 2024 bytes bin/application/CloudController$2.class | Bin 2506 -> 2643 bytes bin/application/CloudController$3.class | Bin 1320 -> 1415 bytes bin/application/CloudController.class | Bin 3092 -> 3302 bytes bin/application/MainWindow.fxml | 16 +++-- bin/application/MainWindowController$1.class | Bin 2199 -> 2199 bytes bin/application/MainWindowController$2.class | Bin 4185 -> 4185 bytes bin/application/MainWindowController$3.class | Bin 4201 -> 4201 bytes bin/application/MainWindowController$4.class | Bin 4209 -> 4209 bytes bin/application/MainWindowController$5.class | Bin 1097 -> 1097 bytes bin/application/MainWindowController$6.class | Bin 1097 -> 1097 bytes bin/application/MainWindowController$7.class | Bin 4835 -> 4905 bytes bin/application/MainWindowController.class | Bin 28540 -> 29334 bytes bin/application/dbController.class | Bin 11748 -> 11751 bytes .../GoogleDriveController.class | Bin 13867 -> 14474 bytes src/application/CloudController.java | 32 +++++----- src/application/MainWindow.fxml | 16 +++-- src/application/MainWindowController.java | 58 +++++++++++++++--- src/application/dbController.java | 4 +- .../GoogleDriveController.java | 21 ++++++- .../icons/ic_get_app_black_24dp_1x.png | Bin 0 -> 114 bytes .../icons/ic_get_app_white_24dp_1x.png | Bin 0 -> 116 bytes 23 files changed, 110 insertions(+), 40 deletions(-) create mode 100644 bin/.gitignore create mode 100644 src/recources/icons/ic_get_app_black_24dp_1x.png create mode 100644 src/recources/icons/ic_get_app_white_24dp_1x.png diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..f10021f --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,3 @@ +/application/ +/recources/ +/cloudControllerInstances/ diff --git a/bin/application/CloudController$1.class b/bin/application/CloudController$1.class index 6f2d01dc7f2ee03ca007a23fc6b81f8bc90aebbc..6961e59c8f51256dc7a74148e675dfa912404e85 100644 GIT binary patch delta 51 zcmaFC|AK!*9~-0j$3AK?4_ zh+a4D+_`asAq~OAl`D)Z|A7C%e_%XQNOWP$By-RC&N<)x&N+9-|NVe>=hyaU0L^&G zVPmKg!%}#o@r$j)n^jhnsHW)YXxuDh^t6l?v@$r=rDa7k7y|VJe^Q2$Sv6(09v}DM zG}<}Z7{V5nL&h1zgx5ap?nF077ehp}*&|ajdeFom8LN8AgI@G=^fCC$jG0`tZ>YPN zQuAger^`5pAVWo-M3`|?Ni8G_N=kKMkb!p){>86B8B;vsW7CAJAYEk2;u9Bf!opD1o6Kc_9aB0e7a#lHd!i6RA z#?j7uu)t@;;YU5+8J=J;yTAQ5q8$uZ{VircK&EBdJ*(cU$2bHl1Fb-=jfHZHft6H?k6xt1&mJr->PPP^Ce_A2)31_c*?A!@X^YTxC1RTw*Qys z|4}|igG1EfGC5-;3AEfx{Eid-B^fdMR~tq7um=s!3= z!9*YQ1w$G_B2PZ?YT~p04in?Sq=6|Lwulj zJ(oQz2xKkDKa@r_a~IZIc1+s2+D`L_4^O+^!IEnAwtLfL3|7>R_q@JJR((rh~LBouv)2VFtvX#rFat7NP=hUDPQD40$yaqcOl}>8Y1idY+q)+iB1-X3asqdhJY$0tH({8K9Rg7nY@4{gD!W_ zMMACm%Uk;Q7%VUrnkq1}D*%@>FW^Xw5@O7eG=&b~V@cu87P*^$xT*heQ^KA5mn&xG rohb|0a=K|@k!6XBrgL)JJWp76q79z$oEOpyNv}A+_-*l$S44jSG4+Ma diff --git a/bin/application/CloudController$3.class b/bin/application/CloudController$3.class index bd2f32e1756fc6412425f4434a121ddaa7732dcf..2132321368a2ffa8a6837abd4c8d0687ead3827f 100644 GIT binary patch delta 391 zcmYL_%S!@L6vn?hGc`6!iIrtUg*_+>?V-K2#vWFd=E5LoBjYrPCOYX@R#3F+4;T>I zw5_cXL$qie{ZY}u7TpW?JD1%4Wbo*tm?4Pt)?mXWkt<@?n7|EuxTQ_qqo1hzuOU1bpvedeh+&7K fb_t5$G!e2ud3*Hb5XU~LKx;Zck}8RejFiqV4Ao6b delta 307 zcmXAh%Su9F6otR@pHs(7$_!4~O;DlG(n_=JelrM!1~re9Ij}&@tZd{cnifCw2-PIQ z2#E$gKrhjoL>t;0_F9Xz_PXtU_WHknKfi!9J2uK-RNt%NRy?Zoof*WJSD zLCq}`^{aVoX4uw_^Ai_1{G#M1f`R^wvNyM>OVO3hzMA>oFkxkZ;u65Ch S4K@WWrr07U%qvMlQ05PR-8Jg~ diff --git a/bin/application/CloudController.class b/bin/application/CloudController.class index 25752d1713bc74dc281bb31963db5f3d398ea15d..ffeaede7457ee47d3225d4c31a3dbeddb6133023 100644 GIT binary patch delta 1532 zcmZux+jA3T6#sqM+}LbG8f()~JH$$rCh3K?T%;9>Ermh@mPSg@TDIw$rmRWW-9}Jk z0g#>5LtD^TqK$@ZA?5ebjM0-|lv8XWX64_wCv9o!{l0%@=LIC&gd> z`SB@$A$+BIvDP2+NQCXyoRxcNoR9R0Qt5!>@k{Z{_bw$K>?2`~cTEqby4B=&lXY6X$ zSH9T9Frp0GYlLdd7;^DqUXzPT7_Tsd#a@Vnp!T(M!8z)%gN=6gtM5neiaS{ z3wR@h^H$8?m3fmFkaW4O%qWII-smB`wZ*dh5>;Oe;evI+-`O;e1qs_wBxiO{eHLp! zGTePu#2geJeVZY%*~&93m5RKeDsIk_gffQ<=!UErA{Z`8P^~}w-K<8%cSZ(8RH5-o zx^*~kmA%WOu|W}aT;b987)EVWYd(;)b_OM(jwP!%I32yg0N#lYC0xTT>tV37m3+|^ z*Okd}{_?Jb+dupkoMYzC@WD@$GWI<>;x9DNm5FB>==lciJTORs^b^Fh4eWi4@Tr~# z_GjWFc0z6yQupDTB&H7m;fn+DcX!qdb^8uU39;QZn_6xrg0Ei zyow$q>;pCzv{5R*#^}u$mF2r}`uXUnA4f4k0LLgAhCux|;E&P%IG&@-2<`r)8RT^e z8(L0sij%IE22Os93|G~_X_MBLCpgoy zV-i!I)O~0o#C~ec9(pr~cKY@@v6r;%#|WtyCH7pyByrCX_i3EKIpj=R_7D*!x}NNU zC%fRv9w9;RphB{9TMQ5({DraO+yknhdKQ!rvMoqBs;UK&v4%?hOK$6FLblxhNb z#OZV^Dpr%2FgHw3xae`>=b!@yR$QC&6y;~5>!>^RFE{YMSK6(t(+u1sb8gv6Q_cxb zY1C61#Z`Pjq!_N5FkOf%6yOjY@$0#bW=5RW-J}2?#M$h3l;F%;tL@_*db$e<_t1g| z)QCr$kUKo&4i{O#4t!*fmNQW7ZqS$XBfJ7Jr7}RkzfNBiZKJ@Fjcf#v}`xpg5#LfaYCTg zT3M--3YN;9p0P?SFol!S@*i!PK}N@{K$l$ecf}2yQdx|ewOY&-ZM(FzP}6Z*{_Wo( z&d6-AGjbq|9L^bN!Fkyk=m}+!SDQIG9oW;6#RUTwRfa&#wyJg*0-qR|m$w3a;qVO5ggabxFG)wX3ft9pb)<>P{noGt#_w% z+#r^(X2D%bLL<&CuqSK%G_68>U-SN6ZiDQn|j7$ zl!H)uU){QfO$!myUUqW$Gb_|Inu6 zE7n}|`gf^WIhs diff --git a/bin/application/MainWindow.fxml b/bin/application/MainWindow.fxml index e167774..ca3010e 100644 --- a/bin/application/MainWindow.fxml +++ b/bin/application/MainWindow.fxml @@ -30,22 +30,27 @@ - + - + - + - + + + + + + @@ -53,7 +58,7 @@ - + + diff --git a/bin/application/MainWindowController$1.class b/bin/application/MainWindowController$1.class index f75d55392638253d06bb041c9897b76eb43a698e..b184e96c36020c68f404a09f144352f852b189ca 100644 GIT binary patch delta 63 zcmV-F0Kos35tk9L5(fe5lM@HJE$sjt0PX-L0Pg@U0Pp}g0Pz4n0P+Au0P_H30Q3NI V0QCTO0QLZS0QUfb0Qr;p2c3nB6`ueA delta 63 zcmV-F0Kos35tk9L5(fd_lM@HJE#d$i0OJ5A0OSBJ0ObHV0OkNc0OtTj0O$Z@0OL~Z)ZV*=v^@rt(6L9H;gCZsK49f{~nR2O2p xV(Cs?Z!Cf&$dRN)iXIsTWEuWvM4kx+rWDyw;y{_({~iIVJgM=be(Fa8`~Vby90&ja delta 158 zcmWN_KMMf?0LJ0>hp0OtCi@gd~Jd>-kx~ZhQ%5qiHLv=mX&`UkNHPlBVeKkg!f@XNMz$*)%Hu$wA xpdE$|m~t^N36UpEl?Y9uw29FnPL~9Ik_<>OC(W7+`~MvcvYg0qrf9dq20!dIBXa-% diff --git a/bin/application/MainWindowController$3.class b/bin/application/MainWindowController$3.class index 64ba66abeb8683d9460c8ebb8c94a5162f41e88a..67adbb627636544157270b554270678033c7edf2 100644 GIT binary patch delta 178 zcmWN^J&OSV0LS6~Z;?Ur31l$4lD9jrC$ACb2Jh}D3Z<+!SxzadGT3gs#TC&FzJbkd zm2cpd!}8Q~ww-N1T@w$hp6QQ~Q$}2}sP@EkAg&_`ok;3JO8=xWkikNhIJvudN)&kKl@3J)_kB?2lL}KSRp!+AqRuxB Rmb|g1$(9zsv{zSipBr^nC(Zx> delta 178 zcmWN_yGnuq0EXf3UBclLf*X=pNRcDM6InXsd7(g;68-=Apv)%~##X9KsWGR{ T7Y!CP`KHB&Hd~%o7xNoe+&Lx- diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class index e961a9acca52fd17532381242cc6be50c2fc4c45..66a3642e983ae45e4ea1fdfadf9c0be9ea676cf6 100644 GIT binary patch delta 178 zcmV~$xsE{r0EW^3Yfwmdf{8+{^Z+_4`Y9!nYaRO%E<(mq*vX7hD@lk%f+x`Fr&a4z z;+%);;o3&+M0PRz3)7H|xZEVA58dT%97-upFGR~fSkhuc@d;th~ diff --git a/bin/application/MainWindowController$6.class b/bin/application/MainWindowController$6.class index fbc393337295649968c542fe1fd7baf06feb1673..134c71e609a7135af1788e7b49c733fa192a062b 100644 GIT binary patch delta 27 jcmX@fagt+09y8<0$@$EloNE}k7}qigGOnL|khuc@f0+o$ delta 27 jcmX@fagt+09y8;-$@$EloC_Ja7#A@JGA@~Xkhuc@eV+)O diff --git a/bin/application/MainWindowController$7.class b/bin/application/MainWindowController$7.class index aba45622a6431d2fc5044e9d138f606d38c10ebd..08b069944818e8a56d6193f5f27dbd2bc8f929af 100644 GIT binary patch delta 468 zcmYk1J4;+q6ouDX_m0k7uMf0~F9>SlDB@!Rf-oQiD+_;sLl6mwc99?!LBT39Rc>XY zV5gN5kzgUVP8kRpQ$$fiqDGC6F*-hyeUrv>;OuX&{WyE?)Xvp;>ARIx00~AHy*|Iu zLlOr*e&QPu>+A1-K0I90+8nA!K8~?>Pi+Z?{B_<1PYS19Mwl0TF3j*_uuxPTOCy3P zpvm`{qEU^-mr(Kn`&01#)8V51=%C!*cc`(vPpDM}ac$tKzM$LqnZ9CBn|P@$jB6Wj zwS#%>BCYSp>IbPkHfWzsI$%PF?9vfaI_8K@_)4dItuqEX=Zvx(o7Dx^b;(U#F{hl$ zbgd5ED5+ZwIMfSA8g*PvI1#;ZqNuRJdJzj3Kqaco3+We5Ks-V_PH_e?!355cHR|F+ zT$tuC#RB{`ayeqzmqroh9-tFfhIuN(W8{qTacw=@;0HaWEmb9*sK$-;E;g|qvJ1rG j4QuFG#%(ZNT2cQe9DyMJSx#;!QJ>mp#h<{i zxc6ktICOg*!>}P4VB3f_EyQp{|5%WrcNcQhoL=g`7=bZ`OP zT*MHgSmH9?xFW(;@o`Oxxh{TgNEJ6F$SrB*wzP9cI=L$b_oScuGQb0g@=#8ABrzV- z6XpradCCCK*vJbu^O7N6AyXTwg~RL!4BNA)Zc zloUKES*2C=S;;0bRNzI)P7ez3s+5E`Em;alF?!NV8YMwYYSvU;|J$5nw*UYD diff --git a/bin/application/MainWindowController.class b/bin/application/MainWindowController.class index 95824982ce8f6277a8a9afa1542fdb763953d6cc..a53dc71acfc6403948c063f263c8c304bc6a188a 100644 GIT binary patch literal 29334 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 literal 28540 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 delta 4351 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 IDC0u#|Cx1c1poj5 diff --git a/src/application/CloudController.java b/src/application/CloudController.java index fd84b71..82cd22b 100644 --- a/src/application/CloudController.java +++ b/src/application/CloudController.java @@ -30,21 +30,22 @@ public class CloudController { void initializeConnection(String cloudService, String cemuDirectory) { System.out.println("sartting cloud initialisation... "); - if(cloudService == "GoogleDrive") { + if(cloudService.equals("GoogleDrive")) { + System.out.println("selected service is Google Drive"); try { googleDriveController.main(cemuDirectory); } catch (IOException e) { e.printStackTrace(); } } - if(cloudService == "Dropbox") { - + if(cloudService.equals("Dropbox")) { + System.out.println("selected service is Dropbox"); } System.out.println("cloud initialisation done!"); } void stratupCheck(String cloudService, String cemuDirectory) { - if(cloudService == "GoogleDrive") { + if(cloudService.equals("GoogleDrive")) { System.out.println("starting startup check google drive..."); try { if (!googleDriveController.checkFolder()) { @@ -70,7 +71,7 @@ public class CloudController { e.printStackTrace(); } } - if(cloudService == "Dropbox") { + if(cloudService.equals("Dropbox")) { } } @@ -87,19 +88,20 @@ public class CloudController { }); System.out.println("starting sync in new thread..."); - if(cloudService == "GoogleDrive") { + if(cloudService.equals("GoogleDrive")) { try { googleDriveController.sync(cemuDirectory); } catch (IOException e) { e.printStackTrace(); } } - if(cloudService == "Dropbox") { + if(cloudService.equals("Dropbox")) { } Platform.runLater(() -> { main.mainWindowController.getPlayBtn().setText("play"); }); + main.mainWindowController.saveSettings(); System.out.println("sync finished!"); } }); @@ -114,14 +116,14 @@ public class CloudController { public void run() { System.out.println("starting uploadFile in new thread..."); - if(cloudService == "GoogleDrive") { + if(cloudService.equals("GoogleDrive")) { try { googleDriveController.uploadFile(file); } catch (IOException e) { e.printStackTrace(); } } - if(cloudService == "Dropbox") { + if(cloudService.equals("Dropbox")) { } } @@ -129,26 +131,22 @@ public class CloudController { } -// void download(String cloudService) { -// -// } - public String getFolderID(String cloudService) { String folderID = ""; - if(cloudService == "GoogleDrive") { + if(cloudService.equals("GoogleDrive")) { folderID = googleDriveController.getFolderID(); } - if(cloudService == "Dropbox") { + if(cloudService.equals("Dropbox")) { } return folderID; } public void setFolderID(String folderID, String cloudService) { - if(cloudService == "GoogleDrive") { + if(cloudService.equals("GoogleDrive")) { googleDriveController.setFolderID(folderID); } - if(cloudService == "Dropbox") { + if(cloudService.equals("Dropbox")) { } } diff --git a/src/application/MainWindow.fxml b/src/application/MainWindow.fxml index e167774..ca3010e 100644 --- a/src/application/MainWindow.fxml +++ b/src/application/MainWindow.fxml @@ -30,22 +30,27 @@ - + - + - + - + + + + + + @@ -53,7 +58,7 @@ - + + diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java index 04b59e2..910e5d3 100644 --- a/src/application/MainWindowController.java +++ b/src/application/MainWindowController.java @@ -27,6 +27,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Optional; import java.util.Properties; + import javax.imageio.ImageIO; import org.apache.commons.io.FileUtils; @@ -37,6 +38,7 @@ import com.jfoenix.controls.JFXHamburger; import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXToggleButton; import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition; + import javafx.animation.FadeTransition; import javafx.animation.ParallelTransition; import javafx.animation.TranslateTransition; @@ -82,6 +84,9 @@ public class MainWindowController { @FXML private JFXButton reloadRomsBtn; + @FXML + private JFXButton smmdbBtn; + @FXML private JFXButton cemuTFBtn; @@ -118,6 +123,9 @@ public class MainWindowController { @FXML private AnchorPane settingsAnchorPane; + @FXML + private AnchorPane smmdbAnchorPane; + @FXML private AnchorPane gamesAnchorPane; @@ -138,7 +146,7 @@ public class MainWindowController { private boolean playTrue = false; private boolean fullscreen; private boolean cloudSync; - private String cloudService = "GoogleDrive"; //set cloud provider (at the moment only GoogleDrive, Dropbox is planed) + private String cloudService; //set cloud provider (at the moment only GoogleDrive, Dropbox is planed) private String cemuPath; private String romPath; private String gameExecutePath; @@ -146,7 +154,7 @@ public class MainWindowController { private String selectedGameTitle; private String color; private String version = "0.1.5"; - private String buildNumber = "015"; + private String buildNumber = "017"; private String versionName = "Gusty Garden"; private int xPos = -200; private int yPos = 17; @@ -173,10 +181,12 @@ public class MainWindowController { private ImageView info_black = new ImageView(new Image("recources/icons/ic_info_black_24dp_1x.png")); private ImageView settings_black = new ImageView(new Image("recources/icons/ic_settings_black_24dp_1x.png")); private ImageView cached_black = new ImageView(new Image("recources/icons/ic_cached_black_24dp_1x.png")); + private ImageView smmdb_black = new ImageView(new Image("recources/icons/ic_get_app_black_24dp_1x.png")); private ImageView add_circle_white = new ImageView(new Image("recources/icons/ic_add_circle_white_24dp_1x.png")); private ImageView info_white = new ImageView(new Image("recources/icons/ic_info_white_24dp_1x.png")); private ImageView settings_white = new ImageView(new Image("recources/icons/ic_settings_white_24dp_1x.png")); private ImageView cached_white = new ImageView(new Image("recources/icons/ic_cached_white_24dp_1x.png")); + private ImageView smmdb_white = new ImageView(new Image("recources/icons/ic_get_app_white_24dp_1x.png")); public void setMain(Main main) { this.main = main; @@ -190,6 +200,7 @@ public class MainWindowController { fullscreenToggleBtn.setSelected(isFullscreen()); cloudSyncToggleBtn.setSelected(isCloudSync()); edit.setDisable(true); + smmdbBtn.setDisable(true); applyColor(); } @@ -457,6 +468,11 @@ public class MainWindowController { System.exit(0); //finishes itself } + @FXML + void smmdbBtnAction() { + System.out.println("yeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); + } + @FXML void playBtnAction(ActionEvent event) throws InterruptedException, IOException{ dbController.setLastPlayed(selectedGameTitleID); @@ -516,13 +532,13 @@ public class MainWindowController { @FXML void cemuTextFieldAction(ActionEvent event){ setCemuPath(cemuTextField.getText()); - saveSettings();//TODO remove (only save on exit settings) + saveSettings(); } @FXML void romTextFieldAction(ActionEvent event){ setRomPath(romTextField.getText()); - saveSettings();//TODO remove (only save on exit settings) + saveSettings(); } @FXML @@ -532,7 +548,7 @@ public class MainWindowController { }else{ fullscreen = true; } - saveSettings();//TODO remove (only save on exit settings) + saveSettings(); } @FXML @@ -548,6 +564,8 @@ public class MainWindowController { Optional coverResult = cloudWarningAlert.showAndWait(); if (coverResult.get() == ButtonType.OK){ cloudSync = true; + //TODO rework for other cloud services + cloudService = "GoogleDrive"; main.cloudController.initializeConnection(getCloudService(), getCemuPath()); main.cloudController.sync(getCloudService(), getCemuPath()); } else { @@ -555,7 +573,7 @@ public class MainWindowController { } } - saveSettings();//TODO remove (only save on exit settings) + saveSettings(); } @FXML @@ -666,11 +684,19 @@ public class MainWindowController { dbController.loadSingleRom(titleID); } catch (SQLException e) { // Auto-generated catch block + System.out.println("Oops, something went wrong! Error during adding a game."); e.printStackTrace(); } } } + /** + * add game to the program and initialize all needed actions (start, time stamps, titleID) + * @param title : game title + * @param coverPath : path to cover (cache) + * @param romPath : path to rom file (.rpx) + * @param titleID : rom ID + */ void addGame(String title, String coverPath, String romPath, String titleID){ ImageView imageView = new ImageView(); Label gameTitleLabel = new Label(title); @@ -698,6 +724,7 @@ public class MainWindowController { public void handle(MouseEvent event) { System.out.println("selected: "+title+"; ID: "+titleID); + //getting the selected game index by comparing event.getSource() with games.get(i).getButton() for(int i=0; i"); } @@ -141,7 +141,7 @@ public class dbController { } //load all rom's on startup to the UI - void loadRoms(){ + void loadAllRoms(){ System.out.println("loading all rom's on startup to mwc ..."); try { Statement stmt = connection.createStatement(); diff --git a/src/cloudControllerInstances/GoogleDriveController.java b/src/cloudControllerInstances/GoogleDriveController.java index 81dc622..6c7e30d 100644 --- a/src/cloudControllerInstances/GoogleDriveController.java +++ b/src/cloudControllerInstances/GoogleDriveController.java @@ -110,6 +110,10 @@ public class GoogleDriveController { } public void sync(String cemuDirectory) throws IOException { + //in case there is no folderID saved, look it up first + if (getFolderID() == "" || getFolderID() == null) { + getSavegamesFolderID(); + } getLocalSavegames(); getCloudSavegames(); @@ -205,7 +209,21 @@ public class GoogleDriveController { cloudSavegamesName.add(file.getName()); cloudSavegames.add(file); } - } + } + + private void getSavegamesFolderID() throws IOException { + Files.List request = service.files().list().setQ("mimeType = 'application/vnd.google-apps.folder' and name = 'cemu_savegames'"); + FileList files = request.execute(); + + try { + System.out.println("FolderID: " + files.getFiles().get(0).getId()); + setFolderID(files.getFiles().get(0).getId()); + } catch (Exception e) { + System.out.println("Oops, something went wrong! It seems that you have more than one folder called 'cemu_savegames'!"); + e.printStackTrace(); + } + } + //upload a file to the cloud from the local savegames folder public void uploadFile(java.io.File uploadFile) throws IOException{ @@ -261,6 +279,7 @@ public class GoogleDriveController { System.out.println("finished uploading all files!"); } catch (IOException e) { //Auto-generated catch block + System.out.println("Oops, there went something wrong! Error during uploading all files."); e.printStackTrace(); } } diff --git a/src/recources/icons/ic_get_app_black_24dp_1x.png b/src/recources/icons/ic_get_app_black_24dp_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c845e8494bcc13406458c6ed3b1f9fd8618a1d GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1OHUWakP60R38@G6Onq4g7bP0l+XkK5V;_b literal 0 HcmV?d00001 diff --git a/src/recources/icons/ic_get_app_white_24dp_1x.png b/src/recources/icons/ic_get_app_white_24dp_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..d400472fd64b0a90998ce6c5eab813b7c8eeec12 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1Yfl%)5R22v2@+fn?1dz*HZ0um z&|dF?!>nm+mvS-{o;0&fnzA@EQ^BmzWWo}eRZ9~msAiWq$nrXiF)+AFy^vQr>(2u; OhQZU-&t;ucLK6V({vp)> literal 0 HcmV?d00001