22 Commits
085 ... master

Author SHA1 Message Date
Jannik 5728ea4f4d „README.md“ ändern 9 months ago
Jannik 13dd0a0150 Merge branch 'develop' of Seil0/cemu_UI into master 2 years ago
Jannik f584eef9b7
update to 0.3.0 2 years ago
Jannik a6b1ce7f72
some new css styling 2 years ago
Jannik 0fecb8bb16
more lambda code 2 years ago
Jannik 2689b03c16
minor clean up 2 years ago
Jannik bc36630ef2
removed unneeded methode 2 years ago
Jannik 07ded89069
Major code clean up 2 years ago
Jannik a4c8eb2efe
the license dialog is now a alert & reduced main usage in mwc 2 years ago
Jannik 7d376535ae
nicer dialog on first startup 2 years ago
Jannik 3f69169a6a
new constructor for UIROMDataType 2 years ago
Jannik 922c5197da
update to JavaFX 12.0.1 2 years ago
Jannik 0599945036
clean up some mwc code + UIROMDataType 2 years ago
Jannik df33c21826 some code clean up 2 years ago
Jannik e59b14074e added a few new games, updated some Japanese titles 3 years ago
Jannik 648d101c8e updated year 3 years ago
Jannik 4222101b68 Update 'README.md' 3 years ago
Jannik db8fcd4bdc major code clean up 3 years ago
Jannik 7434d0be25 minor clean up 3 years ago
Jannik 360badb841 removed travis.yml 3 years ago
Jannik 38421599a3 the updater now uses gitea 3 years ago
Jannik 3f6eeece7d updated some libs, code clean up 3 years ago
  1. 4
      .travis.yml
  2. 4
      README.md
  3. 266
      downloadContent/games.csv
  4. 66
      pom.xml
  5. 212
      src/main/java/com/cemu_UI/application/Main.java
  6. 1515
      src/main/java/com/cemu_UI/application/MainWindowController.java
  7. 25
      src/main/java/com/cemu_UI/application/playGame.java
  8. 81
      src/main/java/com/cemu_UI/controller/CloudController.java
  9. 215
      src/main/java/com/cemu_UI/controller/DBController.java
  10. 3
      src/main/java/com/cemu_UI/controller/SmmdbAPIController.java
  11. 96
      src/main/java/com/cemu_UI/controller/UpdateController.java
  12. 419
      src/main/java/com/cemu_UI/controller/XMLController.java
  13. 3
      src/main/java/com/cemu_UI/datatypes/CourseTableDataType.java
  14. 29
      src/main/java/com/cemu_UI/datatypes/GlobalDataTypes.java
  15. 3
      src/main/java/com/cemu_UI/datatypes/SmmdbApiDataType.java
  16. 165
      src/main/java/com/cemu_UI/datatypes/UIROMDataType.java
  17. 250
      src/main/java/com/cemu_UI/uiElements/JFXEditGameAlert.java
  18. 227
      src/main/java/com/cemu_UI/uiElements/JFXEditGameDialog.java
  19. 17
      src/main/java/com/cemu_UI/uiElements/JFXInfoAlert.java
  20. 129
      src/main/java/com/cemu_UI/uiElements/JFXOkayCancelAlert.java
  21. 104
      src/main/java/com/cemu_UI/uiElements/JFXTextAreaAlert.java
  22. 97
      src/main/java/com/cemu_UI/uiElements/JFXTextAreaInfoDialog.java
  23. 60
      src/main/java/com/cemu_UI/vendorCloudController/GoogleDriveController.java
  24. 130
      src/main/resources/css/MainWindows.css
  25. 80
      src/main/resources/fxml/MainWindow.fxml
  26. 8
      src/main/resources/locals/cemu_UI-Local_en_US.properties

4
.travis.yml

@ -1,4 +0,0 @@
language: java
jdk:
- oraclejdk9
- oraclejdk10

4
README.md

@ -1,7 +1,7 @@
# cemu_UI
![Total Downloads](https://img.shields.io/github/downloads/Seil0/cemu_UI/total.svg?style=flat-square)
[![Latest](https://img.shields.io/github/release/Seil0/cemu_UI/all.svg?style=flat-square)](https://git.mosad.xyz/Seil0/cemu_UI/releases)
[![Latest](https://img.shields.io/badge/release-085-blue.svg?style=flat-square)](https://git.mosad.xyz/Seil0/cemu_UI/releases)
[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0)
cemu_UI is a simple, material design graphical frontend for [cemu](http://cemu.info/), a Wii U emulator. Downloads can be found [here](https://git.mosad.xyz/Seil0/cemu_UI/releases).
@ -34,4 +34,4 @@ If you want to use the cloud sync function read the [wiki](https://git.mosad.xyz
## Screenshots
![Screenshot](https://www.mosad.xyz/images/cemu_UI_MainWindow.png)
![Screenshot](https://www.mosad.xyz/images/cemu_UI_MainWindow.webp)

266
downloadContent/games.csv

@ -32,34 +32,34 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101AE900,コナミ ワイワイレーシング アドバンス,WUP-N-PCTJ,v0,JAP,
00050000-101C5800,ポッ拳 POKKÉN TOURNAMENT,WUP-N-APKJ,v16,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/APKJ2P.jpg?1454770411
00050000-1015CA00,出たな!! ツインビー,WUP-N-PNXJ,v0,JAP,
00050000-1016BA00,???!!????,WUP-N-FC2J,v0,JAP,
00050000-10113600,???!???!???!,WUP-P-ATKJ,v0,JAP,
00050000-1012F200,???!???!???! (DL),WUP-N-WAKJ,v0,JAP,
00050000-101B8800,???!????,WUP-N-DAQJ,v0,JAP,
00050000-10188B00,???!???? ?????????,WUP-N-AXYJ,v16,JAP,
00050000-101B4100,???!amiibo ?????????????,WUP-N-AAVJ,v0,JAP,
00050000-1015C800,????,WUP-N-PNVJ,v0,JAP,
00050000-101D0D00,????,WUP-N-PDHJ,,JAP,
00050000-10197000,????,WUP-N-PB3J,v0,JAP,
00050000-10195200,????,WUP-N-MNXJ,,JAP,
00050000-10168B00,????,WUP-N-MNLJ,,JAP,
00050000-10168800,????,WUP-N-MNHJ,v0,JAP,
00050000-10168600,????,WUP-N-MNFJ,v0,JAP,
00050000-10191000,????,WUP-N-JC9J,v0,JAP,
00050000-10134600,????,WUP-N-JBCJ,v0,JAP,
00050000-10119F00,????,WUP-N-JATJ,v0,JAP,
00050000-10116400,????,WUP-N-HNAJ,v114,JAP,
00050000-10171100,????,WUP-N-FDAJ,v0,JAP,
00050000-1018B700,????,WUP-N-FD8J,v0,JAP,
00050000-1018B100,????,WUP-N-FD3J,v0,JAP,
00050000-10160400,????,WUP-N-FCPJ,v0,JAP,
00050000-1015F700,????,WUP-N-FCKJ,v0,JAP,
00050000-1015F600,????,WUP-N-FCJJ,v0,JAP,
00050000-10170E00,????,WUP-N-FC9J,v0,JAP,
00050000-10113E00,????,WUP-N-FALJ,v0,JAP,
00050000-1012E200,????,WUP-N-FA6J,v0,JAP,
00050000-1012A100,????,WUP-N-FA2J,v0,JAP,
00050000-101F3A00,????,WUP-N-BTXJ,,JAP,
00050000-1016BA00,燃えろ!!プロ野球,WUP-N-FC2J,v0,JAP,
00050000-10113600,タンク!タンク!タンク!,WUP-P-ATKJ,v0,JAP,
00050000-1012F200,タンク!タンク!タンク! (DL),WUP-N-WAKJ,v0,JAP,
00050000-101B8800,タッチ!カービィ ,WUP-N-DAQJ,v0,JAP,
00050000-10188B00,タッチ!カービィ スーパーレインボー,WUP-N-AXYJ,v16,JAP,
00050000-101B4100,タッチ!amiibo いきなりファミコン名シーン,WUP-N-AAVJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/AAVJ.jpg
00050000-1015C800,沙羅曼蛇,WUP-N-PNVJ,v0,JAP,
00050000-101D0D00,グランボ,WUP-N-PDHJ,,JAP,
00050000-10197000,逆転裁判,WUP-N-PB3J,v0,JAP,
00050000-10195200,ウシャス,WUP-N-MNXJ,,JAP,
00050000-10168B00,沙羅曼蛇,WUP-N-MNLJ,,JAP,
00050000-10168800,魔城伝説,WUP-N-MNHJ,v0,JAP,
00050000-10168600,クォース,WUP-N-MNFJ,v0,JAP,
00050000-10191000,魔神転生,WUP-N-JC9J,v0,JAP,
00050000-10134600,三國志Ⅳ,WUP-N-JBCJ,v0,JAP,
00050000-10119F00,超魔界村,WUP-N-JATJ,v0,JAP,
00050000-10116400,ニコニコ,WUP-N-HNAJ,v114,JAP,
00050000-10171100,へべれけ,WUP-N-FDAJ,v0,JAP,
00050000-1018B700,セクロス,WUP-N-FD8J,v0,JAP,
00050000-1018B100,月風魔伝,WUP-N-FD3J,v0,JAP,
00050000-10160400,サッカー,WUP-N-FCPJ,v0,JAP,
00050000-1015F700,影の伝説,WUP-N-FCKJ,v0,JAP,
00050000-1015F600,半熟英雄,WUP-N-FCJJ,v0,JAP,
00050000-10170E00,沙羅曼蛇,WUP-N-FC9J,v0,JAP,
00050000-10113E00,ゼビウス,WUP-N-FALJ,v0,JAP,
00050000-1012E200,ギャラガ,WUP-N-FA6J,v0,JAP,
00050000-1012A100,マッピー,WUP-N-FA2J,v0,JAP,
00050000-101F3A00,テラリア,WUP-N-BTXJ,,JAP,
00050000-101C9800,????,124,v0,JAP,
00050000-10194F00,???? ???,WUP-N-MNUJ,v0,JAP,
00050000-1014C300,???? ????,WUP-N-WKEJ,v0,JAP,
@ -81,7 +81,7 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101AEA00,???? 2,WUP-N-PCUJ,v0,JAP,
00050000-101C3B00,???? 3,WUP-N-PC6J,,JAP,
00050000-1018E300,???? R,WUP-N-PBSJ,v0,JAP,
00050000-101D2C00,???? Ultra DX - ?????,WUP-N-ATXJ,v1,JAP,
00050000-101D2C00,チャリ走 Ultra DX – 世界ツアー,WUP-N-ATXJ,v1,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ATXJ.jpg
00050000-10179D00,????!???!????!,98,v16,JAP,
00050000-101C8600,????!????,WUP-N-DAVJ,v0,JAP,
00050000-1016A600,????!?????????,WUP-N-WB6J,v17,JAP,
@ -199,22 +199,22 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101C3600,?????? ??????,105,v0,JAP,
00050000-10192200,?????? ??????!,WUP-P-BRSJ,v18,JAP,
00050000-1015E300,?????? ???????,WUP-N-PAKJ,v0,JAP,
00050000-101BAE00,?????? ???????,WUP-N-NANJ,,JAP,
00050000-1015D200,?????? ????????,WUP-N-PN7J,v0,JAP,
00050000-1016F300,?????? ????????,WUP-N-PATJ,v0,JAP,
00050000-101B1200,?????? ?????????,WUP-N-VAPJ,v0,JAP,
00050000-10109C00,?????? ?????????,WUP-N-JAEJ,v0,JAP,
00050000-10199000,?????? ?????????,WUP-N-AVXJ,v16,JAP,
00050000-10109700,?????? ??????????,WUP-N-JADJ,v0,JAP,
00050000-10170700,?????? ??????????,WUP-N-ABWJ,v17,JAP,
00050000-1019C800,?????? ??????????? HD,WUP-N-AZAJ,v82,JAP,
00050000-10153E00,?????? ???2,WUP-N-JB5J,v0,JAP,
00050000-10159300,?????? ???3,WUP-N-JB9J,v0,JAP,
00050000-1020AA00,?????? '93,WUP-N-PPTJ,,JAP,
00050000-1015C900,?????? '94,WUP-N-PNWJ,v0,JAP,
00050000-1015FE00,?????? ~????????~,WUP-N-JCCJ,v0,JAP,
00050000-10169800,?????? ~?????~,WUP-N-PANJ,v0,JAP,
00050000-101C5900,?????? 3-in-1,WUP-N-ATYJ,v0,JAP,
00050000-101BAE00,ゼルダの伝説 ムジュラの仮面,WUP-N-NANJ,,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/NANJ.jpg
00050000-1015D200,ボンバーマン ぱにっくボンバー,WUP-N-PN7J,v0,JAP,
00050000-1016F300,星のカービィ 夢の泉デラックス,WUP-N-PATJ,v0,JAP,
00050000-101B1200,パンドラの塔 君のもとへ帰るまで,WUP-N-VAPJ,v0,JAP,
00050000-10109C00,星のカービィ スーパーデラックス,WUP-N-JAEJ,v0,JAP,
00050000-10199000,マリオテニス ウルトラスマッシュ,WUP-N-AVXJ,v16,JAP,
00050000-10109700,ゼルダの伝説 神々のトライフォース,WUP-N-JADJ,v0,JAP,
00050000-10170700,仮面ライダー バトライド・ウォーⅡ,WUP-N-ABWJ,v17,JAP,
00050000-1019C800,ゼルダの伝説 トワイライトプリンセス HD,WUP-N-AZAJ,v82,JAP,
00050000-10153E00,ロマンシング サ・ガ2,WUP-N-JB5J,v0,JAP,
00050000-10159300,ロマンシング サ・ガ3,WUP-N-JB9J,v0,JAP,
00050000-1020AA00,ボンバーマン '93,WUP-N-PPTJ,,JAP,
00050000-1015C900,ボンバーマン '94,WUP-N-PNWJ,v0,JAP,
00050000-1015FE00,マーヴェラス ~もうひとつの宝島~,WUP-N-JCCJ,v0,JAP,
00050000-10169800,風のクロノア ~夢見る帝国~,WUP-N-PANJ,v0,JAP,
00050000-101C5900,サイコロの森 3-in-1,WUP-N-ATYJ,v0,JAP,
00050000-101DA100,?????? 3on3,WUP-N-DA2J,,JAP,
00050000-10190100,?????? amiibo???????,WUP-P-AALJ,v0,JAP,
00050000-101D2B00,?????? AND CO.,WUP-N-ATCJ,v1,JAP,
@ -250,24 +250,24 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101CE300,???????,WUP-N-BNAJ,v0,JAP,
00050000-10112700,???????,WUP-N-ARBJ,v0,JAP,
00050000-1014F300,???????,WUP-N-APCJ,v0,JAP,
00050000-101A7900,???????,99,v0,JAP,
00050000-10186200,???????,116,v0,JAP,
00050000-10186B00,??????? ? ???,WUP-N-JC4J,v0,JAP,
00050000-10157C00,??????? ?????,WUP-N-WGEJ,v1,JAP,
00050000-1014F400,??????? ?????,WUP-N-WCKJ,v0,JAP,
00050000-1019CE00,??????? ?????,WUP-N-VABJ,v0,JAP,
00050000-101D8B00,??????? ?????,WUP-N-AP8J,v0,JAP,
00050000-10190700,??????? ??????,WUP-N-FECJ,v0,JAP,
00050000-1018B600,??????? ????????,WUP-N-FD7J,v0,JAP,
00050000-10113100,??????? ???????? ?????? ??????,WUP-N-ABHJ,v16,JAP,
00050000-101A5A00,??????? ?????????,WUP-N-NAHJ,v0,JAP,
00050000-1F600900,??????? ?????????,WUP-N-CNFJ,,JAP,
00050000-10144800,??????? ?????????,WUP-N-ARKJ,v17,JAP,
00050000-101A5200,??????? ??????????,WUP-N-DAJJ,v1,JAP,
00050000-10188000,??????? ???????????,WUP-N-PBMJ,v0,JAP,
00050000-10113000,??????? 3 - ??? -,WUP-P-AMEJ,v16,JAP,
00050000-10106100,??????? 3D????,WUP-N-ARDJ,v1,JAP,
00050000-101E9C00,???????:??????????,WUP-N-ACUJ,,JAP,
00050000-101A7900,キングスナイト,99,v0,JAP,
00050000-10186200,マッド・シティ,116,v0,JAP,
00050000-10186B00,コズモギャング ザ パズル,WUP-N-JC4J,v0,JAP,
00050000-10157C00,アルファディア ジェネシス,WUP-N-WGEJ,v1,JAP,
00050000-1014F400,クラウドベリー キングダム,WUP-N-WCKJ,v0,JAP,
00050000-1019CE00,ドンキーコング リターンズ,WUP-N-VABJ,v0,JAP,
00050000-101D8B00,ヒラメキパズル テトグラム,WUP-N-AP8J,v0,JAP,
00050000-10190700,バイオミラクル ぼくってウパ,WUP-N-FECJ,v0,JAP,
00050000-10190700,すごろクエスト ダイスの戦士たち,WUP-N-FD7J,v0,JAP,
00050000-10113100,バイオハザード リベレーションズ アンベールド エディション,WUP-N-ABHJ,v16,JAP,
00050000-101A5A00,テン・エイティ スノーボーディング,WUP-N-NAHJ,v0,JAP,
00050000-1F600900,ペーパーマリオ カラースプラッシュ,WUP-N-CNFJ,,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/CNFJ01.jpg
00050000-10144800,ドンキーコング トロピカルフリーズ,WUP-N-ARKJ,v17,JAP,
00050000-101A5200,ドンキーコング ジャングルクライマ,WUP-N-DAJJ,v1,JAP,
00050000-10188000,ことばのパズル もじぴったんアドバンス,WUP-N-PBMJ,v0,JAP,
00050000-10113000,マスエフェクト 3 - 特別版 -,WUP-P-AMEJ,v16,JAP,
00050000-10106100,スーパーマリオ 3Dワールド,WUP-N-ARDJ,v1,JAP,
00050000-101E9C00,キューブライフ:アイランドサバイバル,WUP-N-ACUJ,,JAP,
00050000-10176700,???????!,WUP-N-WKMJ,v0,JAP,
00050000-101CAA00,???????!????VS????,WUP-N-WMMJ,v0,JAP,
00050000-101B3000,???????!(??????????2014 ?????),WUP-N-BMJJ,v0,JAP,
@ -527,12 +527,12 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101AC300,????????64,104,v0,JAP,
00050000-10163F00,????????II,WUP-N-PPFJ,,JAP,
00050000-1017B800,????????SP,WUP-N-WBWJ,v1,JAP,
00050000-101FD300,????????U,WUP-N-WBUJ,,JAP,
00050000-101B3400,????????X ????????? ?????,WUP-P-BDLJ,,JAP,
00050000-10115E00,????????X ????????? ?????,WUP-N-ADQJ,v1312,JAP,
00050000-10155F00,????????X ??????????? ?????,WUP-P-ANYJ,,JAP,
00050000-1015FF00,????????XX,WUP-N-JCDJ,v0,JAP,
00050000-101A0200,????????Z,112,v0,JAP,
00050000-101FD300,ブロークドロップU,WUP-N-WBUJ,,JAP,https://art.gametdb.com/wiiu/coverM/JA/WBUJ.jpg
00050000-101B3400,ドラゴンクエストⅩ いにしえの竜の伝承 オンライン,WUP-P-BDLJ,,JAP,
00050000-10115E00,ドラゴンクエストⅩ 目覚めし五つの種族 オンライン,WUP-N-ADQJ,v1312,JAP,
00050000-10155F00,ドラゴンクエストⅩ 眠れる勇者と導きの盟友 オンライン,WUP-P-ANYJ,,JAP,
00050000-1015FF00,悪魔城ドラキュラXX,WUP-N-JCDJ,v0,JAP,
00050000-101A0200,フォーメーションZ,112,v0,JAP,
00050000-101B3100,???????(??????????2014 ?????),WUP-N-BYSJ,v0,JAP,
00050000-101B3600,???????(??????????2014 ?????),WUP-N-ALTJ,v0,JAP,
00050000-10161F00,???????10,WUP-N-ABAJ,v16,JAP,
@ -569,7 +569,7 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10184200,??????G2 ???????????????,WUP-N-PBKJ,v0,JAP,
00050000-10141500,??????if...,WUP-N-JBSJ,v0,JAP,
00050000-1015C000,??????II,WUP-N-PNMJ,v0,JAP,
00050000-101C5E00,??????V2,WUP-N-NARJ,,JAP,
00050000-101C5E00,カスタムロボV2,WUP-N-NARJ,,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/NARJ.jpg
00050000-1018E600,?????&????,WUP-N-PBTJ,v0,JAP,
00050000-1011B900,?????2,WUP-N-AQUJ,v1,JAP,
00050000-10114700,?????2 Dr.??????,WUP-N-FAPJ,v0,JAP,
@ -686,8 +686,8 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101DBF00,Angry Video Game Nerd Adventures,WUP-P-AVGP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AVGE.jpg?1475529340
00050000-1018F400,Angry Video Game Nerd Adventures,WUP-N-AVGE,v1,USA,https://art.gametdb.com/wiiu/coverHQ/US/AVGE.jpg?1475529340
00050000-10145600,Animal Crossing Plaza,WUP-U-ADBA,v16,all,https://art.gametdb.com/wiiu/coverHQ/EN/ADBP.jpg?1463010434
00050000-101C6500,Animal Crossing: amiibo Festival,WUP-P-AALP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AALE01.jpg?1451062877
00050000-101C6400,Animal Crossing: amiibo Festival,WUP-P-AALE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AALE01.jpg?1451062877
00050000-101C6500,Animal Crossing: amiibo Festival,WUP-P-AALP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AALP01.jpg
00050000-101C6400,Animal Crossing: amiibo Festival,WUP-P-AALE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AALE01.jpg
00050000-101D2100,Animal Crossing: Wild World,WUP-N-DAYP,,EUR,
00050000-101D2000,Animal Crossing: Wild World,WUP-N-DAYE,,USA,
00050000-10173200,Another World - 20th Anniversary Edition,WUP-P-WEUP,v16,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WEUE.jpg?1469834113
@ -955,15 +955,15 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10174700,Dig Dug,WUP-N-FDEE,v0,USA,
00050000-101A7800,Dig Dug II,WUP-N-FEWP,v0,EUR,
00050000-101A7700,Dig Dug II,WUP-N-FEWE,,USA,
00050000-1018A700,Dinox,WUP-P-BDNP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BDNE.jpg?1476388120
00050000-1018F500,Dinox,WUP-N-BDNE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BDNE.jpg?1476388120
00050000-101E8300,Discovery,WUP-P-ADUP,,EUR,
00050000-101D9B00,Discovery,WUP-N-ADUE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg?1355066365
00050000-10112E00,Disney Epic Mickey 2,18,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg?1355066365
00050000-1012C400,Disney Epic Mickey 2,19,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg?1355066365
00050000-10136D00,Disney Epic Mickey 2,20,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg?1355066365
00050000-1011B000,Disney Epic Mickey 2: The Power of Two,WUP-P-AEMS,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg?1355066365
00050000-1010DB00,Disney Epic Mickey 2: The Power of Two,WUP-N-AEME,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg?1355066365
00050000-1018A700,Dinox,WUP-P-BDNP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BDNE.jpg
00050000-1018F500,Dinox,WUP-N-BDNE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BDNE.jpg
00050000-101E8300,Discovery,WUP-P-ADUP,,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/ADUP.jpg
00050000-101D9B00,Discovery,WUP-N-ADUE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/ADUE.jpg
00050000-10112E00,Disney Epic Mickey 2,18,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg
00050000-1012C400,Disney Epic Mickey 2,19,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg
00050000-10136D00,Disney Epic Mickey 2,20,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/AEMJ91.jpg
00050000-1011B000,Disney Epic Mickey 2: The Power of Two,WUP-P-AEMS,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AEMS4Q.jpg
00050000-1010DB00,Disney Epic Mickey 2: The Power of Two,WUP-N-AEME,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/AEME4Q.jpg
00050000-10137000,Disney Infinity,WUP-U-ADSZ,v49,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ADSE4Q.jpg?1385299887
00050000-10136F00,Disney Infinity,WUP-U-ADSP,v49,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ADSE4Q.jpg?1385299887
00050000-10132900,Disney Infinity,WUP-P-ADSE,v49,USA,https://art.gametdb.com/wiiu/coverHQ/US/ADSE4Q.jpg?1385299887
@ -981,12 +981,12 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101A5300,DK Jungle Climber,WUP-N-DAJE,v1,USA,
00050000-1017D700,DK: King of Swing,WUP-N-PBCP,v0,EUR,
00050000-1017D600,DK: King of Swing,WUP-N-PBCE,v0,USA,
00050000-101A8100,Dodge Club Party,WUP-N-BDGE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BDGE.jpg?1488459948
00050000-1017DB00,Dolphin Up,WUP-N-WUPE,v16,USA,
00050000-101D2800,DON'T CRASH,WUP-N-AC5E,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/AC5E.jpg?1475792756
00050000-101C9A00,Don't Starve: Giant Edition,WUP-P-ADAP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ADAE.jpg?1475792710
00050000-101C4300,Don't Starve: Giant Edition,WUP-N-ADAE,v1,USA,https://art.gametdb.com/wiiu/coverHQ/US/ADAE.jpg?1475792710
00050000-1018EE00,Don't Touch Anything Red,WUP-N-ANTE,v1,USA,https://art.gametdb.com/wiiu/coverHQ/US/ANTE.jpg?1488461986
00050000-101A8100,Dodge Club Party,WUP-N-BDGE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BDGE.jpg
00050000-1017DB00,Dolphin Up,WUP-N-WUPE,v16,USA,https://art.gametdb.com/wiiu/coverHQ/US/WUPE.jpg
00050000-101D2800,DON'T CRASH,WUP-N-AC5E,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/AC5E.jpg
00050000-101C9A00,Don't Starve: Giant Edition,WUP-P-ADAP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ADAE.jpg
00050000-101C4300,Don't Starve: Giant Edition,WUP-N-ADAE,v1,USA,https://art.gametdb.com/wiiu/coverHQ/US/ADAE.jpg
00050000-1018EE00,Don't Touch Anything Red,WUP-N-ANTE,v1,USA,https://art.gametdb.com/wiiu/coverHQ/US/ANTE.jpg
00050000-10108000,Donkey Kong,WUP-N-FAFP,v0,EUR,
00050000-10107F00,Donkey Kong,WUP-N-FAFE,v0,USA,
00050000-1014A900,Donkey Kong 3,WUP-N-FBRP,v0,EUR,
@ -1025,7 +1025,7 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10152A00,Dr. Luigi,WUP-N-WAQE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/WAQE.jpg?1476819557
00050000-10153200,Dr. Mario,WUP-N-FB5P,v0,EUR,https://art.gametdb.com/wii/cover/US/WDME.png?1353446316
00050000-10153100,Dr. Mario,WUP-N-FB5E,v0,USA,https://art.gametdb.com/wii/cover/US/WDME.png?1353446316
00050000-10150300,Dr.LUIGI & 細菌撲滅,WUP-N-WAQJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/US/WAQE.jpg?1476819557
00050000-10150300,Dr.LUIGI & 細菌撲滅,WUP-N-WAQJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/WAQJ.jpg
00050000-101F4F00,Dracula's Legacy,WUP-P-AGJP,,EUR,https://art.gametdb.com/wiiu/coverM/US/AGJE.jpg?1476537791
00050000-101F5000,Dracula's Legacy,WUP-N-AGJE,,USA,https://art.gametdb.com/wiiu/coverM/US/AGJE.jpg?1476537791
00050000-101B2900,Dragon Fantasy: The Black Tome of Ice,WUP-N-AFYE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AFYE.jpg?1475792823
@ -1040,17 +1040,17 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10203B00,Dreamals: Dream Quest,WUP-N-AQBE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AQBE.jpg?1488462612
00050000-101CAF00,Drill Dozer,WUP-N-PDEP,,EUR,
00050000-101CB000,Drill Dozer,WUP-N-PDEE,,USA,
00050000-101F7600,Dual Core,WUP-P-BD8P,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BD8E.jpg?1475793254
00050000-101E3800,Dual Core,WUP-N-BD8E,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BD8E.jpg?1475793254
00050000-101F7600,Dual Core,WUP-P-BD8P,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BD8E.jpg
00050000-101E3800,Dual Core,WUP-N-BD8E,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BD8E.jpg
00050000-10192600,Duck Hunt,WUP-N-FEHP,v1,EUR,
00050000-10192500,Duck Hunt,WUP-N-FEHE,v1,USA,
00050000-10129200,DuckTales: Remastered,WUP-P-WDKP,v32,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WDKE08.jpg?1458757418
00050000-10129000,DuckTales: Remastered,WUP-N-WDKE,v32,USA,https://art.gametdb.com/wiiu/coverHQ/US/WDKE08.jpg?1458757418
00050000-10129200,DuckTales: Remastered,WUP-P-WDKP,v32,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WDKE08.jpg
00050000-10129000,DuckTales: Remastered,WUP-N-WDKE,v32,USA,https://art.gametdb.com/wiiu/coverHQ/US/WDKE08.jpg
00050000-10167700,Dungeon Explorer,WUP-N-PN3E,,USA,
00050000-101F8A00,Dungeon Hearts DX,WUP-N-BXDE,,USA,
00050000-1012BF00,Dungeons & Dragons: Chronicles of Mystara,WUP-P-WDDP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WDDE.jpg?1475793358
00050000-1012C000,Dungeons & Dragons: Chronicles of Mystara,WUP-N-WDDE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/WDDE.jpg?1475793358
00050000-1010D900,EA SPORTS FIFA Soccer 13,WUP-N-AF3E,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/AF3E69.jpg?1355512715
00050000-1012BF00,Dungeons & Dragons: Chronicles of Mystara,WUP-P-WDDP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WDDE.jpg
00050000-1012C000,Dungeons & Dragons: Chronicles of Mystara,WUP-N-WDDE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/WDDE.jpg
00050000-1010D900,EA SPORTS FIFA Soccer 13,WUP-N-AF3E,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/AF3E69.jpg
00050000-10133500,EarthBound,WUP-N-JBBP,v0,EUR,
00050000-10133400,EarthBound,WUP-N-JBBE,v0,USA,
00050000-10133200,EarthBound Beginnings,WUP-N-FBDP,v0,EUR,
@ -1117,7 +1117,7 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-1012F000,FAST Racing NEO,WUP-N-WFSE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/WFSE.jpg?1475794541
00050000-101FED00,FAST Racing NEO,WUP-P-BR5P,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WFSE.jpg?1475794541
00050000-10182D00,Fat City,WUP-N-AFTE,v1,USA,
00050000-101D0600,Fatal Frame: Maiden of Black Water,WUP-N-AL5E,v0,USA,
00050000-101D0600,Fatal Frame: Maiden of Black Water,WUP-N-AL5E,v0,USA,https://art.gametdb.com/wiiu/coverM/US/AL5E.jpg
00050000-1FBF1000,FBF10,WUP-P-ABCD,"v0, v32 ",all,
00050000-1010EE00,FIFA 13,WUP-P-AF3P,v16,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AF3P69.jpg?1458686491
00050000-10110C00,FIFA 13 ワールドクラスサッカー,WUP-N-AF3J,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/EN/AF3P69.jpg?1458686491
@ -1278,8 +1278,8 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10150500,Ice Hockey,WUP-N-FBUE,v0,USA,
00050000-10184400,Infinity Runner,WUP-P-BRNP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BRNE.jpg?1475871864
00050000-10183C00,Infinity Runner,WUP-N-BRNE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BRNE.jpg?1475871864
00050000-10111A00,Injustice: Gods Among Us,WUP-P-AJSP,v16,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AJSPWR.jpg?1384898050
00050000-10111700,Injustice: Gods Among Us,WUP-N-AJSE,v16,USA,https://art.gametdb.com/wiiu/coverHQ/EN/AJSPWR.jpg?1384898050
00050000-10111A00,Injustice: Gods Among Us,WUP-P-AJSP,v16,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AJSPWR.jpg
00050000-10111700,Injustice: Gods Among Us,WUP-N-AJSE,v16,USA,https://art.gametdb.com/wiiu/coverHQ/US/AJSEWR.jpg
00050000-101E5800,Inside My Radio,WUP-P-ARQP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ARQE.jpg?1475872012
00050000-101E5A00,Inside My Radio,WUP-N-ARQE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/ARQE.jpg?1475872012
00050000-10179300,Internal Invasion,WUP-N-WG9E,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/WG9E.jpg?1469833806
@ -1399,12 +1399,12 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101DAB00,LEGO Star Wars: The Force Awakens,WUP-N-BLGE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BLGEWR.jpg?1471068273
00050000-10168D00,LEGO The Hobbit,WUP-P-ALHP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ALHEWR.jpg?1447095190
00050000-1016A700,LEGO The Hobbit,WUP-N-ALHE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/ALHEWR.jpg?1447095190
00050000-10192100,LEGO ムービー ザ・ゲーム,WUP-N-ALAJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ALAJWR.jpg?1458328106
00050000-101EA100,LEGO マーベル アベンジャーズ,WUP-N-ALRJ,,JAP,https://art.gametdb.com/wiiu/coverHQ/US/ALREWR.jpg?1454429385
00050000-101A2D00,LEGO マーベル スーパー・ヒーローズ ザ・ゲーム,WUP-N-ALMJ,v1,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ALMJWR.jpg?1458326377
00050000-101CDF00,LEGO ジュラシック・ワールド,WUP-N-ALJJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ALJJWR.jpg?1458326309
00050000-101EA000,LEGO スター・ウォーズ/フォースの覚醒,WUP-N-BLGJ,,JAP,https://art.gametdb.com/wiiu/coverM/JA/BLGJWR.jpg?1476282662
00050000-101B2700,LEGO バットマン3 ザ・ゲーム ゴッサムから宇宙へ,WUP-N-BTMJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/BTMJWR.jpg?1458326334
00050000-10192100,LEGO ムービー ザ・ゲーム,WUP-N-ALAJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ALAJWR.jpg
00050000-101EA100,LEGO マーベル アベンジャーズ,WUP-N-ALRJ,,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ALRJWR.jpg
00050000-101A2D00,LEGO マーベル スーパー・ヒーローズ ザ・ゲーム,WUP-N-ALMJ,v1,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ALMJWR.jpg
00050000-101CDF00,LEGO ジュラシック・ワールド,WUP-N-ALJJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ALJJWR.jpg
00050000-101EA000,LEGO スター・ウォーズ/フォースの覚醒,WUP-N-BLGJ,,JAP,https://art.gametdb.com/wiiu/coverM/JA/BLGJWR.jpg
00050000-101B2700,LEGO バットマン3 ザ・ゲーム ゴッサムから宇宙へ,WUP-N-BTMJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/BTMJWR.jpg
00050000-101F6400,Letter Quest Remastered,WUP-P-AG8P,,EUR,
00050000-101F5500,Letter Quest: Remastered,WUP-N-AG8E,,USA,
00050000-101D3B00,Level 22,WUP-P-AL2P,,EUR,
@ -1436,8 +1436,8 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101EAE00,Lucentek Beyond,WUP-P-WLBE,,USA,
00050000-10154E00,Luv Me Buddies Wonderland,WUP-P-ALVP,v1,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/ALVPYF.jpg?1475665205
00050000-10177400,Luv Me Buddies Wonderland,WUP-N-ALVE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/EN/ALVPYF.jpg?1475665205
00050000-10190300,Mario & Sonic at the Rio 2016 Olympic Games,WUP-U-ABJJ,48,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ABJJ01.jpg?1463240667
00050000-101E5300,Mario & Sonic at the Rio 2016 Olympic Games,WUP-U-ABJE,16,USA,https://art.gametdb.com/wiiu/coverHQ/JA/ABJJ01.jpg?1463240667
00050000-10190300,Mario & Sonic at the Rio 2016 Olympic Games,WUP-U-ABJJ,48,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/ABJJ01.jpg
00050000-101E5300,Mario & Sonic at the Rio 2016 Olympic Games,WUP-U-ABJE,16,USA,https://art.gametdb.com/wiiu/coverHQ/EN/ABJP01.jpg
00050000-10160900,Mach Rider,WUP-N-FCQP,v0,EUR,
00050000-10160800,Mach Rider,WUP-N-FCQE,v0,USA,
00050000-1010D800,Madden NFL 13,WUP-N-AMDE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/AMDE69.jpg?1354294756
@ -1449,7 +1449,7 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101A2200,Mario & Luigi: Partners in Time,WUP-N-DAHE,v0,USA,
00050000-10157500,Mario & Luigi: Superstar Saga,WUP-N-PAEP,v0,EUR,
00050000-10157400,Mario & Luigi: Superstar Saga,WUP-N-PAEE,v1,USA,
00050000-101E5400,Mario & Sonic at the Rio 2016 Olympic Games,WUP-P-ABJP,,EUR,https://art.gametdb.com/wiiu/coverHQ/JA/ABJJ01.jpg?1463240667
00050000-101E5400,Mario & Sonic at the Rio 2016 Olympic Games,WUP-P-ABJP,,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/ABJP01.jpg
00050000-1010C800,Mario & Sonic at the Sochi 2014 Olympic Winter Games,WUP-P-AURP,v32,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AURP01.jpg?1384710496
00050000-1010C700,Mario & Sonic at the Sochi 2014 Olympic Winter Games,WUP-P-AURE,v32,USA,https://art.gametdb.com/wiiu/coverHQ/EN/AURP01.jpg?1384710496
00050000-10107C00,Mario Bros.,WUP-N-FAEE,v0,USA,
@ -1595,8 +1595,8 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-101C5A00,Mighty No. 9,WUP-P-AMQP,,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AMQPKM.jpg?1466700278
00050000-101DD900,Mighty No. 9,WUP-N-AMQJ,,JAP,https://art.gametdb.com/wiiu/coverHQ/EN/AMQPKM.jpg?1466700278
00050000-101C9600,Mighty No. 9,WUP-N-AMQE,,USA,https://art.gametdb.com/wiiu/coverHQ/EN/AMQPKM.jpg?1466700278
00050000-1014F100,Mighty Switch Force! 2,WUP-P-WM2P,v0,EUR,https://art.gametdb.com/wiiu/coverM/US/WM2E.jpg?1404311990
00050000-1014FC00,Mighty Switch Force! 2,WUP-N-WM2E,v0,USA,https://art.gametdb.com/wiiu/coverM/US/WM2E.jpg?1404311990
00050000-1014F100,Mighty Switch Force! 2,WUP-P-WM2P,v0,EUR,https://art.gametdb.com/wiiu/coverM/US/WM2E.jpg
00050000-1014FC00,Mighty Switch Force! 2,WUP-N-WM2E,v0,USA,https://art.gametdb.com/wiiu/coverM/US/WM2E.jpg
00050000-10128200,Mighty Switch Force! Hyper Drive Edition,WUP-P-WHYP,v32,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WHYE.jpg?1469834303
00050000-1011B100,Mighty Switch Force! Hyper Drive Edition,WUP-N-WHYE,v16,USA,https://art.gametdb.com/wiiu/coverHQ/US/WHYE.jpg?1469834303
00050000-10205500,MikroGame: Rotator,WUP-P-BR7P,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BR7E.jpg?1475874112
@ -1741,7 +1741,7 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10175C00,One Piece: Unlimited World Red,WUP-N-AUNE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/JA/AUNJAF.jpg?1459438484
00050000-101A9200,Onimusha Tactics,WUP-N-PCKP,,EUR,
00050000-101A9300,Onimusha Tactics,WUP-N-PCKE,v0,USA,
00050000-101AB100,Outer World 20th Anniversary Edition,WUP-N-WEUJ,v0,JAP,
00050000-101AB100,Outer World 20th Anniversary Edition,WUP-N-WEUJ,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/WEUJ.jpg
00050000-101D0800,Outside the Realm,WUP-N-ARLE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/ARLE.jpg?1488257330
00050000-10202100,Overworld Defender Remix,WUP-N-BR8E,,USA,
00050000-10186D00,Pac-Attack,WUP-N-JC4P,v0,EUR,
@ -2104,23 +2104,23 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10135200,Star Wars Pinball,WUP-N-WA2E,v33,USA,https://art.gametdb.com/wiiu/coverHQ/US/WA2E.jpg?1476384312
00050000-101B5B00,StarTropics,WUP-N-FE2P,v0,EUR,
00050000-101B5A00,StarTropics,WUP-N-FE2E,,USA,
00050000-101D4700,STARWHAL,WUP-P-BJTP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BJTE.jpg?1476043031
00050000-1019ED00,STARWHAL,WUP-N-BJTE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/BJTE.jpg?1476043031
00050000-10173300,Stealth Inc 2: A Game of Clones,WUP-P-WCGP,v16,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WCGE.jpg?1476043150
00050000-10176500,Stealth Inc 2: A Game of Clones,WUP-N-WCGE,v16,USA,https://art.gametdb.com/wiiu/coverHQ/US/WCGE.jpg?1476043150
00050000-1018D800,SteamWorld Dig,WUP-P-ADGP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ADGE.jpg?1476043255
00050000-1018F100,SteamWorld Dig,WUP-N-ADGE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/ADGE.jpg?1476043255
00050000-101A3700,SteamWorld Heist,WUP-P-AY5P,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AY5E.jpg?1476052479
00050000-101A4000,SteamWorld Heist,WUP-N-AY5E,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AY5E.jpg?1476052479
00050000-101FDE00,STEEL LORDS,WUP-P-ALQP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ALQE.jpg?1476559837
00050000-101FE500,STEEL LORDS,WUP-N-ALQE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/ALQE.jpg?1476559837
00050000-101F1600,STEEL RIVALS,WUP-P-BRCP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BRCE.jpg?1476800242
00050000-101D9500,STEEL RIVALS,WUP-N-BRCE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BRCE.jpg?1476800242
00050000-1016D400,Stick it to the Man,WUP-P-WMNP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WMNE.jpg?1476043351
00050000-1016E000,Stick it to the Man,WUP-N-WMNE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/WMNE.jpg?1476043351
00050000-101D4700,STARWHAL,WUP-P-BJTP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BJTE.jpg
00050000-1019ED00,STARWHAL,WUP-N-BJTE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/BJTE.jpg
00050000-10173300,Stealth Inc 2: A Game of Clones,WUP-P-WCGP,v16,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WCGE.jpg
00050000-10176500,Stealth Inc 2: A Game of Clones,WUP-N-WCGE,v16,USA,https://art.gametdb.com/wiiu/coverHQ/US/WCGE.jpg
00050000-1018D800,SteamWorld Dig,WUP-P-ADGP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ADGE.jpg
00050000-1018F100,SteamWorld Dig,WUP-N-ADGE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/ADGE.jpg
00050000-101A3700,SteamWorld Heist,WUP-P-AY5P,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AY5E.jpg
00050000-101A4000,SteamWorld Heist,WUP-N-AY5E,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AY5E.jpg
00050000-101FDE00,STEEL LORDS,WUP-P-ALQP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/ALQE.jpg
00050000-101FE500,STEEL LORDS,WUP-N-ALQE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/ALQE.jpg
00050000-101F1600,STEEL RIVALS,WUP-P-BRCP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BRCE.jpg
00050000-101D9500,STEEL RIVALS,WUP-N-BRCE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/BRCE.jpg
00050000-1016D400,Stick it to the Man,WUP-P-WMNP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WMNE.jpg
00050000-1016E000,Stick it to the Man,WUP-N-WMNE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/WMNE.jpg
00050000-1018B500,STINGER,WUP-N-FD6E,v0,USA,
00050000-101D5100,Stone Shire,WUP-P-BSVP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BSVE.jpg?1475925595
00050000-101A4C00,Stone Shire,WUP-N-BSVE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/BSVE.jpg?1475925595
00050000-101D5100,Stone Shire,WUP-P-BSVP,v0,EUR,https://art.gametdb.com/wiiu/coverHQ/US/BSVE.jpg
00050000-101A4C00,Stone Shire,WUP-N-BSVE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/BSVE.jpg
00050000-10177F00,Street Fighter 2010: The Final Fight,WUP-N-FDLP,v0,EUR,
00050000-10177E00,Street Fighter 2010: The Final Fight,WUP-N-FDLE,v0,USA,
00050000-1016C600,Street Fighter Alpha 2,WUP-N-JCGP,v0,EUR,
@ -2139,8 +2139,8 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10130B00,Super Castlevania IV,WUP-N-JA9P,v0,EUR,
00050000-10130A00,Super Castlevania IV,WUP-N-JA9E,v0,USA,
00050000-101B9600,Super Destronaut,WUP-N-ASJE,v0,USA,https://art.gametdb.com/wiiu/coverHQ/US/ASJE.jpg?1476907451
00050000-101FB000,Super Destronaut 2: Go Duck Yourself,WUP-P-AJNP,,EUR,https://art.gametdb.com/wiiu/coverHQ/US/AJNE.jpg?1477517957
00050000-101F9400,Super Destronaut 2: Go Duck Yourself,WUP-N-AJNE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AJNE.jpg?1477517957
00050000-101FB000,Super Destronaut 2: Go Duck Yourself,WUP-P-AJNP,,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/AJNP.jpg
00050000-101F9400,Super Destronaut 2: Go Duck Yourself,WUP-N-AJNE,,USA,https://art.gametdb.com/wiiu/coverHQ/US/AJNE.jpg
00050000-10151200,Super Dodge Ball,WUP-N-FB2P,v0,EUR,
00050000-10151100,Super Dodge Ball,WUP-N-FB2E,v0,USA,
00050000-10191100,SUPER E.D.F. Earth Defense Force,WUP-N-JDAJ,v0,JAP,
@ -2480,8 +2480,8 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-1012F100,Wii Sports Club,WUP-N-AWSJ,v112,JAP,https://art.gametdb.com/wiiu/coverHQ/US/AWSE01.jpg?1469542427
00050000-10144D00,Wii Sports Club,WUP-N-AWSE,v112,USA,https://art.gametdb.com/wiiu/coverHQ/US/AWSE01.jpg?1469542427
00050000-10171E00,Wii Sports Club Lite,90,v0,JAP,https://art.gametdb.com/wiiu/coverHQ/US/AWSE01.jpg?1469542427
00050000-1012D300,Wii Street U powered by Google,WUP-N-WHXJ,v144,JAP,https://art.gametdb.com/wiiu/coverHQ/US/WHXE.jpg?1476395180
00050000-10132000,Wii Street U powered by Google,91,v144,USA,https://art.gametdb.com/wiiu/coverHQ/US/WHXE.jpg?1476395180
00050000-1012D300,Wii Street U powered by Google,WUP-N-WHXJ,v144,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/WHXJ.jpg
00050000-10132000,Wii Street U powered by Google,WUP-N-WHXE,v144,USA,https://art.gametdb.com/wiiu/coverHQ/US/WHXE.jpg
00050000-10132100,Wii Street U powered by Google,92,v144,EUR,https://art.gametdb.com/wiiu/coverHQ/US/WHXE.jpg?1476395180
00050000-10129600,Wii U Panorama View 予告編,WUP-N-SPGJ,v1,JAP,https://art.gametdb.com/wiiu/coverM/JA/SPGJ.jpg?1419725497
00050000-1012D500,Wii U Panorama View 鳥の飛行隊,WUP-N-WETJ,v1,JAP,https://art.gametdb.com/wiiu/coverM/JA/WETJ.jpg?1419725020
@ -2576,3 +2576,9 @@ TitleID,Description,ProductCode,Version,Region,CoverURL
00050000-10112300,ZombiU(ゾンビU),WUP-N-AZUJ,v32,JAP,https://art.gametdb.com/wiiu/coverHQ/US/AZUE41.jpg?1354294751
00050000-1014E300,Zumba Fitness World Party,WUP-U-AZBP,v16,EUR,https://art.gametdb.com/wii/cover/EN/SZ3PGT.png?1385155346
00050000-10142A00,Zumba Fitness World Party,WUP-N-AZBE,v16,USA,https://art.gametdb.com/wii/cover/EN/SZ3PGT.png?1385155346
00050000-10217000,JUST DANCE® 2019,WUP-P-HJDP,16,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/HJDP41.jpg
00050000-10217300,JUST DANCE® 2019,WUP-P-HJDE,"16, 32, 48, 64, 80, 96, 113, 128, 144, 160, 176, 192, 208, 224 ",USA,https://art.gametdb.com/wiiu/coverHQ/EN/HJDP41.jpg
00050000-10209900,Cars 3: Driven to Win,WUP-N-BA4E,,USA,https://art.gametdb.com/wiiu/coverHQ/DE/BA4PWR.jpg
00050000-1020A400,Cars 3: Driven to Win,WUP-P-BA4P,,EUR,https://art.gametdb.com/wiiu/coverHQ/DE/BA4PWR.jpg
00050000-10211F00,ドラゴンクエストⅩ 5000年の旅路 遙かなる故郷へ オンライン,WUP-P-AXTJ ,,JAP,https://art.gametdb.com/wiiu/coverHQ/JA/AXTJGD.jpg
00050000-10210C00,Just Dance 2018®,WUP-P-BJ8P,,EUR,https://art.gametdb.com/wiiu/coverHQ/EN/BJ8P41.jpg

66
pom.xml

@ -5,7 +5,7 @@
<groupId>com</groupId>
<artifactId>cemu_UI</artifactId>
<version>0.3.1-SNAPSHOT</version>
<version>0.3.2-SNAPSHOT</version>
<packaging>jar</packaging>
<name>cemu_UI</name>
<description>cemu_UI is a simple, material design graphical frontend for cemu, a Wii U emulator</description>
@ -27,25 +27,25 @@
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
<version>12.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11</version>
<version>12.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-media</artifactId>
<version>11</version>
<version>12.0.1</version>
</dependency>
<dependency>
<groupId>com.jfoenix</groupId>
<artifactId>jfoenix</artifactId>
<version>9.0.6</version>
<version>9.0.9</version>
</dependency>
<dependency>
@ -57,19 +57,19 @@
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.23.1</version>
<version>3.27.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.1</version>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
<version>2.11.2</version>
</dependency>
<dependency>
@ -92,14 +92,6 @@
<version>1.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.datafx/flow -->
<dependency>
<groupId>io.datafx</groupId>
<artifactId>flow</artifactId>
<version>8.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j -->
<dependency>
<groupId>net.lingala.zip4j</groupId>
@ -115,18 +107,11 @@
<version>1.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.api-client/google-api-client -->
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-drive -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-drive</artifactId>
<version>v3-rev129-1.25.0</version>
<version>v3-rev136-1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.http-client/google-http-client -->
@ -143,20 +128,6 @@
<version>1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client -->
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client</artifactId>
<version>1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-java6 -->
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-java6</artifactId>
<version>1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-jetty -->
<dependency>
<groupId>com.google.oauth-client</groupId>
@ -168,15 +139,7 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
<version>2.9.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mortbay.jetty/jetty -->
@ -186,13 +149,6 @@
<version>6.1.26</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mortbay.jetty/jetty-util -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>6.1.26</version>
</dependency>
</dependencies>
<build>
@ -229,7 +185,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>

212
src/main/java/com/cemu_UI/application/Main.java

@ -1,7 +1,7 @@
/**
* cemu_UI
*
* Copyright 2017-2018 <@Seil0>
* Copyright 2017-2019 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.application;
import java.io.File;
@ -26,7 +27,6 @@ import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.Optional;
import java.util.Timer;
import java.util.TimerTask;
@ -34,51 +34,44 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.cemu_UI.controller.CloudController;
import com.cemu_UI.controller.XMLController;
import com.cemu_UI.uiElements.JFXInfoAlert;
import com.cemu_UI.uiElements.JFXOkayCancelAlert;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXMLLoader;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.AnchorPane;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
public class Main extends Application {
private Stage primaryStage;
private final String gamesDBdownloadURL = "https://git.mosad.xyz/Seil0/cemu_UI/raw/branch/master/downloadContent/games.db";
private static Main main;
private static XMLController xmlController;
private MainWindowController mainWindowController;
private CloudController cloudController;
private Stage primaryStage;
private AnchorPane pane;
private Scene scene;
private static String userHome = System.getProperty("user.home");
private static String userName = System.getProperty("user.name");
private static String osName = System.getProperty("os.name");
private static String osArch = System.getProperty("os.arch");
private static String osVers = System.getProperty("os.version");
private static String javaVers = System.getProperty("java.version");
private static String javaVend= System.getProperty("java.vendor");
private String gamesDBdownloadURL = "https://git.mosad.xyz/Seil0/cemu_UI/raw/branch/master/downloadContent/games.db";
private static String dirCemuUI;
private static File directory;
private static File configFile;
private static File gamesDBFile;
private static File reference_gamesFile;
private static File pictureCache;
private static Logger LOGGER;
@Override
public void start(Stage primaryStage) {
try {
LOGGER.info("OS: " + osName + " " + osVers + " " + osArch);
LOGGER.info("Java: " + javaVend + " " + javaVers);
LOGGER.info("User: " + userName + " " + userHome);
LOGGER.info("OS: " + XMLController.getOsName() + " " + XMLController.getOsVers() + " " + XMLController.getOsVers());
LOGGER.info("Java: " + XMLController.getJavaVend() + " " + XMLController.getJavaVers());
LOGGER.info("User: " + XMLController.getUserName() + " " + XMLController.getUserHome());
this.primaryStage = primaryStage;
mainWindowController = new MainWindowController(this);
mainWindowController = new MainWindowController();
main = this;
mainWindow();
initActions();
@ -94,11 +87,11 @@ public class Main extends Application {
loader.setLocation(getClass().getResource("/fxml/MainWindow.fxml"));
loader.setController(mainWindowController);
pane = (AnchorPane) loader.load();
primaryStage.setMinWidth(265.00);
primaryStage.setMinHeight(425.00);
primaryStage.setMinWidth(1130);
primaryStage.setMinHeight(600 + 34);
primaryStage.setTitle("cemu_UI");
// primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream(""))); //adds application icon
primaryStage.setOnCloseRequest(event -> System.exit(1));
primaryStage.setOnCloseRequest(event -> System.exit(0));
// generate window
scene = new Scene(pane); // create new scene, append pane to scene
@ -106,51 +99,46 @@ public class Main extends Application {
primaryStage.setScene(scene); // append scene to stage
primaryStage.show(); // show stage
cloudController = new CloudController(mainWindowController); // call cloudController constructor
cloudController = CloudController.getInstance(mainWindowController); // call cloudController constructor
// startup checks
// check if client_secret.json is present
if (Main.class.getResourceAsStream("/client_secret.json") == null) {
LOGGER.error("client_secret is missing!!!!!");
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("cemu_UI");
alert.setHeaderText("Error");
alert.setContentText("client_secret is missing! Please contact the maintainer. \nIf you compiled cemu_UI by yourself see: \nhttps://git.mosad.xyz/Seil0/cemu_UI/wiki/Documantation");
alert.showAndWait();
JFXInfoAlert noCSAlert = new JFXInfoAlert("Error",
"client_secret is missing! Please contact the maintainer. \n"
+ "If you compiled cemu_UI by yourself see: \n"
+ "https://git.mosad.xyz/Seil0/cemu_UI/wiki/Documantation",
"-fx-button-type: RAISED; -fx-background-color: #00a8cc; -fx-text-fill: BLACK;", primaryStage);
noCSAlert.showAndWait();
}
if (!directory.exists()) {
if (!XMLController.getDirCemuUI().exists()) {
LOGGER.info("creating cemu_UI directory");
directory.mkdir();
pictureCache.mkdir();
XMLController.getDirCemuUI().mkdir();
XMLController.getPictureCache().mkdir();
}
if (!configFile.exists()) {
if (!XMLController.getConfigFile().exists()) {
LOGGER.info("firststart, setting default values");
firstStart();
mainWindowController.setColor("00a8cc");
mainWindowController.setAutoUpdate(false);
mainWindowController.setLanguage("en_US");
mainWindowController.setLastLocalSync(0);
mainWindowController.setxPosHelper(0);
mainWindowController.saveSettings();
xmlController.saveSettings();
}
if (!pictureCache.exists()) {
pictureCache.mkdir();
if (!XMLController.getPictureCache().exists()) {
XMLController.getPictureCache().mkdir();
}
if (!reference_gamesFile.exists()) {
if (gamesDBFile.exists()) {
gamesDBFile.delete();
if (!XMLController.getRference_gamesFile().exists()) {
if (XMLController.getGamesDBFile().exists()) {
XMLController.getGamesDBFile().delete();
}
try {
LOGGER.info("downloading ReferenceGameList.db... ");
URL website = new URL(gamesDBdownloadURL);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(reference_gamesFile);
FileOutputStream fos = new FileOutputStream(XMLController.getRference_gamesFile());
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
LOGGER.info("finished downloading games.db");
@ -161,12 +149,11 @@ public class Main extends Application {
// init here as it loads the games to the mwc and the gui, therefore the window must exist
mainWindowController.init();
mainWindowController.getDbController().init();
// if cloud sync is activated start sync
if(mainWindowController.isCloudSync()) {
cloudController.initializeConnection(mainWindowController.getCloudService(), mainWindowController.getCemuPath());
cloudController.sync(mainWindowController.getCloudService(), mainWindowController.getCemuPath(), directory.getPath());
if (XMLController.isCloudSync()) {
cloudController.initializeConnection(XMLController.getCloudService(), XMLController.getCemuPath());
cloudController.sync(XMLController.getCloudService(), XMLController.getCemuPath(), XMLController.getDirCemuUIPath());
}
} catch (IOException e) {
@ -175,56 +162,53 @@ public class Main extends Application {
}
public static void main(String[] args) {
String logPath = "";
if (osName.contains("Windows")) {
dirCemuUI = userHome + "/Documents/cemu_UI";
if (System.getProperty("os.name").contains("Windows")) {
logPath = System.getProperty("user.home") + "/Documents/cemu_UI/app.log";
} else {
dirCemuUI = userHome + "/cemu_UI";
logPath = System.getProperty("user.home") + "/cemu_UI/app.log";
}
directory = new File(dirCemuUI);
configFile = new File(dirCemuUI + "/config.xml");
gamesDBFile = new File(dirCemuUI + "/games.db");
reference_gamesFile = new File(dirCemuUI + "/reference_games.db");
pictureCache= new File(dirCemuUI+"/picture_cache");
// delete old log file and create new
System.setProperty("logFilename", dirCemuUI + "/app.log");
File logFile = new File(dirCemuUI + "/app.log");
System.setProperty("logFilename", logPath);
File logFile = new File(logPath);
logFile.delete();
LOGGER = LogManager.getLogger(Main.class.getName());
xmlController = new XMLController();
launch(args);
}
private void firstStart() {
Alert alert = new Alert(AlertType.CONFIRMATION); // new alert with file-chooser
alert.setTitle("cemu_UI");
alert.setHeaderText("cemu installation");
alert.setContentText("please select your cemu installation");
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK) {
JFXOkayCancelAlert cemuInstallAlert = new JFXOkayCancelAlert("cemu installation",
"please select your cemu installation",
"-fx-button-type: RAISED; -fx-background-color: #00a8cc; -fx-text-fill: BLACK;", primaryStage);
cemuInstallAlert.setOkayAction(e -> {
DirectoryChooser directoryChooser = new DirectoryChooser();
File selectedDirectory = directoryChooser.showDialog(primaryStage);
mainWindowController.setCemuPath(selectedDirectory.getAbsolutePath());
} else {
mainWindowController.setCemuPath(null);
}
XMLController.setCemuPath(selectedDirectory.getAbsolutePath());
});
cemuInstallAlert.setCancelAction(e -> {
XMLController.setCemuPath(null);
LOGGER.info("Action canceld by user!");
});
cemuInstallAlert.showAndWait();
Alert alert2 = new Alert(AlertType.CONFIRMATION); // new alert with file-chooser
alert2.setTitle("cemu_UI");
alert2.setHeaderText("rom directory");
alert2.setContentText("please select your rom directory");
Optional<ButtonType> result2 = alert2.showAndWait();
if (result2.get() == ButtonType.OK) {
JFXOkayCancelAlert romDirectoryAlert = new JFXOkayCancelAlert("rom directory",
"please select your rom directory",
"-fx-button-type: RAISED; -fx-background-color: #00a8cc; -fx-text-fill: BLACK;", primaryStage);
romDirectoryAlert.setOkayAction(e -> {
DirectoryChooser directoryChooser = new DirectoryChooser();
File selectedDirectory = directoryChooser.showDialog(primaryStage);
mainWindowController.setRomDirectoryPath(selectedDirectory.getAbsolutePath());
} else {
mainWindowController.setRomDirectoryPath(null);
}
XMLController.setRomDirectoryPath(selectedDirectory.getAbsolutePath());
});
romDirectoryAlert.setCancelAction(e -> {
XMLController.setRomDirectoryPath(null);
LOGGER.info("Action canceld by user!");
});
romDirectoryAlert.showAndWait();
}
private void initActions() {
@ -236,12 +220,6 @@ public class Main extends Application {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, final Number newValue) {
int xPosHelperMax = (int) Math.floor((mainWindowController.getMainAnchorPane().getWidth() - 36) / 217);
// call only if there is enough space for a new row
if (mainWindowController.getOldXPosHelper() != xPosHelperMax) {
mainWindowController.refreshUIData();
}
// if saveTask is already running kill it
if (saveTask != null) saveTask.cancel();
@ -249,7 +227,8 @@ public class Main extends Application {
saveTask = new TimerTask() {
@Override
public void run() {
mainWindowController.saveSettings();
XMLController.setWindowWidth(mainWindowController.getMainAnchorPane().getWidth());
xmlController.saveSettings();
}
};
timer.schedule(saveTask, delayTime);
@ -270,7 +249,8 @@ public class Main extends Application {
saveTask = new TimerTask() {
@Override
public void run() {
mainWindowController.saveSettings();
XMLController.setWindowHeight(mainWindowController.getMainAnchorPane().getHeight());
xmlController.saveSettings();
}
};
timer.schedule(saveTask, delayTime);
@ -299,48 +279,16 @@ public class Main extends Application {
primaryStage.heightProperty().addListener(heightListener);
primaryStage.maximizedProperty().addListener(maximizeListener);
}
public Stage getPrimaryStage() {
return primaryStage;
}
public void setPrimaryStage(Stage primaryStage) {
this.primaryStage = primaryStage;
public static Main getMain() {
return main;
}
public CloudController getCloudController() {
return cloudController;
}
public void setCloudController(CloudController cloudController) {
this.cloudController = cloudController;
}
public AnchorPane getPane() {
return pane;
}
public void setPane(AnchorPane pane) {
this.pane = pane;
}
public File getDirectory() {
return directory;
}
public File getConfigFile() {
return configFile;
}
public File getGamesDBFile() {
return gamesDBFile;
}
public File getReference_gamesFile() {
return reference_gamesFile;
}
public File getPictureCache() {
return pictureCache;
}
}

1515
src/main/java/com/cemu_UI/application/MainWindowController.java
File diff suppressed because it is too large
View File

25
src/main/java/com/cemu_UI/application/playGame.java

@ -1,7 +1,7 @@
/**
* cemu_UI
*
* Copyright 2017-2018 <@Seil0>
* Copyright 2017-2019 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.application;
import java.io.IOException;
@ -26,11 +27,13 @@ import java.time.Instant;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.cemu_UI.controller.CloudController;
import com.cemu_UI.controller.DBController;
import com.cemu_UI.controller.XMLController;
import javafx.application.Platform;
public class playGame extends Thread{
public class playGame extends Thread {
private MainWindowController mainWindowController;
private DBController dbController;
@ -44,7 +47,7 @@ public class playGame extends Thread{
@Override
public void run() {
String selectedGameTitleID = mainWindowController.getSelectedGameTitleID();
String cemuBin = mainWindowController.getCemuPath() + "/Cemu.exe";
String cemuBin = XMLController.getCemuPath() + "/Cemu.exe";
String gameExec = "\"" + mainWindowController.getGameExecutePath() + "\"";
long startTime;
long endTime;
@ -53,18 +56,18 @@ public class playGame extends Thread{
Process p;
Platform.runLater(() -> {
mainWindowController.getMain().getPrimaryStage().setIconified(true); // minimize cemu_UI
mainWindowController.getPrimaryStage().setIconified(true); // minimize cemu_UI
});
startTime = System.currentTimeMillis();
try {
if (System.getProperty("os.name").equals("Linux")) {
if(mainWindowController.isFullscreen()){
if(XMLController.isFullscreen()){
p = new ProcessBuilder("wine", cemuBin, "-f", "-g", gameExec).start();
} else {
p = new ProcessBuilder("wine", cemuBin, "-g", gameExec).start();
}
} else {
if(mainWindowController.isFullscreen()){
if(XMLController.isFullscreen()){
p = new ProcessBuilder(cemuBin, "-f", "-g", gameExec).start();
} else {
p = new ProcessBuilder(cemuBin, "-g", gameExec).start();
@ -85,14 +88,14 @@ public class playGame extends Thread{
} else {
mainWindowController.totalPlaytimeBtn.setText(dbController.getTotalPlaytime(selectedGameTitleID) + " min");
}
mainWindowController.getMain().getPrimaryStage().setIconified(false); // maximize cemu_UI
mainWindowController.getPrimaryStage().setIconified(false); // maximize cemu_UI
});
//sync savegame with cloud service
if (mainWindowController.isCloudSync()) {
mainWindowController.setLastLocalSync(Instant.now().getEpochSecond());
mainWindowController.getMain().getCloudController().sync(mainWindowController.getCloudService(),
mainWindowController.getCemuPath(), mainWindowController.getMain().getDirectory().getPath());
if (XMLController.isCloudSync()) {
XMLController.setLastLocalSync(Instant.now().getEpochSecond());
CloudController.getInstance(mainWindowController).sync(XMLController.getCloudService(),
XMLController.getCemuPath(), XMLController.getDirCemuUIPath());
}
} catch (IOException | InterruptedException e) {

81
src/main/java/com/cemu_UI/controller/CloudController.java

@ -1,7 +1,7 @@
/**
* cemu_UI
*
* Copyright 2017-2018 <@Seil0>
* Copyright 2017-2019 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.controller;
import java.io.File;
@ -32,6 +33,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.cemu_UI.application.MainWindowController;
import com.cemu_UI.datatypes.GlobalDataTypes.CloudService;
import com.cemu_UI.vendorCloudController.GoogleDriveController;
import javafx.application.Platform;
@ -39,20 +41,32 @@ import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
public class CloudController {
public CloudController(MainWindowController mwc) {
this.mwc = mwc;
}
// TODO make singleton
private MainWindowController mwc;
private static CloudController instance = null;
private XMLController xmlController = new XMLController();
private GoogleDriveController googleDriveController = new GoogleDriveController();
private static final Logger LOGGER = LogManager.getLogger(CloudController.class.getName());
public boolean initializeConnection(String cloudService, String cemuDirectory) {
public CloudController(MainWindowController mwc) {
this.mwc = mwc;
}
public static CloudController getInstance(MainWindowController mwc) {
if (instance == null) {
instance = new CloudController(mwc);
}
return instance;
}
public boolean initializeConnection(CloudService cloudService, String cemuDirectory) {
boolean success = false;
LOGGER.info("sartting cloud initialisation ...");
if(cloudService.equals("GoogleDrive")) {
if(cloudService == CloudService.GoogleDrive) {
LOGGER.info("selected service is Google Drive");
try {
googleDriveController.main(cemuDirectory);
@ -63,7 +77,7 @@ public class CloudController {
success = true;
}
if(cloudService.equals("Dropbox")) {
if(cloudService == CloudService.Dropbox) {
LOGGER.info("selected service is Dropbox");
}
LOGGER.info("cloud initialisation done!");
@ -76,7 +90,7 @@ public class CloudController {
* @param cemuDirectory
* @param cemu_UIDirectory
*/
public void sync(String cloudService, String cemuDirectory, String cemu_UIDirectory) {
public void sync(CloudService cloudService, String cemuDirectory, String cemu_UIDirectory) {
// running sync in a new thread, instead of blocking the main thread
Thread thread = new Thread(new Runnable() {
@ -88,61 +102,59 @@ public class CloudController {
mwc.getPlayBtn().setText("syncing...");
});
LOGGER.info("starting synchronization in new thread ...");
// zip the saves folder
File zipFile = zipSavegames(cemu_UIDirectory, cemuDirectory);
// upload the zip
switch (cloudService) {
// use GoogleDriveController
case "GoogleDrive":
case GoogleDrive:
LOGGER.info("using GoogleDriveController");
long lastCloudSync = googleDriveController.getLastCloudSync();
if (!googleDriveController.checkFolder()) {
LOGGER.info("cloud sync folder dosen't exist, creating one!");
googleDriveController.creatFolder();
googleDriveController.uploadZipFile(zipFile);
} else if (mwc.getLastLocalSync() > lastCloudSync) {
} else if (XMLController.getLastLocalSync() > lastCloudSync) {
LOGGER.info("local is new, going to upload zip");
googleDriveController.uploadZipFile(zipFile);
} else if(mwc.getLastLocalSync() < lastCloudSync) {
} else if (XMLController.getLastLocalSync() < lastCloudSync) {
LOGGER.info("cloud is new, going to download zip");
unzipSavegames(cemuDirectory, googleDriveController.downloadZipFile(cemu_UIDirectory));
mwc.setLastLocalSync(lastCloudSync);
XMLController.setLastLocalSync(lastCloudSync);
break;
} else {
LOGGER.info("nothing to do");
break;
}
mwc.setLastLocalSync(Long.parseLong(zipFile.getName().substring(0, zipFile.getName().length()-4))); // set time of last sucessfull sync
XMLController.setLastLocalSync(Long.parseLong(zipFile.getName().substring(0, zipFile.getName().length() - 4))); // set time of last sucessfull sync
break;
case "Dropbox":
case Dropbox:
// do the thing
break;
default:
LOGGER.warn("no cloud vendor found!");
break;
}
zipFile.delete(); // delete zipfile in cem_UI directory
Platform.runLater(() -> {
mwc.getPlayBtn().setText("play");
mwc.getPlayBtn().setDisable(false);
mwc.saveSettings();
xmlController.saveSettings();
});
LOGGER.info("synchronization successful!");
} catch (Exception e) {
LOGGER.error("There was an error during syncronisation! Please open a new issue on the cemu_UI github page:", e);
LOGGER.error(
"There was an error during syncronisation! Please open a new issue on the cemu_UI github page:",
e);
}
}
});
@ -199,28 +211,17 @@ public class CloudController {
}
}
public String getFolderID(String cloudService) {
public String getFolderID(CloudService cloudService) {
String folderID = "";
if (cloudService != null) {
if (cloudService.equals("GoogleDrive")) {
if (cloudService == CloudService.GoogleDrive) {
folderID = googleDriveController.getFolderID();
}
if (cloudService.equals("Dropbox")) {
if (cloudService == CloudService.Dropbox) {
}
}
return folderID;
}
public void setFolderID(String folderID, String cloudService) {
if (cloudService != null) {
if (cloudService.equals("GoogleDrive")) {
googleDriveController.setFolderID(folderID);
}
if (cloudService.equals("Dropbox")) {
}
}
}
}

215
src/main/java/com/cemu_UI/controller/DBController.java

@ -1,7 +1,7 @@
/**
* cemu_UI
*
* Copyright 2017-2018 <@Seil0>
* Copyright 2017-2019 <@Seil0>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.controller;
import java.awt.Graphics2D;
@ -27,6 +28,7 @@ import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
@ -44,95 +46,94 @@ import org.apache.logging.log4j.Logger;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import com.cemu_UI.application.Main;
import com.cemu_UI.application.MainWindowController;
import com.cemu_UI.datatypes.UIROMDataType;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class DBController {
private static DBController instance = null;
private ArrayList<String> entries = new ArrayList<>();
private String DB_PATH_LocalGames;
private String DB_PATH_ReverenceGames;
private Connection connectionLocal = null;
private Connection connectionReverence = null;
private static final Logger LOGGER = LogManager.getLogger(DBController.class.getName());
public DBController(Main main, MainWindowController mainWindowController) {
this.main = main;
this.mainWindowController = mainWindowController;
public DBController() {
}
private Main main;
private MainWindowController mainWindowController;
private ArrayList<String> entries = new ArrayList<>();
private String DB_PATH_localRoms;
private String DB_PATH_games;
private Connection connection = null;
private Connection connectionGames = null;
private static final Logger LOGGER = LogManager.getLogger(DBController.class.getName());
public static DBController getInstance() {
if (instance == null) {
instance = new DBController();
}
return instance;
}
/**
* initialize the sqlite database controller
* load ROM and games database
* load all games
* initialize the {@link DBController} with the database connection check if
* there is a need to create a new database refresh the database
*/
public void init() {
LOGGER.info("<========== starting loading sql ==========>");
loadRomDatabase();
loadGamesDatabase();
initDatabaseConnection();
createRomDatabase();
LOGGER.info("<========== finished loading sql ==========>");
}
/**
* set the path to the localRoms.db file and initialize the connection
* create a new connection to the HomeFlix.db database
* AutoCommit is set to false to prevent some issues, so manual commit is active!
*
* TODO this should be called LocalGames
*/
private void loadRomDatabase() {
if (System.getProperty("os.name").equals("Linux")) {
DB_PATH_localRoms = System.getProperty("user.home") + "/cemu_UI/localRoms.db";
} else {
DB_PATH_localRoms = System.getProperty("user.home") + "\\Documents\\cemu_UI" + "\\" + "localRoms.db";
}
private void initDatabaseConnection() {
DB_PATH_LocalGames = XMLController.getDirCemuUI() + "/localRoms.db";
DB_PATH_ReverenceGames = XMLController.getRference_gamesFile().getAbsolutePath();
try {
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH_localRoms);
connection.setAutoCommit(false); // AutoCommit to false -> manual commit is active
connectionLocal = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH_LocalGames);
connectionLocal.setAutoCommit(false);
connectionReverence = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH_ReverenceGames);
connectionReverence.setAutoCommit(false);
} catch (SQLException e) {
// if the error message is "out of memory", probably no database file is found
LOGGER.error("error while loading the ROM database", e);
// if the error message is "out of memory", it probably means no database file is found
LOGGER.error("error while loading the Local- or ReverenceGames database", e);
}
LOGGER.info("ROM database loaded successfull");
LOGGER.info("Local- and ReverenceGames database loaded successfull");
}
/**
* set the path to the localRoms.db file and initialize the connection
* games.db contains a reverence list to for the automatic detection mode
*/
private void loadGamesDatabase() {
DB_PATH_games = main.getReference_gamesFile().getAbsolutePath();
try {
// create a database connection
connectionGames = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH_games);
connectionGames.setAutoCommit(false); // AutoCommit to false -> manual commit is active
} catch (SQLException e) {
LOGGER.error("error while loading the games database", e);
}
LOGGER.info("games database loaded successfull");
}
/**
* 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
* TODO the local_roms table should be called LocalGames
*/