Merge branch 'develop' of Seil0/cemu_UI into master

This commit is contained in:
Jannik 2019-06-28 17:35:22 +02:00 committed by Gitea
commit 13dd0a0150
25 changed files with 2099 additions and 2155 deletions

View File

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

View File

@ -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

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

66
pom.xml
View File

@ -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>

View File

@ -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());
XMLController.setCemuPath(selectedDirectory.getAbsolutePath());
});
cemuInstallAlert.setCancelAction(e -> {
XMLController.setCemuPath(null);
LOGGER.info("Action canceld by user!");
});
cemuInstallAlert.showAndWait();
} else {
mainWindowController.setCemuPath(null);
}
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);
@ -300,47 +280,15 @@ public class Main extends Application {
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;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -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) {

View File

@ -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;
@ -40,19 +42,31 @@ import net.lingala.zip4j.exception.ZipException;
public class CloudController {
// 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 CloudController(MainWindowController mwc) {
this.mwc = mwc;
}
private MainWindowController mwc;
private GoogleDriveController googleDriveController = new GoogleDriveController();
private static final Logger LOGGER = LogManager.getLogger(CloudController.class.getName());
public static CloudController getInstance(MainWindowController mwc) {
if (instance == null) {
instance = new CloudController(mwc);
}
public boolean initializeConnection(String cloudService, String cemuDirectory) {
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() {
@ -96,7 +110,7 @@ public class CloudController {
switch (cloudService) {
// use GoogleDriveController
case "GoogleDrive":
case GoogleDrive:
LOGGER.info("using GoogleDriveController");
long lastCloudSync = googleDriveController.getLastCloudSync();
@ -104,28 +118,25 @@ public class CloudController {
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;
@ -136,13 +147,14 @@ public class CloudController {
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")) {
}
}
}
}

View File

@ -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 {
public DBController(Main main, MainWindowController mainWindowController) {
this.main = main;
this.mainWindowController = mainWindowController;
}
private Main main;
private MainWindowController mainWindowController;
private static DBController instance = null;
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 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());
/**
* initialize the sqlite database controller
* load ROM and games database
* load all games
*/
public void init() {
LOGGER.info("<========== starting loading sql ==========>");
loadRomDatabase();
loadGamesDatabase();
createRomDatabase();
LOGGER.info("<========== finished loading sql ==========>");
public DBController() {
}
public static DBController getInstance() {
if (instance == null) {
instance = new DBController();
}
return instance;
}
/**
* set the path to the localRoms.db file and initialize the connection
* 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() {
initDatabaseConnection();
createRomDatabase();
}
/**
* 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);
}
LOGGER.info("ROM database loaded successfull");
// 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);
}
/**
* 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("Local- and ReverenceGames database loaded successfull");
}
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
*/
void createRomDatabase() {
try {
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
stmt.executeUpdate("create table if not exists local_roms (title, coverPath, romPath, titleID, productCode, region, lastPlayed, timePlayed)");
connectionLocal.commit();
stmt.close();
connection.commit();
} catch (SQLException e) {
LOGGER.error("error while creating ROM database", e);
LOGGER.error("error while creating local-games database", e);
}
}
/**
* refresh database to contain all (new added) games
*/
public void refreshDataBase() {
LOGGER.info("<========== starting refreshing database ==========>");
entries.clear();
try {
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms");
while (rs.next()) {
entries.add(rs.getString(2));
@ -142,63 +143,80 @@ public class DBController {
} catch (SQLException e) {
LOGGER.error("error while loading ROMs from ROM database, local_roms table", e);
}
if (entries.size() == 0) {
mainWindowController.reloadRoms();
} else {
loadAllGames();
mainWindowController.refreshUIData();
}
LOGGER.info("<========== finished refreshing database ==========>");
}
// add a game to the database
public void addGame(String title, String coverPath, String romPath, String titleID, String productCode, String region, String lastPlayed, String timePlayed) throws SQLException{
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
stmt.executeUpdate("insert into local_roms values ('"+title+"','"+coverPath+"','"+romPath+"','"+titleID+"',"
+ "'"+productCode+"','"+region+"','"+lastPlayed+"','"+timePlayed+"')");
connection.commit();
connectionLocal.commit();
stmt.close();
LOGGER.info("added \""+title+"\" to ROM database");
}
// remove a game from the database
public void removeGame(String titleID) throws SQLException{
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
stmt.executeUpdate("delete from local_roms where titleID = '"+titleID+"'");
connection.commit();
connectionLocal.commit();
stmt.close();
LOGGER.info("removed \""+titleID+"\" from ROM database");
}
//load all ROMs to the mainWindowController
public void loadAllGames(){
LOGGER.info("loading all games on startup into the mainWindowController ...");
/**
* load all games from the database to a ObservableList, order entries by title
* @return a ObservableList that contains all local games from the database
*/
public ObservableList<UIROMDataType> loadAllGames() {
ObservableList<UIROMDataType> games = FXCollections.observableArrayList();
LOGGER.info("loading all local games from the database ...");
try {
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms");
while (rs.next()) {
mainWindowController.addGame(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4));
games.add(new UIROMDataType(rs.getString("romPath"), rs.getString("titleID"), rs.getString("title"),
rs.getString("coverPath")));
}
stmt.close();
rs.close();
}catch (Exception e){
LOGGER.error("error while loading all games into the mainWindowController", e);
}
} catch (Exception e) {
LOGGER.error("error while loading all local games from the database", e);
}
//load a single ROM to the mainWindowController
public void loadSingleGame(String titleID){
LOGGER.info("loading a single game (ID: "+titleID+") into the mainWindowController ...");
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms where titleID = '"+titleID+"'");
while (rs.next()) {
mainWindowController.addGame(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4));
return games;
}
/**
* load one game from the database
* @param titleID the titleID of the game you wish to get
* @return the game you asked for
*/
public UIROMDataType loadSingleGame(String titleID) {
UIROMDataType game = null;
LOGGER.info("loading a single game (ID: {}) from the database ...", titleID);
try {
PreparedStatement ps = connectionLocal.prepareStatement("SELECT * FROM local_roms where titleID = ?");
ps.setString(1, titleID);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
game = new UIROMDataType(rs.getString("romPath"), rs.getString("titleID"), rs.getString("title"),
rs.getString("coverPath"));
}
stmt.close();
rs.close();
ps.close();
}catch (Exception e){
LOGGER.error("error while loading a single game into the mainWindowController", e);
}
return game;
}
/**
@ -209,10 +227,10 @@ public class DBController {
File dir = new File(directory);
File appFile;
String[] extensions = new String[] { "rpx", "jsp" };
File pictureCache = main.getPictureCache();
File pictureCache = XMLController.getPictureCache();
String coverPath;
try {
Statement stmt = connectionGames.createStatement();
Statement stmt = connectionReverence.createStatement();
List<File> files = (List<File>) FileUtils.listFiles(dir, extensions, true);
LOGGER.info("<============================== start loading ROM Directory ==============================>");
LOGGER.info("Getting all .rpx files in " + dir.getCanonicalPath()+" including those in subdirectories");
@ -258,7 +276,7 @@ public class DBController {
* @throws SQLException
*/
private boolean checkAddEntry(String title) throws SQLException{
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
boolean check = false;
ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms WHERE title = '"+title+"';");
while (rs.next()) {
@ -276,15 +294,6 @@ public class DBController {
//LOGGER.info("check if entry removed not done yet!");
}
private static BufferedImage resizeImage(BufferedImage originalImage, int type, int IMG_WIDTH, int IMG_HEIGHT) {
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
return resizedImage;
}
/**
* getting info for a game with titleID
* @param titleID Title-ID of the Game
@ -294,7 +303,7 @@ public class DBController {
String[] gameInfo = new String[4];
LOGGER.info("getting game info for titleID: "+titleID+" ...");
try {
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM local_roms where titleID = '"+titleID+"'");
while (rs.next()) {
gameInfo[0] = rs.getString(1);// title
@ -313,10 +322,10 @@ public class DBController {
public void setGameInfo(String title, String coverPath, String romPath, String titleID){
LOGGER.info("setting game info for titleID: "+titleID+" ...");
try {
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
stmt.executeUpdate("UPDATE local_roms SET title = '" + title + "', coverPath = '" + coverPath + "',"
+ " romPath = '" + romPath + "' WHERE titleID = '"+titleID+"';");
connection.commit();
connectionLocal.commit();
stmt.close();
}catch (Exception e){
LOGGER.error("error while setting game info", e);
@ -325,9 +334,9 @@ public class DBController {
public void setLastPlayed(String titleID){
try{
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
stmt.executeUpdate("UPDATE local_roms SET lastPlayed=date('now') WHERE titleID = '"+titleID+"';");
connection.commit();
connectionLocal.commit();
stmt.close();
}catch(SQLException e){
LOGGER.error("failed to set the last played", e);
@ -337,7 +346,7 @@ public class DBController {
public String getLastPlayed(String titleID){
String lastPlayed = null;
try{
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
ResultSet rs = stmt.executeQuery("SELECT lastPlayed FROM local_roms WHERE titleID = '"+titleID+"';" );
lastPlayed = rs.getString(1);
stmt.close();
@ -350,9 +359,9 @@ public class DBController {
public void setTotalPlaytime(String timePlayed, String titleID){
try{
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
stmt.executeUpdate("UPDATE local_roms SET timePlayed='"+timePlayed+"' WHERE titleID = '"+titleID+"';");
connection.commit();
connectionLocal.commit();
stmt.close();
}catch(SQLException e){
LOGGER.error("failed to set total play time", e);
@ -363,7 +372,7 @@ public class DBController {
public String getTotalPlaytime(String titleID){
String timePlayed = null;
try{
Statement stmt = connection.createStatement();
Statement stmt = connectionLocal.createStatement();
ResultSet rs = stmt.executeQuery("SELECT timePlayed FROM local_roms WHERE titleID = '"+titleID+"';" );
timePlayed = rs.getString(1);
stmt.close();
@ -374,5 +383,13 @@ public class DBController {
return timePlayed;
}
private static BufferedImage resizeImage(BufferedImage originalImage, int type, int IMG_WIDTH, int IMG_HEIGHT) {
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
return resizedImage;
}
}

View File

@ -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.BufferedReader;

View File

@ -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.BufferedReader;
@ -39,21 +40,22 @@ import com.eclipsesource.json.Json;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
import javafx.application.Platform;
public class UpdateController implements Runnable {
private MainWindowController mainWindowController;
private String buildNumber;
private int buildNumber;
private int updateBuildNumber; // tag_name from gitea
private String apiOutput;
private String updateBuildNumber; // tag_name from Github
// private String updateName;
// private String updateChanges;
@SuppressWarnings("unused")
private String updateName;
@SuppressWarnings("unused")
private String updateChanges;
private String browserDownloadUrl; // update download link
private String githubApiRelease = "https://api.github.com/repos/Seil0/cemu_UI/releases/latest";
private String githubApiBeta = "https://api.github.com/repos/Seil0/cemu_UI/releases";
private URL githubApiUrl;
private String giteaApiRelease = "https://git.mosad.xyz/api/v1/repos/Seil0/cemu_UI/releases";
private URL giteaApiUrl;
private boolean useBeta;
private static final Logger LOGGER = LogManager.getLogger(UpdateController.class.getName());
@ -62,7 +64,7 @@ public class UpdateController implements Runnable {
*/
public UpdateController(MainWindowController mwc, String buildNumber, boolean useBeta) {
mainWindowController = mwc;
this.buildNumber = buildNumber;
this.buildNumber = Integer.parseInt(buildNumber);
this.useBeta = useBeta;
}
@ -70,19 +72,13 @@ public class UpdateController implements Runnable {
public void run() {
LOGGER.info("beta:" + useBeta + "; checking for updates ...");
Platform.runLater(() -> {
mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnChecking"));
mainWindowController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnChecking"));
});
try {
giteaApiUrl = new URL(giteaApiRelease);
if (useBeta) {
githubApiUrl = new URL(githubApiBeta);
} else {
githubApiUrl = new URL(githubApiRelease);
}
// URL githubApiUrl = new URL(githubApiRelease);
BufferedReader ina = new BufferedReader(new InputStreamReader(githubApiUrl.openStream()));
BufferedReader ina = new BufferedReader(new InputStreamReader(giteaApiUrl.openStream()));
apiOutput = ina.readLine();
ina.close();
} catch (IOException e) {
@ -91,49 +87,41 @@ public class UpdateController implements Runnable {
});
}
if (useBeta) {
JsonArray objectArray = Json.parse("{\"items\": " + apiOutput + "}").asObject().get("items").asArray();
JsonValue object = objectArray.get(0);
JsonArray objectAssets = object.asObject().get("assets").asArray();
updateBuildNumber = object.asObject().getString("tag_name", "");
// updateName = object.asObject().getString("name", "");
// updateChanges = object.asObject().getString("body", "");
for (JsonValue asset : objectAssets) {
browserDownloadUrl = asset.asObject().getString("browser_download_url", "");
}
} else {
JsonObject object = Json.parse(apiOutput).asObject();
JsonArray objectAssets = Json.parse(apiOutput).asObject().get("assets").asArray();
updateBuildNumber = object.getString("tag_name", "");
// updateName = object.getString("name", "");
// updateChanges = object.getString("body", "");
for (JsonValue asset : objectAssets) {
browserDownloadUrl = asset.asObject().getString("browser_download_url", "");
JsonValue object = objectArray.get(0).asObject(); // set to the latest release as default
JsonObject objectAsset = object.asObject().get("assets").asArray().get(0).asObject();
for(JsonValue objectIt : objectArray) {
// TODO note this will download still the pre-release if there's a more recent stable version
if(objectIt.asObject().getBoolean("prerelease", false) == useBeta) {
// we found the needed release either beta or not
object = objectIt;
objectAsset = objectIt.asObject().get("assets").asArray().get(0).asObject();
break;
}
}
updateBuildNumber = Integer.parseInt(object.asObject().getString("tag_name", ""));
updateName = object.asObject().getString("name", "");
updateChanges = object.asObject().getString("body", "");
LOGGER.info("Build: " + buildNumber + ", Update: " + updateBuildNumber);
// Compares the program BuildNumber with the current BuildNumber if program
// BuildNumber < current BuildNumber then perform a update
int iversion = Integer.parseInt(buildNumber);
int iaktVersion = Integer.parseInt(updateBuildNumber.replace(".", ""));
if (iversion >= iaktVersion) {
/**
* Compare the program BuildNumber with the current BuildNumber
* if buildNumber < updateBuildNumber then perform a update
*/
if (buildNumber >= updateBuildNumber) {
Platform.runLater(() -> {
mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnNoUpdateAvailable"));
mainWindowController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnNoUpdateAvailable"));
});
LOGGER.info("no update available");
} else {
Platform.runLater(() -> {
mainWindowController.getUpdateBtn().setText(mainWindowController.getBundle().getString("updateBtnUpdateAvailable"));
mainWindowController.getUpdateBtn().setText(XMLController.getLocalBundle().getString("updateBtnUpdateAvailable"));
});
LOGGER.info("update available");
browserDownloadUrl = objectAsset.getString("browser_download_url", "");
LOGGER.info("download link: " + browserDownloadUrl);
try {
// open new Http connection, ProgressMonitorInputStream for downloading the data
@ -148,7 +136,7 @@ public class UpdateController implements Runnable {
org.apache.commons.io.FileUtils.copyFile(new File("cemu_UI_update.jar"), new File("cemu_UI.jar"));
org.apache.commons.io.FileUtils.deleteQuietly(new File("cemu_UI_update.jar")); // delete update
new ProcessBuilder("java", "-jar", "cemu_UI.jar").start(); // start the new application
System.exit(0); // finishes itself
System.exit(0); // close the current application
} catch (IOException e) {
Platform.runLater(() -> {
LOGGER.info("could not download update files", e);

View File

@ -0,0 +1,419 @@
/**
* cemu_UI
*
* 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
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.cemu_UI.datatypes.GlobalDataTypes.CloudService;
public class XMLController {
private static final String userHome = System.getProperty("user.home");
private static final String userName = System.getProperty("user.name");
private static final String osName = System.getProperty("os.name");
private static final String osArch = System.getProperty("os.arch");
private static final String osVers = System.getProperty("os.version");
private static final String javaVers = System.getProperty("java.version");
private static final String javaVend = System.getProperty("java.vendor");
private static final String sysLocal = System.getProperty("user.language") + "_" + System.getProperty("user.country");
private static String dirCemuUIPath;
private static File dirCemuUI;
private static File configFile;
private static File gamesDBFile;
private static File reference_gamesFile;
private static File pictureCache;
// user settings
private static String color = "00a8cc";
private static String usrLocal = sysLocal;
private static boolean autoUpdate = false;
private static boolean useBeta = false;
private static boolean fullscreen = false;
private static boolean cloudSync = false;
private static ResourceBundle localBundle = ResourceBundle.getBundle("locals.cemu_UI-Local", Locale.US);
private static String cemuPath;
private static String romDirectoryPath;
private static String folderID;
private static CloudService cloudService;
private static long lastLocalSync;
private static double windowWidth;
private static double windowHeight;
private static final Logger LOGGER = LogManager.getLogger(XMLController.class.getName());
private Properties props = new Properties();
public XMLController() {
if (osName.contains("Windows")) {
dirCemuUIPath = userHome + "/Documents/cemu_UI";
} else {
dirCemuUIPath = userHome + "/cemu_UI";
}
// set the concrete files
dirCemuUI = new File(dirCemuUIPath);
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");
}
/**
* save settings to the config.xml file
*/
public void saveSettings() {
LOGGER.info("saving Settings ...");
try {
props.setProperty("cemuPath", getCemuPath());
props.setProperty("romPath", getRomDirectoryPath());
props.setProperty("color", getColor());
props.setProperty("language", getUsrLocal());
props.setProperty("fullscreen", String.valueOf(isFullscreen()));
props.setProperty("cloudSync", String.valueOf(isCloudSync()));
props.setProperty("autoUpdate", String.valueOf(isAutoUpdate()));
props.setProperty("useBeta", String.valueOf(isUseBeta()));
if (getCloudService() == null) {
props.setProperty("cloudService", "");
props.setProperty("folderID", "");
props.setProperty("lastLocalSync", "");
} else {
props.setProperty("cloudService", getCloudService().toString());
props.setProperty("folderID", getFolderID());
props.setProperty("lastLocalSync", Long.toString(getLastLocalSync()));
}
props.setProperty("windowWidth", Double.toString(getWindowWidth()));
props.setProperty("windowHeight", Double.toString(getWindowHeight()));
OutputStream outputStream = new FileOutputStream(XMLController.getConfigFile()); // new output-stream
props.storeToXML(outputStream, "cemu_UI settings"); // write new .xml
outputStream.close();
LOGGER.info("saving Settings done!");
} catch (IOException e) {
LOGGER.error("an error occured", e);
}
}
/**
* loading saved settings from the config.xml file
* if a value is not present, default is used instead
*/
public void loadSettings() {
LOGGER.info("loading settings ...");
try {
InputStream inputStream = new FileInputStream(XMLController.getConfigFile());
props.loadFromXML(inputStream); // new input-stream from .xml
try {
setCemuPath(props.getProperty("cemuPath"));
} catch (Exception e) {
LOGGER.error("cloud not load cemuPath", e);
setCemuPath("");
}
try {
setRomDirectoryPath(props.getProperty("romPath"));
} catch (Exception e) {
LOGGER.error("could not load romPath", e);
setRomDirectoryPath("");
}
try {
setColor(props.getProperty("color"));
} catch (Exception e) {
LOGGER.error("could not load color value, setting default instead", e);
setColor("00a8cc");
}
if (props.getProperty("language") == null) {
LOGGER.error("cloud not load language, setting default instead");
setUsrLocal("en_US");
} else {
setUsrLocal(props.getProperty("language"));
}
try {
setFullscreen(Boolean.parseBoolean(props.getProperty("fullscreen")));
} catch (Exception e) {
LOGGER.error("could not load fullscreen, setting default instead", e);
setFullscreen(false);
}
try {
setCloudSync(Boolean.parseBoolean(props.getProperty("cloudSync")));
} catch (Exception e) {
LOGGER.error("could not load cloudSync, setting default instead", e);
setCloudSync(false);
}
try {
setAutoUpdate(Boolean.parseBoolean(props.getProperty("autoUpdate")));
} catch (Exception e) {
LOGGER.error("cloud not load autoUpdate", e);
setAutoUpdate(false);
}
try {
setUseBeta(Boolean.parseBoolean(props.getProperty("useBeta")));
} catch (Exception e) {
LOGGER.error("cloud not load autoUpdate", e);
setUseBeta(false);
}
try {
switch (props.getProperty("cloudService")) {
case "GoogleDrive":
setCloudService(CloudService.GoogleDrive);
break;
case "Dropbox":
setCloudService(CloudService.Dropbox);
break;
default:
break;
}
} catch (Exception e) {
LOGGER.error("could not load cloudSync", e);
setCloudService(null);
}
try {
setFolderID(props.getProperty("folderID"));
} catch (Exception e) {
LOGGER.error("could not load folderID, disable cloud sync. Please contact an developer", e);
setCloudSync(false);
}
try {
setLastLocalSync(Long.parseLong(props.getProperty("lastLocalSync")));
} catch (Exception e) {
LOGGER.error("could not load lastSuccessSync, setting default instead", e);
setLastLocalSync(0);
}
try {
setWindowWidth(Double.parseDouble(props.getProperty("windowWidth")));
} catch (Exception e) {
LOGGER.error("could not load windowWidth, setting default instead", e);
setWindowWidth(904);
}
try {
setWindowHeight(Double.parseDouble(props.getProperty("windowHeight")));
} catch (Exception e) {
LOGGER.error("could not load windowHeight, setting default instead", e);
setWindowHeight(600);
}
inputStream.close();
LOGGER.info("loading settings done!");
} catch (IOException e) {
LOGGER.error("an error occured", e);
}
}
// getters for application variables
public static String getUserHome() {
return userHome;
}
public static String getUserName() {
return userName;
}
public static String getOsName() {
return osName;
}
public static String getOsArch() {
return osArch;
}
public static String getOsVers() {
return osVers;
}
public static String getJavaVers() {
return javaVers;
}
public static String getJavaVend() {
return javaVend;
}
public static String getSysLocal() {
return sysLocal;
}
public static String getDirCemuUIPath() {
return dirCemuUIPath;
}
public static File getDirCemuUI() {
return dirCemuUI;
}
public static File getConfigFile() {
return configFile;
}
public static File getGamesDBFile() {
return gamesDBFile;
}
public static File getRference_gamesFile() {
return reference_gamesFile;
}
public static File getPictureCache() {
return pictureCache;
}
// getters & setters for user settings
public static String getColor() {
return color;
}
public static void setColor(String color) {
XMLController.color = color;
}
public static String getUsrLocal() {
return usrLocal;
}
public static void setUsrLocal(String usrLocal) {
XMLController.usrLocal = usrLocal;
}
public static boolean isAutoUpdate() {
return autoUpdate;
}
public static void setAutoUpdate(boolean autoUpdate) {
XMLController.autoUpdate = autoUpdate;
}
public static boolean isUseBeta() {
return useBeta;
}
public static void setUseBeta(boolean useBeta) {
XMLController.useBeta = useBeta;
}
public static boolean isFullscreen() {
return fullscreen;
}
public static void setFullscreen(boolean fullscreen) {
XMLController.fullscreen = fullscreen;
}
public static boolean isCloudSync() {
return cloudSync;
}
public static void setCloudSync(boolean cloudSync) {
XMLController.cloudSync = cloudSync;
}
public static ResourceBundle getLocalBundle() {
return localBundle;
}
public static void setLocalBundle(ResourceBundle localBundle) {
XMLController.localBundle = localBundle;
}
public static String getCemuPath() {
return cemuPath;
}
public static void setCemuPath(String cemuPath) {
XMLController.cemuPath = cemuPath;
}
public static String getRomDirectoryPath() {
return romDirectoryPath;
}
public static void setRomDirectoryPath(String romDirectoryPath) {
XMLController.romDirectoryPath = romDirectoryPath;
}
public static String getFolderID() {
return folderID;
}
public static void setFolderID(String folderID) {
XMLController.folderID = folderID;
}
public static CloudService getCloudService() {
return cloudService;
}
public static void setCloudService(CloudService cloudService) {
XMLController.cloudService = cloudService;
}
public static long getLastLocalSync() {
return lastLocalSync;
}
public static void setLastLocalSync(long lastLocalSync) {
XMLController.lastLocalSync = lastLocalSync;
}
public static double getWindowWidth() {
return windowWidth;
}
public static void setWindowWidth(double windowWidth) {
XMLController.windowWidth = windowWidth;
}
public static double getWindowHeight() {
return windowHeight;
}
public static void setWindowHeight(double windowHeight) {
XMLController.windowHeight = windowHeight;
}
}

View File

@ -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.datatypes;
import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;

View File

@ -0,0 +1,29 @@
/**
* cemu_UI
*
* 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
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.datatypes;
public class GlobalDataTypes {
public enum CloudService {
GoogleDrive, Dropbox
}
}

View File

@ -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.datatypes;
import javafx.beans.property.IntegerProperty;

View File

@ -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,109 +18,114 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.datatypes;
import java.io.File;
import com.jfoenix.controls.JFXButton;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.geometry.Insets;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
public class UIROMDataType {
public class UIROMDataType extends VBox {
private final SimpleObjectProperty<VBox> vBox = new SimpleObjectProperty<>();
private final SimpleObjectProperty<Label> label = new SimpleObjectProperty<>();
private final SimpleObjectProperty<JFXButton> button = new SimpleObjectProperty<>();
private final SimpleObjectProperty<ImageView> imageView = new SimpleObjectProperty<>();
private final StringProperty titleID = new SimpleStringProperty();
private final StringProperty romPath = new SimpleStringProperty();
private String romPath;
private String titleID;
private String name;
private Label label = new Label();
private JFXButton button = new JFXButton();
private ImageView imageView = new ImageView();
/**
* Data type used for UI ROM elements all uiROMElemts are of this data type
*/
public UIROMDataType (final VBox vBox, final Label label, final JFXButton button, final ImageView imageView, final String titleID, final String romPath){
this.vBox.set(vBox);
this.label.set(label);
this.button.set(button);
this.imageView.set(imageView);
this.titleID.set(titleID);
this.romPath.set(romPath);
public UIROMDataType(String romPath, String titleID, String name, String coverPath) {
this();
this.romPath = romPath;
this.titleID = titleID;
this.name = name;
label.setText(name);
imageView.setImage(new Image(new File(coverPath).toURI().toString()));
}
public SimpleObjectProperty<VBox> vBoxProperty(){
return vBox;
public UIROMDataType(String romPath, String titleID, String name, String coverPath, ContextMenu contextMenu) {
this();
this.romPath = romPath;
this.titleID = titleID;
this.name = name;
label.setText(name);
imageView.setImage(new Image(new File(coverPath).toURI().toString()));
button.setContextMenu(contextMenu);
}
public SimpleObjectProperty<Label> labelProperty(){
return label;
public UIROMDataType() {
super.getChildren().addAll(label, button);
label.setMaxWidth(200);
label.setPadding(new Insets(0,0,0,8));
label.setFont(Font.font("System", FontWeight.BOLD, 14));
imageView.setFitHeight(300);
imageView.setFitWidth(200);
button.setStyle("-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 3); ");
button.setGraphic(imageView);
}
public SimpleObjectProperty<JFXButton> buttonProperty(){
return button;
}
public SimpleObjectProperty<ImageView> imageViewProperty(){
return imageView;
}
public StringProperty titleIDProperty(){
return titleID;
}
public StringProperty romPathProperty(){
public String getRomPath() {
return romPath;
}
public final VBox getVBox() {
return vBoxProperty().get();
public String getTitleID() {
return titleID;
}
public final Label getLabel() {
return labelProperty().get();
public String getName() {
return name;
}
public final JFXButton getButton() {
return buttonProperty().get();
public Label getLabel() {
return label;
}
public final ImageView getImageView() {
return imageViewProperty().get();
public JFXButton getButton() {
return button;
}
public final String getTitleID(){
return titleIDProperty().get();
public ImageView getImageView() {
return imageView;
}
public final String getRomPath(){
return romPathProperty().get();
public void setRomPath(String romPath) {
this.romPath = romPath;
}
public final void setVBox(VBox vBox) {
vBoxProperty().set(vBox);
public void setTitleID(String titleID) {
this.titleID = titleID;
}
public final void setLabel(Label label) {
labelProperty().set(label);
public void setName(String name) {
this.name = name;
}
public final void setButton(JFXButton button) {
buttonProperty().set(button);
public void setLabel(Label label) {
this.label = label;
}
public final void setImageView(ImageView imageView) {
imageViewProperty().set(imageView);
public void setButton(JFXButton button) {
this.button = button;
}
public final void setTitleID(String titleID){
titleIDProperty().set(titleID);
public void setImageView(ImageView imageView) {
this.imageView = imageView;
}
public final void setRomPath(String romPath){
romPathProperty().set(romPath);
}
}

View File

@ -0,0 +1,250 @@
/**
* cemu_UI
*
* 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
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.uiElements;
import java.io.File;
import com.cemu_UI.application.MainWindowController;
import com.cemu_UI.controller.XMLController;
import com.jfoenix.controls.JFXAlert;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialogLayout;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class JFXEditGameAlert {
private String headingText;
private String bodyText;
private String title = "";
private String coverPath = "";
private String romPath = "";
private String titleID = "";
private String btnStyle;
private int mode;
private Stage stage;
private MainWindowController mwc; // TODO remove this!
/**
* Creates a new JFoenix Alert to show some information with okay and cancel option
* @param headingText Heading text of the alert
* @param bodyText Content text of the alert
* @param btnStyle Style of the buttons
* @param mode Set to 0 for add and 1 for edit mode
* @param stage Stage to which the Alert belongs
* @param mwc a mwc dep, it's horrible i know
*/
public JFXEditGameAlert(String headingText, String bodyText, String btnStyle, int mode, Stage stage, MainWindowController mwc) {
this.headingText = headingText;
this.bodyText = bodyText;
this.btnStyle = btnStyle;
this.mode = mode;
this.stage = stage;
this.mwc = mwc;
}
public void showAndWait( ) {
JFXAlert<Void> alert = new JFXAlert<>(stage);
TextField gameTitleTF = new TextField();
gameTitleTF.setPromptText(XMLController.getLocalBundle().getString("gameTitle"));
TextField gameTitleIDTF = new TextField();
gameTitleIDTF.setPromptText(XMLController.getLocalBundle().getString("titleID"));
TextField romPathTF = new TextField();
romPathTF.setPromptText(XMLController.getLocalBundle().getString("romPath"));
TextField gameCoverTF = new TextField();
gameCoverTF.setPromptText(XMLController.getLocalBundle().getString("coverPath"));
if (mode == 1) {
gameTitleTF.setText(title);
gameTitleIDTF.setText(titleID);
romPathTF.setText(romPath);
gameCoverTF.setText(coverPath);
gameTitleIDTF.setEditable(false);
}
JFXButton okayBtn = new JFXButton(XMLController.getLocalBundle().getString("okayBtnText"));
okayBtn.setOnAction(event -> {
if (romPathTF.getText().toString().length() == 0 || gameCoverTF.getText().toString().length() == 0
|| gameTitleTF.getText().toString().length() == 0
|| gameTitleIDTF.getText().toString().length() == 0) {
// addGame error dialog
JFXInfoAlert errorDialog = new JFXInfoAlert(
XMLController.getLocalBundle().getString("editGameDialogHeadingTextError"),
XMLController.getLocalBundle().getString("editGameDialogBodyTextError"), btnStyle, stage);
errorDialog.showAndWait();
} else {
switch (mode) {
case 0:
// add-mode title, coverPath, romPath, titleID
mwc.addBtnReturn(gameTitleTF.getText().toString(), gameCoverTF.getText().toString(),
romPathTF.getText().toString(), gameTitleIDTF.getText().toString());
break;
case 1:
// edit mode
mwc.editBtnReturn(gameTitleTF.getText().toString(), gameCoverTF.getText().toString(),
romPathTF.getText().toString(), gameTitleIDTF.getText().toString());
break;
default:
break;
}
alert.close();
}
});
okayBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
okayBtn.setPrefHeight(32);
okayBtn.setStyle(btnStyle);
JFXButton cancelBtn = new JFXButton(XMLController.getLocalBundle().getString("cancelBtnText"));
cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> alert.close());
cancelBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
cancelBtn.setPrefHeight(32);
cancelBtn.setStyle(btnStyle);
JFXButton selectPathBtn = new JFXButton(XMLController.getLocalBundle().getString("editGameDialogSelectPathBtn"));
selectPathBtn.setPrefWidth(110);
selectPathBtn.setStyle(btnStyle);
selectPathBtn.setOnAction(event -> {
FileChooser romDirectoryChooser = new FileChooser();
File romDirectory = romDirectoryChooser.showOpenDialog(stage);
romPathTF.setText(romDirectory.getAbsolutePath());
});
JFXButton selectCoverBtn = new JFXButton(XMLController.getLocalBundle().getString("editGameDialogSelectCoverBtn"));
selectCoverBtn.setPrefWidth(110);
selectCoverBtn.setStyle(btnStyle);
selectCoverBtn.setOnAction(event -> {
FileChooser coverDirectoryChooser = new FileChooser();
File coverDirectory = coverDirectoryChooser.showOpenDialog(stage);
gameCoverTF.setText(coverDirectory.getAbsolutePath());
});
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(15, 10, 10, 10));
grid.add(new Label(XMLController.getLocalBundle().getString("gameTitle") + ":"), 0, 0);
grid.add(gameTitleTF, 1, 0);
grid.add(new Label(XMLController.getLocalBundle().getString("titleID") + ":"), 0, 1);
grid.add(gameTitleIDTF, 1, 1);
grid.add(new Label(XMLController.getLocalBundle().getString("romPath") + ":"), 0, 2);
grid.add(romPathTF, 1, 2);
grid.add(selectPathBtn, 2, 2);
grid.add(new Label(XMLController.getLocalBundle().getString("coverPath") + ":"), 0, 3);
grid.add(gameCoverTF, 1, 3);
grid.add(selectCoverBtn, 2, 3);
VBox vbox = new VBox();
vbox.getChildren().addAll(new Text(bodyText), grid);
JFXDialogLayout content = new JFXDialogLayout();
content.setActions(cancelBtn, okayBtn);
content.setHeading(new Text(headingText));
content.setBody(vbox);
alert.setContent(content);
alert.showAndWait();
}
public String getHeadingText() {
return headingText;
}
public String getBodyText() {
return bodyText;
}
public String getTitle() {
return title;
}
public String getCoverPath() {
return coverPath;
}
public String getRomPath() {
return romPath;
}
public String getTitleID() {
return titleID;
}
public String getBtnStyle() {
return btnStyle;
}
public int getMode() {
return mode;
}
public Stage getStage() {
return stage;
}
public void setHeadingText(String headingText) {
this.headingText = headingText;
}
public void setBodyText(String bodyText) {
this.bodyText = bodyText;
}
public void setTitle(String title) {
this.title = title;
}
public void setCoverPath(String coverPath) {
this.coverPath = coverPath;
}
public void setRomPath(String romPath) {
this.romPath = romPath;
}
public void setTitleID(String titleID) {
this.titleID = titleID;
}
public void setBtnStyle(String btnStyle) {
this.btnStyle = btnStyle;
}
public void setMode(int mode) {
this.mode = mode;
}
public void setStage(Stage stage) {
this.stage = stage;
}
}

View File

@ -1,227 +0,0 @@
/**
* cemu_UI
*
* Copyright 2017-2018 <@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
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.uiElements;
import java.io.File;
import com.cemu_UI.application.MainWindowController;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialog;
import com.jfoenix.controls.JFXDialogLayout;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class JFXEditGameDialog {
private String headingText;
private String bodyText;
private String dialogBtnStyle;
private String title = "";
private String coverPath = "";
private String romPath = "";
private String titleID = "";
private int dialogWidth;
private int dialogHeight;
private int mode;
private Stage stage;
private Pane pane;
private MainWindowController mwc;
/**
* Creates a new JFoenix Dialog to show some information with okay and cancel option
* @param headingText Heading Text, just the heading
* @param bodyText body Text, all other text belongs here
* @param dialogBtnStyle Style of the okay button
* @param dialogWidth dialog width
* @param dialogHeight dialog height
* @param mode set to 0 for add and 1 for edit mode
* @param stage the primary stage
* @param pane pane to which the dialog belongs
*/
public JFXEditGameDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth,
int dialogHeight, int mode, MainWindowController mwc, Stage stage, Pane pane) {
this.headingText = headingText;
this.bodyText = bodyText;
this.dialogBtnStyle = dialogBtnStyle;
this.dialogWidth = dialogWidth;
this.dialogHeight = dialogHeight;
this.mode = mode;
this.mwc = mwc;
this.stage = stage;
this.pane = pane;
}
public void show() {
JFXDialogLayout content = new JFXDialogLayout();
StackPane stackPane = new StackPane();
stackPane.autosize();
JFXDialog dialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true);
TextField gameTitleTF = new TextField();
gameTitleTF.setPromptText(mwc.getBundle().getString("gameTitle"));
TextField gameTitleIDTF = new TextField();
gameTitleIDTF.setPromptText(mwc.getBundle().getString("titleID"));
TextField romPathTF = new TextField();
romPathTF.setPromptText(mwc.getBundle().getString("romPath"));
TextField gameCoverTF = new TextField();
gameCoverTF.setPromptText(mwc.getBundle().getString("coverPath"));
if (mode == 1) {
gameTitleTF.setText(title);
gameTitleIDTF.setText(titleID);
romPathTF.setText(romPath);
gameCoverTF.setText(coverPath);
gameTitleIDTF.setEditable(false);
}
JFXButton okayBtn = new JFXButton(mwc.getBundle().getString("okayBtnText"));
okayBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if (romPathTF.getText().toString().length() == 0 || gameCoverTF.getText().toString().length() == 0
|| gameTitleTF.getText().toString().length() == 0 || gameTitleIDTF.getText().toString().length() == 0) {
// LOGGER.info("No parameter set!");
// addGame error dialog
String headingTextError = mwc.getBundle().getString("editGameDialogHeadingTextError");
String bodyTextError = mwc.getBundle().getString("editGameDialogBodyTextError");
JFXInfoAlert errorDialog = new JFXInfoAlert(headingTextError, bodyTextError, dialogBtnStyle, stage);
errorDialog.showAndWait();
} else {
switch (mode) {
case 0:
// add-mode title, coverPath, romPath, titleID
mwc.addBtnReturn(gameTitleTF.getText().toString(), gameCoverTF.getText().toString(),
romPathTF.getText().toString(), gameTitleIDTF.getText().toString());
dialog.close();
break;
case 1:
// edit mode
mwc.editBtnReturn(gameTitleTF.getText().toString(), gameCoverTF.getText().toString(),
romPathTF.getText().toString(), gameTitleIDTF.getText().toString());
dialog.close();
break;
default:
dialog.close();
break;
}
}
}
});
okayBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
okayBtn.setPrefHeight(32);
okayBtn.setStyle(dialogBtnStyle);
JFXButton cancelBtn = new JFXButton(mwc.getBundle().getString("cancelBtnText"));
cancelBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
dialog.close();
}
});
cancelBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
cancelBtn.setPrefHeight(32);
cancelBtn.setStyle(dialogBtnStyle);
JFXButton selectPathBtn = new JFXButton(mwc.getBundle().getString("editGameDialogSelectPathBtn"));
selectPathBtn.setPrefWidth(110);
selectPathBtn.setStyle(dialogBtnStyle);
selectPathBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
FileChooser romDirectoryChooser = new FileChooser();
File romDirectory = romDirectoryChooser.showOpenDialog(stage);
romPathTF.setText(romDirectory.getAbsolutePath());
}
});
JFXButton selectCoverBtn = new JFXButton(mwc.getBundle().getString("editGameDialogSelectCoverBtn"));
selectCoverBtn.setPrefWidth(110);
selectCoverBtn.setStyle(dialogBtnStyle);
selectCoverBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
FileChooser coverDirectoryChooser = new FileChooser();
File coverDirectory = coverDirectoryChooser.showOpenDialog(stage);
gameCoverTF.setText(coverDirectory.getAbsolutePath());
}
});
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(15, 10, 10, 10));
grid.add(new Label(mwc.getBundle().getString("gameTitle") + ":"), 0, 0);
grid.add(gameTitleTF, 1, 0);
grid.add(new Label(mwc.getBundle().getString("titleID") + ":"), 0, 1);
grid.add(gameTitleIDTF, 1, 1);
grid.add(new Label(mwc.getBundle().getString("romPath") + ":"), 0, 2);
grid.add(romPathTF, 1, 2);
grid.add(selectPathBtn, 2, 2);
grid.add(new Label(mwc.getBundle().getString("coverPath") + ":"), 0, 3);
grid.add(gameCoverTF, 1, 3);
grid.add(selectCoverBtn, 2, 3);
Text bdyText = new Text(bodyText);
VBox vbox = new VBox();
vbox.getChildren().addAll(bdyText, grid);
content.setHeading(new Text(headingText));
content.setBody(vbox);
content.setActions(cancelBtn, okayBtn);
content.setPrefSize(dialogWidth, dialogHeight);
pane.getChildren().add(stackPane);
AnchorPane.setTopAnchor(stackPane, (pane.getHeight()-content.getPrefHeight())/2);
AnchorPane.setLeftAnchor(stackPane, (pane.getWidth()-content.getPrefWidth())/2);
dialog.show();
}
public void setTitle(String title) {
this.title = title;
}
public void setCoverPath(String coverPath) {
this.coverPath = coverPath;
}
public void setRomPath(String romPath) {
this.romPath = romPath;
}
public void setTitleID(String titleID) {
this.titleID = titleID;
}
}

View File

@ -1,7 +1,7 @@
/**
* Kellerkinder Framework Alerts
* cemu_UI
*
* Copyright 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.uiElements;
import com.jfoenix.controls.JFXAlert;
@ -25,7 +26,6 @@ import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialogLayout;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.text.Text;
import javafx.stage.Stage;
@ -41,7 +41,7 @@ public class JFXInfoAlert {
* @param headerText Heading text of the alert
* @param bodyText Content text of the alert
* @param btnStyle Style of the okay button
* @param stage stage to which the dialog belongs
* @param stage Stage to which the Alert belongs
*/
public JFXInfoAlert(String headingText, String bodyText, String btnStyle, Stage stage) {
setHeadingText(headingText);
@ -58,12 +58,7 @@ public class JFXInfoAlert {
JFXAlert<Void> alert = new JFXAlert<>(stage);
JFXButton button = new JFXButton("Okay");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
alert.close();
}
});
button.addEventHandler(ActionEvent.ACTION, (e)-> alert.close());
button.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
button.setPrefHeight(32);
button.setStyle(btnStyle);

View File

@ -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,90 +18,94 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.uiElements;
import java.util.ResourceBundle;
import com.cemu_UI.controller.XMLController;
import com.jfoenix.controls.JFXAlert;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialog;
import com.jfoenix.controls.JFXDialogLayout;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class JFXOkayCancelDialog {
public class JFXOkayCancelAlert {
private String headingText;
private String bodyText;
private String dialogBtnStyle;
private String okayText;
private String cancelText;
private int dialogWidth;
private int dialogHeight;
private String btnStyle;
private Stage stage;
private EventHandler<ActionEvent> okayAction;
private EventHandler<ActionEvent> cancelAction;
private Pane pane;
private String okayText = XMLController.getLocalBundle().getString("okayBtnText");
private String cancelText = XMLController.getLocalBundle().getString("cancelBtnText");
/**
* Creates a new JFoenix Dialog to show some information with okay and cancel option
* @param headingText Heading Text, just the heading
* @param bodyText body Text, all other text belongs here
* @param dialogBtnStyle Style of the okay button
* @param dialogWidth dialog width
* @param dialogHeight dialog height
* @param okayAction action which is performed if the okay button is clicked
* @param cancelAction action which is performed if the cancel button is clicked
* @param pane pane to which the dialog belongs
*
* @param headingText Heading text of the alert
* @param bodyText Content text of the alert
* @param btnStyle Style of the buttons
* @param stage Stage to which the Alert belongs
*/
public JFXOkayCancelDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth,
int dialogHeight, EventHandler<ActionEvent> okayAction, EventHandler<ActionEvent> cancelAction, Pane pane,
ResourceBundle bundle) {
this.headingText = headingText;
this.bodyText = bodyText;
this.dialogBtnStyle = dialogBtnStyle;
this.dialogWidth = dialogWidth;
this.dialogHeight = dialogHeight;
this.okayAction = okayAction;
this.cancelAction = cancelAction;
this.pane = pane;
okayText = bundle.getString("okayBtnText");
cancelText = bundle.getString("cancelBtnText");
public JFXOkayCancelAlert(String headingText, String bodyText, String btnStyle, Stage stage) {
setHeadingText(headingText);
setBodyText(bodyText);
setBtnStyle(btnStyle);
setStage(stage);
}
public void show() {
public void showAndWait( ) {
JFXAlert<Void> alert = new JFXAlert<>(stage);
JFXDialogLayout content = new JFXDialogLayout();
content.setHeading(new Text(headingText));
content.setBody(new Text(bodyText));
StackPane stackPane = new StackPane();
stackPane.autosize();
JFXDialog dialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true);
JFXButton okayBtn = new JFXButton(okayText);
okayBtn.addEventHandler(ActionEvent.ACTION, (e)-> {
dialog.close();
});
okayBtn.addEventHandler(ActionEvent.ACTION, (e)-> alert.close());
okayBtn.addEventHandler(ActionEvent.ACTION, okayAction);
okayBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
okayBtn.setPrefHeight(32);
okayBtn.setStyle(dialogBtnStyle);
okayBtn.setStyle(btnStyle);
JFXButton cancelBtn = new JFXButton(cancelText);
cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> {
dialog.close();
});
cancelBtn.addEventHandler(ActionEvent.ACTION, (e)-> alert.close());
cancelBtn.addEventHandler(ActionEvent.ACTION, cancelAction);
cancelBtn.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
cancelBtn.setPrefHeight(32);
cancelBtn.setStyle(dialogBtnStyle);
cancelBtn.setStyle(btnStyle);
JFXDialogLayout content = new JFXDialogLayout();
content.setActions(cancelBtn, okayBtn);
content.setPrefSize(dialogWidth, dialogHeight);
pane.getChildren().add(stackPane);
AnchorPane.setTopAnchor(stackPane, (pane.getHeight()-content.getPrefHeight())/2);
AnchorPane.setLeftAnchor(stackPane, (pane.getWidth()-content.getPrefWidth())/2);
dialog.show();
content.setHeading(new Text(headingText));
content.setBody(new Text(bodyText));
alert.setContent(content);
alert.showAndWait();
}
public String getHeadingText() {
return headingText;
}
public void setHeadingText(String headingText) {
this.headingText = headingText;
}
public String getBodyText() {
return bodyText;
}
public void setBodyText(String bodyText) {
this.bodyText = bodyText;
}
public String getBtnStyle() {
return btnStyle;
}
public void setBtnStyle(String btnStyle) {
this.btnStyle = btnStyle;
}
public String getOkayText() {
@ -120,6 +124,14 @@ public class JFXOkayCancelDialog {
this.cancelText = cancelText;
}
public Stage getStage() {
return stage;
}
public void setStage(Stage stage) {
this.stage = stage;
}
public EventHandler<ActionEvent> getOkayAction() {
return okayAction;
}
@ -137,4 +149,3 @@ public class JFXOkayCancelDialog {
}
}

View File

@ -0,0 +1,104 @@
/**
* cemu_UI
*
* 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
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.uiElements;
import com.jfoenix.controls.JFXAlert;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialogLayout;
import com.jfoenix.controls.JFXTextArea;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class JFXTextAreaAlert {
private String headingText;
private String textAreaText;
private String btnStyle;
private Stage stage;
/**
* Creates a new JFoenix Alert to show some information on a TextArea
* @param headingText Heading text of the alert
* @param textAreaText Content text of the alert
* @param btnStyle Style of the okay button
* @param stage Stage to which the Alert belongs
*/
public JFXTextAreaAlert(String headingText, String textAreaText, String btnStyle, Stage stage) {
setHeadingText(headingText);
setTextAreaText(textAreaText);
setBtnStyle(btnStyle);
setStage(stage);
}
public void showAndWait( ) {
JFXAlert<Void> alert = new JFXAlert<>(stage);
JFXTextArea textArea = new JFXTextArea(textAreaText);
textArea.setMinWidth(450);
JFXButton button = new JFXButton("Okay");
button.setOnAction(event -> alert.close());
button.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
button.setPrefHeight(32);
button.setStyle(btnStyle);
JFXDialogLayout content = new JFXDialogLayout();
content.setActions(button);
content.setHeading(new Text(headingText));
content.setBody(textArea);
alert.setContent(content);
alert.showAndWait();
}
public String getHeadingText() {
return headingText;
}
public String getTextAreaText() {
return textAreaText;
}
public String getBtnStyle() {
return btnStyle;
}
public Stage getStage() {
return stage;
}
public void setHeadingText(String headingText) {
this.headingText = headingText;
}
public void setTextAreaText(String textAreaText) {
this.textAreaText = textAreaText;
}
public void setBtnStyle(String btnStyle) {
this.btnStyle = btnStyle;
}
public void setStage(Stage stage) {
this.stage = stage;
}
}

View File

@ -1,97 +0,0 @@
/**
* cemu_UI
*
* Copyright 2017-2018 <@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
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.cemu_UI.uiElements;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialog;
import com.jfoenix.controls.JFXDialogLayout;
import com.jfoenix.controls.JFXTextArea;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
public class JFXTextAreaInfoDialog {
private String headingText;
private String bodyText;
private String dialogBtnStyle;
private int dialogWidth;
private int dialogHeight;
private JFXTextArea textArea;
private Pane pane;
/**
* Creates a new JFoenix Dialog to show some information
* @param headingText Heading Text, just the heading
* @param bodyText body Text, all other text belongs here
* @param dialogBtnStyle Style of the okay button
* @param dialogWidth dialog width
* @param dialogHeight dialog height
* @param pane pane to which the dialog belongs
*/
public JFXTextAreaInfoDialog(String headingText, String bodyText, String dialogBtnStyle, int dialogWidth, int dialogHeight, Pane pane) {
this.headingText = headingText;
this.bodyText = bodyText;
this.dialogBtnStyle = dialogBtnStyle;
this.dialogWidth = dialogWidth;
this.dialogHeight = dialogHeight;
this.pane = pane;
}
public void show() {
textArea = new JFXTextArea(bodyText);
JFXDialogLayout content = new JFXDialogLayout();
content.setHeading(new Text(headingText));
content.setBody(textArea);
content.setPrefSize(dialogWidth, dialogHeight);
StackPane stackPane = new StackPane();
stackPane.autosize();
JFXDialog dialog = new JFXDialog(stackPane, content, JFXDialog.DialogTransition.LEFT, true);
JFXButton button = new JFXButton("Okay");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
dialog.close();
}
});
button.setButtonType(com.jfoenix.controls.JFXButton.ButtonType.RAISED);
button.setPrefHeight(32);
button.setStyle(dialogBtnStyle);
content.setActions(button);
pane.getChildren().add(stackPane);
AnchorPane.setTopAnchor(stackPane, (pane.getHeight() - content.getPrefHeight()) / 2);
AnchorPane.setLeftAnchor(stackPane, (pane.getWidth() - content.getPrefWidth()) / 2);
dialog.show();
}
public JFXTextArea getTextArea() {
return textArea;
}
public void setTextArea(JFXTextArea textArea) {
this.textArea = textArea;
}
}

View File

@ -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.vendorCloudController;
import java.io.FileOutputStream;
@ -29,6 +30,7 @@ import java.util.Collections;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.cemu_UI.controller.XMLController;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
@ -50,7 +52,7 @@ import com.google.api.services.drive.model.FileList;
public class GoogleDriveController {
Drive service;
private String folderID;
private String folderID = XMLController.getFolderID();
private File downloadFile;
private static final Logger LOGGER = LogManager.getLogger(GoogleDriveController.class.getName());
@ -77,7 +79,7 @@ public class GoogleDriveController {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
folderID = "";
folderID = ""; // TODO why do we do this?
} catch (Throwable t) {
LOGGER.error("error", t);
System.exit(1);
@ -86,6 +88,7 @@ public class GoogleDriveController {
/**
* Creates an authorized Credential object.
*
* @return an authorized Credential object.
* @throws IOException
*/
@ -93,10 +96,8 @@ public class GoogleDriveController {
// Load client secrets.
InputStream in = getClass().getClassLoader().getResourceAsStream("client_secret.json");
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY,
clientSecrets, SCOPES).setDataStoreFactory(DATA_STORE_FACTORY).setAccessType("offline").build();
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
LOGGER.info("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
@ -105,14 +106,13 @@ public class GoogleDriveController {
/**
* Build and return an authorized Drive client service.
*
* @return an authorized Drive client service
* @throws IOException
*/
public Drive getDriveService() throws IOException {
Credential credential = authorize();
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
}
public void main(String cemuDirectory) throws IOException {
@ -211,7 +211,7 @@ public class GoogleDriveController {
try {
LOGGER.info("FolderID: " + files.getFiles().get(0).getId());
setFolderID(files.getFiles().get(0).getId());
folderID = files.getFiles().get(0).getId();
} catch (Exception e) {
LOGGER.error("Oops, something went wrong! It seems that you have more than one folder called 'cemu_savegames'!", e);
}
@ -221,8 +221,4 @@ public class GoogleDriveController {
return folderID;
}
public void setFolderID(String folderID) {
this.folderID = folderID;
}
}

View File

@ -1,6 +1,8 @@
/*
* HAMBURGER CSS
*/
/*******************************************************************************
* *
* Hamburger Menu *
* *
******************************************************************************/
.jfx-hamburgerW StackPane {
-fx-background-color: white;
@ -12,9 +14,11 @@
-fx-background-radius: 5px;
}
/*
* TREE TABLE CSS
*/
/*******************************************************************************
* *
* TreeTable *
* *
******************************************************************************/
.tree-table-view {
-fx-tree-table-color: rgba(0, 168, 204, 0.2);
@ -84,10 +88,11 @@
-fx-padding: 1; /* 0.083333em; */
}
/*
* ChoiceBox
*/
/*******************************************************************************
* *
* ChoiceBox *
* *
******************************************************************************/
.choice-box {
-fx-background-color: transparent;
@ -109,10 +114,109 @@
-fx-background-color: #00A8CC;
}
/*
* Spinner
*/
/*******************************************************************************
* *
* Spinner *
* *
******************************************************************************/
.spinner {
-fx-background-color: #f4f4f4;
}
/*******************************************************************************
* *
* ScrollBar *
* *
******************************************************************************/
.scroll-bar:vertical, .scroll-bar:horizontal {
-fx-background-color: transparent;
}
.scroll-bar:vertical > .track-background, .scroll-bar:horizontal > .track-background {
-fx-background-color: transparent;
-fx-background-insets: 0.0;
}
.scroll-bar:vertical > .thumb {
-fx-background-color: #BCBCBC;
-fx-background-insets: 0.0;
-fx-background-radius: 15.0;
}
.scroll-bar:horizontal > .thumb {
-fx-background-color: #FFFFFF;
-fx-background-insets: 0.0;
-fx-background-radius: 15.0;
}
/* Up- and Down-Button Padding */
.scroll-bar:vertical > .increment-button, .scroll-bar:vertical > .decrement-button {
-fx-padding: 5 2 5 2;
}
/* Left- and Right-Button Padding */
.scroll-bar:horizontal > .increment-button, .scroll-bar:horizontal > .decrement-button {
-fx-background-color: transparent;
-fx-padding: 5 2 5 2;
}
.scroll-bar > .increment-button, .scroll-bar > .decrement-button, .scroll-bar:hover > .increment-button, .scroll-bar:hover > .decrement-button {
-fx-background-color: transparent;
}
.scroll-bar > .increment-button > .increment-arrow, .scroll-bar > .decrement-button > .decrement-arrow {
-fx-background-color: rgb(150.0, 150.0, 150.0);
}
/* Up Arrow */
.scroll-bar:vertical > .increment-button > .increment-arrow {
-fx-shape: "M298 426h428l-214 214z";
}
/* Down Arrow */
.scroll-bar:vertical > .decrement-button > .decrement-arrow {
-fx-shape: "M298 598l214-214 214 214h-428z";
}
/* Right Arrow */
.scroll-bar:horizontal > .increment-button > .increment-arrow {
/* -fx-shape: "M0 428l0 -428l214 214l-214 214z"; */
-fx-background-color:transparent;
-fx-shape: " ";
-fx-padding: 0;
}
/* Left Arrow */
.scroll-bar:horizontal > .decrement-button > .decrement-arrow {
/* -fx-shape: "M214 0l0 428l-214 -214l214 -214z"; */
-fx-background-color:transparent;
-fx-shape: " ";
-fx-padding: 0;
}
/*******************************************************************************
* *
* ScrollPane *
* *
******************************************************************************/
.scroll-pane {
-fx-background-insets: 0;
-fx-padding: 0;
}
.scroll-pane:focused {
-fx-background-insets: 0;
}
.scroll-pane .corner {
-fx-background-insets: 0;
}
.scroll-pane > .viewport {
-fx-background-color: transparent;
}

View File

@ -13,56 +13,24 @@
<?import javafx.scene.control.Separator?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.FlowPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.TextFlow?>
<AnchorPane fx:id="mainAnchorPane" minHeight="405.0" minWidth="260.0" prefHeight="600.0" prefWidth="904.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1">
<AnchorPane fx:id="mainAnchorPane" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="1130.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<ScrollPane fx:id="mainScrollPane" fitToWidth="true" layoutY="38.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
<content>
<AnchorPane fx:id="gamesAnchorPane">
<FlowPane fx:id="gamesFlowPane" hgap="3.0" vgap="7.0">
<padding>
<Insets bottom="17.0" />
</padding></AnchorPane>
</padding>
</FlowPane>
</content>
</ScrollPane>
<HBox fx:id="topHBox" prefHeight="38.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<JFXHamburger fx:id="menuHam" prefHeight="38.0" prefWidth="38.0" stylesheets="@../css/MainWindows.css" />
</children>
</HBox>
<VBox fx:id="sideMenuVBox" layoutY="32.0" prefHeight="568.0" prefWidth="175.0" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="38.0">
<children>
<JFXButton fx:id="aboutBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="190.0" onAction="#aboutBtnAction" prefHeight="38.0" prefWidth="190.0" text="About" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="settingsBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="213.0" onAction="#settingsBtnAction" prefHeight="38.0" prefWidth="213.0" text="Settings" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="addBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="193.0" onAction="#addBtnAction" prefHeight="38.0" prefWidth="193.0" text="Add new Game" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="reloadRomsBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="199.0" onAction="#reloadRomsBtnAction" prefHeight="38.0" prefWidth="199.0" text="reload roms" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="smmdbBtn" alignment="TOP_LEFT" onAction="#smmdbBtnAction" prefHeight="38.0" prefWidth="216.0" text="smmdb">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
</children>
</VBox>
<ScrollPane fx:id="settingsScrollPane" prefHeight="562.0" prefWidth="729.0" style="-fx-background: white;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="175.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
<ScrollPane fx:id="settingsScrollPane" fitToHeight="true" fitToWidth="true" prefHeight="562.0" prefWidth="729.0" style="-fx-background: white;" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="175.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="38.0">
<content>
<!-- space between settings sections 35px, between sections elements (label + element) 20px, between label and element 3px(or more) -->
<AnchorPane fx:id="settingsAnchorPane" prefHeight="686.0" prefWidth="711.0" style="-fx-background-color: white;">
@ -71,7 +39,7 @@
<children>
<VBox prefHeight="485.0" prefWidth="710.0" spacing="25.0">
<children>
<VBox prefHeight="21.0" prefWidth="676.0">
<VBox>
<children>
<Label fx:id="cemu_UISettingsLbl" text="cemu_UI Settings">
<font>
@ -223,5 +191,39 @@
<JFXButton fx:id="lastTimePlayedBtn" buttonType="RAISED" maxHeight="32.0" maxWidth="156.0" minHeight="32.0" minWidth="156.0" onAction="#lastTimePlayedBtnAction" style="-fx-background-color: #ffffff; -fx-button-type: RAISED; -fx-text-fill: BLACK;" text="Last played, never" />
</children>
</HBox>
<HBox fx:id="topHBox" prefHeight="38.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<JFXHamburger fx:id="menuHam" prefHeight="38.0" prefWidth="38.0" stylesheets="@../css/MainWindows.css" />
</children>
</HBox>
<VBox fx:id="sideMenuVBox" layoutY="32.0" prefHeight="568.0" prefWidth="175.0" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="38.0">
<children>
<JFXButton fx:id="aboutBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="190.0" onAction="#aboutBtnAction" prefHeight="38.0" prefWidth="190.0" text="About" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="settingsBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="213.0" onAction="#settingsBtnAction" prefHeight="38.0" prefWidth="213.0" text="Settings" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="addBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="193.0" onAction="#addBtnAction" prefHeight="38.0" prefWidth="193.0" text="Add new Game" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="reloadRomsBtn" alignment="TOP_LEFT" maxHeight="38.0" maxWidth="199.0" onAction="#reloadRomsBtnAction" prefHeight="38.0" prefWidth="199.0" text="reload roms" textAlignment="LEFT">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
<JFXButton fx:id="smmdbBtn" alignment="TOP_LEFT" onAction="#smmdbBtnAction" prefHeight="38.0" prefWidth="216.0" text="smmdb">
<font>
<Font name="System Bold" size="14.0" />
</font>
</JFXButton>
</children>
</VBox>
</children>
</AnchorPane>

View File

@ -18,10 +18,10 @@ fullscreenToggleBtn = start game in fullscreen
cemu_UISettingsLbl = cemu_UI Settings
cemuDirectoryLbl = cemu directory
romDirectoryLbl = ROM directory
mainColorLbl = main color
languageLbl = language
updateLbl = updates
branchLbl = branch
mainColorLbl = primary color
languageLbl = Language
updateLbl = Updates
branchLbl = Branch
cemuSettingsLbl = cemu Settings
licensesLbl = Licenses