mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-21 18:59:15 +01:00
Improve caching
Thanks to Oddx. I just tested his changes, fixed some issues and then refactored code.
This commit is contained in:
parent
1d582f97c2
commit
8ab03c4bf9
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Adresár neexistuje!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Vynutit PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Vynutit PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID hry"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Název hry [IdHry]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Hry"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Obnovit hudbu na pozadí"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Spouštec kanálu"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Odinstalace"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "Cache BNR Filer"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "Sti til Cache BNR Filer"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Cache titler"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "Devolution's loader.bin filen kunne ikke loades."
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Mappen eksisterer ikke!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr "Disk"
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "Disk 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Tving PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Tving PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Tving Titler fra Disk"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "Tving Widescreen"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "GameCube Spil Slet"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "GameCube Installations Menu"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr "Sti til Spil Header Cache filer"
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Spil-ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "GameCube Kilde"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Spilnavn [SPILID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Spil"
|
||||
|
||||
@ -1848,8 +1851,8 @@ msgstr "Nulstil Alle Spilindstillinger"
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Nulstil BG-musik"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgstr "Nulstil Spilheader Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Nulstil spiltæller"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Titel-starter"
|
||||
msgid "Titles Path"
|
||||
msgstr "Titler Sti"
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Titler fra GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr "Titler Fra"
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "For at køre GameCube spil fra Disken skal du sætte GameCube-tilstanden til MIOS i spilindstillingerne."
|
||||
@ -2280,9 +2283,6 @@ msgstr "USBloaderGX kunne ikke skrive en Nintendont config fil. Vil du starte Ni
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr "USBloaderGX r1218 kræves for Nintendont Alpha v0.1. Opdater venligst din Nintendont boot.dol version."
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr "Brug Game Header Cache"
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Afinstallér"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "Cache BNR Bestanden"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "Cache BNR Bestandspad"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Titels cachen"
|
||||
|
||||
@ -639,11 +642,14 @@ msgstr "Devolution's loader.bin bestand kan niet worden geladen."
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Map bestaat niet!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 2"
|
||||
msgstr "Disc 2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc Artwork Download"
|
||||
msgstr "Download disk labels"
|
||||
@ -1011,9 +1017,6 @@ msgstr "Forceer PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Forceer PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Forceer titels van Disk"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "Forceer Breedbeeld"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "GameCube Spel Verwijderen"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "GameCube Installatie Menu"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Spel ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "GameCube Bron"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Spelnaam [SPELID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Spellen"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Reset achtergrond muziek"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Titel Launcher"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Titels van GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr "Titels Van"
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "Om GameCube spellen vanaf disk te spelen moet je de GameCube modus op MIOS zetten in de spel instellingen."
|
||||
@ -2280,9 +2283,6 @@ msgstr "USBLoaderGX kon Nintendont config bestand niet schrijven. Nintendont toc
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr ""
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr ""
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr ""
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr ""
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Peli ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Pelejä"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Nimilaukaisin"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Poista"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "Fichiers BNR en cache"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "Dossier de cache BNR"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Titres en cache"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "Le fichier loader.bin de Devolution n'a pu être chargé."
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Répertoire inexistant!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr "Disque"
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "Disque 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Forcer PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Forcer PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Forcer charg. titres du disque"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "Forcer 16:9"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "Menu de suppression GameCube"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "Menu d'installation GameCube"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID du jeu"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "Source GameCube"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "NomJeu [IDJEU]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Jeux"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Fond sonore par defaut"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Menu Chaînes"
|
||||
msgid "Titles Path"
|
||||
msgstr "Dossier titres"
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Titres de GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr "Titres de"
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "Pour lancer les jeux GameCube à partir du disque vous devez placer le Mode GameCube sur MIOS dans les paramètres du jeu."
|
||||
@ -2280,9 +2283,6 @@ msgstr "USBLoaderGX n'a pas pu créer le fichier de configuration de Nintendont.
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr "Nintendont Alpha v0.1 ne fonctionne qu'avec USBLoaderGX r1218. Veuillez mettre à jour votre version de Nintendont."
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Désinstaller"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "BNR-Cache"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "Cache BNR Dateien"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Titel cachen"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "Devolution's loader.bin Datei kann nicht geladen werden."
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Verzeichnis existiert nicht!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr "Disk"
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "Disk 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "PAL50 erzw."
|
||||
msgid "Force PAL60"
|
||||
msgstr "PAL60 erzw."
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Erzwinge DVD-Titel"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "Erzwinge Widescreen"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "GameCube Spiele Löschen"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "GameCube Installationsmenü"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Spiel ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "GameCube Quelle"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Spielname [SPIELID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Spiele"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Musik zurücksetzen"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Channel Launcher"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Namen aus der WiiTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "Um GameCube Spiele von DVD zu starten, muss der GameCube Modus in den Spieleinstellungen auf MIOS gesetzt werden."
|
||||
@ -2280,9 +2283,6 @@ msgstr "USBLoaderGX konnte die Nintendont config Dateien nicht ändern. Nintendo
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr "USBLoaderGX r1218 wird benötigt um Nintendont Alpha v0.1 starten zu können. Bitte aktualisiere deine Nintendont Version."
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Deinstallieren"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "αποθήκευση αρχείων BNR"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "αποθήκευση τοποθεσίας αρχείων BNR"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Αποθήκευση τίτλων"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "Το αρχείο loader.bin του devolution δεν φορτώθηκε
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Ο φάκελος δεν υπάρχει!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Επιβολή PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Επιβολή PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Επιβολή ονόματος από το ίδιο το παιχνίδι"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "Διαγραφή παιχνιδιών GameCube"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "menu εγκατάστασης παιχνιδιών GameCube"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID παιχνιδιού"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "όνομα παιχνιδιού [κωδικόςπαιχνιδιού]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Παιχνίδια"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Επαναφορά μουσικής υπόκρουσης."
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Εκκινητής τίτλων"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Τίτλοι από το GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "Για αναπαραγωγή τίτλων Gamecube από τους αυθεντικούς δίσκους τους, πρέπει να ορίσετε την επιλογή GameCube σε ΜΙΟS, στις ρυθμίσεις κάθε τίτλου."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Απεγκατάσταση"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "A könyvtár nem létezik!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Játék ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Játékok"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Programindító"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
|
@ -344,6 +344,9 @@ msgstr "Cache file BNR"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "Percorso cache file BNR"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Cache titoli"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "Impossibile caricare il file loader.bin di Devolution."
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Il percorso non esiste!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "Disco 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Forza PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Forza PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Forza titolo da disco"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "Forza Widescreen"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "Menu disinstallazioni GC"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "Menu installazioni GC"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID gioco"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "Sorgente GameCube"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Nomegioco [IDGIOCO]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Giochi"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Ripristina musica sottofondo"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Avvia titoli"
|
||||
msgid "Titles Path"
|
||||
msgstr "Percorso titoli"
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Titoli da GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr "Titoli da"
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "Per avviare i giochi GameCube da disco devi impostare la modalità Gamecube su MIOS nelle impostazioni del gioco."
|
||||
|
@ -344,6 +344,9 @@ msgstr "BNRファイルをキャッシュ"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "BNRファイルキャッシュ"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "ゲーム名のキャッシュ"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "Devolutionのloader.binが読み込めません"
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "フォルダがありません"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "PAL50に強制"
|
||||
msgid "Force PAL60"
|
||||
msgstr "PAL60に強制"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "ディスク内のゲーム名に強制"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "GCゲームの削除"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "GCインストールメニュー"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "IDのみ"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "ゲーム名 [ゲームID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "ゲーム"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "BGMをリセット"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "ランチャー"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "ゲーム名の日本語化"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "GCゲームをディスク起動するには設定でGCモードをMIOSにしてください"
|
||||
|
@ -344,6 +344,9 @@ msgstr "BNR 파일 캐쉬"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "BNR 파일 경로 캐쉬"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr "캐시 경로"
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "타이틀 캐쉬"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "데볼루션의 loader.bin 파일을 로드 할 수 없습니다."
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "디렉토리가 존재하지 않습니다!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr "디스크"
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "디스크 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "강제 PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "강제 PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "디스크에서 강제 타이틀"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "강제 와이드스크린"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "게임큐브 게임 삭제"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "게임큐브 설치 메뉴"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr "게임 헤더 캐시 파일 경로"
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "게임 ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "게임큐브 소스"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "게임이름 [게임ID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "게임"
|
||||
|
||||
@ -1848,8 +1851,8 @@ msgstr "모든 게임 설정 재설정"
|
||||
msgid "Reset BG Music"
|
||||
msgstr "배경 음악 리셋"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgstr "게임 헤더 캐시 리셋"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr "캐시된 타이틀 재설정"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "실행 횟수 리셋"
|
||||
@ -2185,8 +2188,8 @@ msgstr "타이틀 실행기"
|
||||
msgid "Titles Path"
|
||||
msgstr "타이틀 경로"
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "GameTDB의 타이틀"
|
||||
msgid "Titles From"
|
||||
msgstr "제목 출처"
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "디스크에서 게임큐브 게임을 실행하려면 게임 설정에서 게임큐브 모드를 MIOS로 설정해야 합니다."
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Cache titler"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Mappe finnes ikke!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Tving PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Tving PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Spill ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Spillnavn [SPILLID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Spill"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Tilbakestill BG musikk"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Tittel Laster"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr ""
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Katalog nie istnieje!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID gry"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Liczba gier"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Uruchom tytul"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Odinstaluj"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "Cache de Banners"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "Caminho Cache"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Títulos em Cache"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "O arquivo loader.bin do Devolution não pode ser lido"
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Pasta não existe!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "Disco 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Forçar PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Forçar PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Carregar Nome de Disco"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "Desinstalar Jogos GameCube"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "Instalar Jogos GameCube"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID do Jogo"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "Pasta de Jogos"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Nome Jogo [IDJOGO]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Jogos"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Música padrão"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Gestor de Títulos"
|
||||
msgid "Titles Path"
|
||||
msgstr "Pasta Títulos"
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Títulos do GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr "Títulos do"
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "Para rodar jogos de GameCube em disco, você precisa definir o modo de GameCube para MIOS nas configurações do jogo"
|
||||
@ -2280,9 +2283,6 @@ msgstr "USB Loader GX não conseguiu gravar configurações do Nintendont. Rodar
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr "USB Loader GX r1218 é exigido para usar o Nintendont Alpha v0.1. Atualize sua versão do Nintendont"
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Desinstalar"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Títulos em Cache"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Pasta não existe!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Forçar PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Forçar PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID do Jogo"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "Nome Jogo [IDJOGO]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Jogos"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Reinicializar Música de Fundo"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Gestor de Títulos"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Títulos do GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr "Títulos do"
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr ""
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr ""
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Каталог не существует!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID игры"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Игры"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Загрузчик тайтла"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Деинсталлировать"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "缓存 BNR 文件"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "缓存 BNR 文件路径"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "缓存游戏标题"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "无法加载 Devolution 的 loader.bin。"
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "目录不存在!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "光盘 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "强制 PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "强制 PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "强制从光盘读取标题"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "强制宽屏"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "GameCube 游戏删除"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "GameCube 安装菜单"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "游戏 ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "GameCube 来源"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "游戏名 [GAMEID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "游戏"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "重置背景音乐"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "系统频道"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "从 GameTDB 读取标题"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "想要加载光盘上的 GameCube 游戏,请将游戏设置中的 GameCube 模式设置为 MIOS。"
|
||||
@ -2280,9 +2283,6 @@ msgstr "USBloaderGX不能写Nintendont设置文件,是否运行Nintendont?"
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr "USBloaderGX r1218之针对nintendont Alpha v0.1,请更新你的Nintendont boot。dol版本。"
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "删除"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "Caché de archivos BNR"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "Caché de archivos BNR"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "Caché de Títulos"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "No se pudo cargar el loader.bin de Devolution."
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "¡La carpeta no existe!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "Disco 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "Forzar PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "Forzar PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "Forzar títulos del disco"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr "Forzar 16:9"
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "Borrar juego de GameCube"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "Menú de instalación GameCube"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr "Ruta del caché de Headers"
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "ID de Juego"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "Origen GameCube"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "NombreJuego [IDJUEGO]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Juegos"
|
||||
|
||||
@ -1848,8 +1851,8 @@ msgstr "Reiniciar configuración de juegos"
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Reiniciar Música de Fondo"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgstr "Reiniciar caché de Headers"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Reiniciar Partidas"
|
||||
@ -2185,8 +2188,8 @@ msgstr "Lanzador de Canales"
|
||||
msgid "Titles Path"
|
||||
msgstr "Ruta de títulos"
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "Títulos GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "Para cargar juegos de GameCube desde Disco debes configurar el modo GameCube a MIOS."
|
||||
@ -2280,9 +2283,6 @@ msgstr "No se pudo escribir la configuración de Nintendont, ¿continuar de toda
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr "Se necesita la versión r1218 para Nintendont Alpha 0.1. Por favor, actualiza el boot.dol de Nintendont."
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr "Usar caché de encabezado de juego"
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Desinstalar"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Katalog existerar inte!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Spel-ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Spel"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "återställ BG musik"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Titel startare"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Avinstallera"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr "緩衝頻道動畫檔案"
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr "緩衝頻道動畫檔案路徑"
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr "遊戲標題緩衝"
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr "Devolution的loader.bin檔無法載入。"
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "目錄不存在"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr "光碟 1"
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr "強制 PAL50"
|
||||
msgid "Force PAL60"
|
||||
msgstr "強制 PAL60"
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr "強制從光碟顯示標題"
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr "GameCube 遊戲刪除"
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr "GameCube 安裝畫面"
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "遊戲 ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr "GameCube 來源"
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr "遊戲名稱 [GAMEID]"
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "遊戲數量"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr "重設背景音樂"
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,8 +2188,8 @@ msgstr "系統頻道"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgstr "從GameTDB顯示遊戲名稱"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
msgstr "用光碟執行GameCube遊戲,你需在遊戲設定中設定GameCube 模式為MIOS。"
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "移除"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "ไม่พบไดเรคทอรี่นี้ !"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "เกมส์ ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "เกมส์"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Title Launcher"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "ถอนการติดตั้ง"
|
||||
|
||||
|
@ -344,6 +344,9 @@ msgstr ""
|
||||
msgid "Cache BNR Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cache Titles"
|
||||
msgstr ""
|
||||
|
||||
@ -639,6 +642,9 @@ msgstr ""
|
||||
msgid "Directory does not exist!"
|
||||
msgstr "Klasör bulunamadı!"
|
||||
|
||||
msgid "Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disc 1"
|
||||
msgstr ""
|
||||
|
||||
@ -1011,9 +1017,6 @@ msgstr ""
|
||||
msgid "Force PAL60"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Titles from Disc"
|
||||
msgstr ""
|
||||
|
||||
msgid "Force Widescreen"
|
||||
msgstr ""
|
||||
|
||||
@ -1104,9 +1107,6 @@ msgstr ""
|
||||
msgid "GameCube Install Menu"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game Header Cache Files Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Game ID"
|
||||
msgstr "Oyun ID"
|
||||
|
||||
@ -1167,6 +1167,9 @@ msgstr ""
|
||||
msgid "Gamename [GAMEID]"
|
||||
msgstr ""
|
||||
|
||||
msgid "GameTDB"
|
||||
msgstr ""
|
||||
|
||||
msgid "Games"
|
||||
msgstr "Oyunlar"
|
||||
|
||||
@ -1848,7 +1851,7 @@ msgstr ""
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Game Header Cache"
|
||||
msgid "Reset Cached Titles"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
@ -2185,7 +2188,7 @@ msgstr "Başlık Başlatıcı"
|
||||
msgid "Titles Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Titles from GameTDB"
|
||||
msgid "Titles From"
|
||||
msgstr ""
|
||||
|
||||
msgid "To run GameCube games from Disc you need to set the GameCube mode to MIOS in the game settings."
|
||||
@ -2280,9 +2283,6 @@ msgstr ""
|
||||
msgid "USBloaderGX r1218 is required for Nintendont Alpha v0.1. Please update your Nintendont boot.dol version."
|
||||
msgstr ""
|
||||
|
||||
msgid "Use Game Header Cache"
|
||||
msgstr ""
|
||||
|
||||
msgid "Uninstall"
|
||||
msgstr "Kaldır"
|
||||
|
||||
|
@ -58,8 +58,23 @@ typedef struct _dolheader
|
||||
|
||||
Channels *Channels::instance = NULL;
|
||||
|
||||
void Channels::GetEmuChannelList()
|
||||
void Channels::clear()
|
||||
{
|
||||
EmuChannels.clear();
|
||||
//! Clear memory of the vector completely
|
||||
std::vector<struct discHdr>().swap(EmuChannels);
|
||||
}
|
||||
|
||||
void Channels::GetEmuChannelList(bool use_cache)
|
||||
{
|
||||
if (use_cache && Settings.CacheTitles && isCacheFile(EMUNAND_HEADER_CACHE_FILE))
|
||||
{
|
||||
if (EmuChannels.empty())
|
||||
LoadGameHeaderCache(EmuChannels);
|
||||
if (!EmuChannels.empty())
|
||||
return;
|
||||
}
|
||||
|
||||
EmuChannels.clear();
|
||||
|
||||
char filepath[1024];
|
||||
@ -73,6 +88,9 @@ void Channels::GetEmuChannelList()
|
||||
|
||||
snprintf(filepath, sizeof(filepath), "%s/title/00010002", Settings.NandEmuChanPath);
|
||||
ParseTitleDir(filepath, language);
|
||||
|
||||
if (Settings.CacheTitles)
|
||||
SaveGameHeaderCache(EmuChannels);
|
||||
}
|
||||
|
||||
void Channels::GetChannelList()
|
||||
@ -111,16 +129,8 @@ void Channels::InternalGetNandChannelList(u32 type)
|
||||
if (tid == 0x000100014c554c5aLL || tid == 0x00010001AF1BF516LL || tid == 0x0001000148415858LL)
|
||||
strcpy(id, "JODI");
|
||||
|
||||
const char *name = GameTitles.GetTitle(id);
|
||||
std::string TitleName;
|
||||
|
||||
if (!name || *name == '\0')
|
||||
{
|
||||
name = NandTitles.NameOf(tid);
|
||||
// Set title for caching
|
||||
if (name)
|
||||
GameTitles.SetGameTitle(id, name);
|
||||
}
|
||||
std::string TitleName(NandTitles.NameOf(tid));
|
||||
TitleName.erase(0, TitleName.find_first_not_of(' '));
|
||||
|
||||
int s = NandChannels.size();
|
||||
NandChannels.resize(s + 1);
|
||||
@ -128,7 +138,7 @@ void Channels::InternalGetNandChannelList(u32 type)
|
||||
memcpy(NandChannels[s].id, id, 4);
|
||||
NandChannels[s].tid = tid;
|
||||
NandChannels[s].type = TYPE_GAME_NANDCHAN;
|
||||
strncpy(NandChannels[s].title, name ? name : "", sizeof(NandChannels[s].title) - 1);
|
||||
strncpy(NandChannels[s].title, TitleName.c_str(), sizeof(NandChannels[s].title) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,19 +152,8 @@ std::vector<struct discHdr> &Channels::GetNandHeaders(void)
|
||||
|
||||
std::vector<struct discHdr> &Channels::GetEmuHeaders(void)
|
||||
{
|
||||
if (Settings.UseGameHeaderCache && isCacheFile(EMUNAND_HEADER_CACHE_FILE))
|
||||
{
|
||||
if (EmuChannels.empty())
|
||||
LoadGameHeaderCache(EmuChannels);
|
||||
if (!EmuChannels.empty())
|
||||
return EmuChannels;
|
||||
}
|
||||
|
||||
if (EmuChannels.empty())
|
||||
this->GetEmuChannelList();
|
||||
|
||||
if (Settings.UseGameHeaderCache && !EmuChannels.empty())
|
||||
SaveGameHeaderCache(EmuChannels);
|
||||
this->GetEmuChannelList(true);
|
||||
|
||||
return EmuChannels;
|
||||
}
|
||||
|
@ -43,7 +43,8 @@ public:
|
||||
static u8 *GetOpeningBnr(const u64 &title, u32 *outsize, const char *pathPrefix);
|
||||
|
||||
void GetChannelList();
|
||||
void GetEmuChannelList();
|
||||
void GetEmuChannelList(bool use_cache = false);
|
||||
void clear();
|
||||
std::vector<struct discHdr> & GetNandHeaders(void);
|
||||
std::vector<struct discHdr> & GetEmuHeaders(void);
|
||||
private:
|
||||
|
@ -37,9 +37,9 @@
|
||||
#include "utils/StringTools.h"
|
||||
#include "DirList.h"
|
||||
|
||||
DirList::DirList(const char * path, const char *filter, u32 flags)
|
||||
DirList::DirList(const char * path, const char *filter, u32 flags, s32 max_depth)
|
||||
{
|
||||
this->LoadPath(path, filter, flags);
|
||||
this->LoadPath(path, filter, flags, max_depth);
|
||||
this->SortList();
|
||||
}
|
||||
|
||||
@ -48,16 +48,16 @@ DirList::~DirList()
|
||||
ClearList();
|
||||
}
|
||||
|
||||
bool DirList::LoadPath(const char * folder, const char *filter, u32 flags)
|
||||
bool DirList::LoadPath(const char * folder, const char *filter, u32 flags, s32 max_depth)
|
||||
{
|
||||
if(!folder) return false;
|
||||
|
||||
std::string folderpath(folder);
|
||||
|
||||
return LoadPath(folderpath, filter, flags);
|
||||
return LoadPath(folderpath, filter, flags, max_depth);
|
||||
}
|
||||
|
||||
bool DirList::LoadPath(std::string &folderpath, const char *filter, u32 flags)
|
||||
bool DirList::LoadPath(std::string &folderpath, const char *filter, u32 flags, s32 max_depth)
|
||||
{
|
||||
if(folderpath.size() < 3)
|
||||
return false;
|
||||
@ -103,12 +103,12 @@ bool DirList::LoadPath(std::string &folderpath, const char *filter, u32 flags)
|
||||
if(strcmp(filename,".") == 0 || strcmp(filename,"..") == 0)
|
||||
continue;
|
||||
|
||||
if(flags & CheckSubfolders)
|
||||
if((flags & CheckSubfolders) && (max_depth != 0))
|
||||
{
|
||||
int length = folderpath.size();
|
||||
if(!isRoot) folderpath += '/';
|
||||
folderpath += filename;
|
||||
LoadPath(folderpath, filter, flags);
|
||||
LoadPath(folderpath, filter, flags, max_depth - 1);
|
||||
folderpath.erase(length);
|
||||
}
|
||||
|
||||
|
@ -47,12 +47,12 @@ class DirList
|
||||
//!\param path Path from where to load the filelist of all files
|
||||
//!\param filter A fileext that needs to be filtered
|
||||
//!\param flags search/filter flags from the enum
|
||||
DirList(const char * path, const char *filter = NULL, u32 flags = Files | Dirs);
|
||||
DirList(const char * path, const char *filter = NULL, u32 flags = Files | Dirs, s32 max_depth = -1);
|
||||
//!Destructor
|
||||
~DirList();
|
||||
//! Load all the files from a directory
|
||||
bool LoadPath(const char * path, const char *filter = NULL, u32 flags = Files | Dirs);
|
||||
bool LoadPath(std::string &path, const char *filter = NULL, u32 flags = Files | Dirs);
|
||||
bool LoadPath(const char * path, const char *filter = NULL, u32 flags = Files | Dirs, s32 max_depth = -1);
|
||||
bool LoadPath(std::string &path, const char *filter = NULL, u32 flags = Files | Dirs, s32 max_depth = -1);
|
||||
//! Get a filename of the list
|
||||
//!\param list index
|
||||
const char * GetFilename(int index);
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include "language/gettext.h"
|
||||
#include "DirList.h"
|
||||
#include "fileops.h"
|
||||
#include "gecko.h"
|
||||
|
||||
#define BLOCKSIZE 70*1024 //70KB
|
||||
#define VectorResize(List) if(List.capacity()-List.size() == 0) List.reserve(List.size()+100)
|
||||
@ -453,7 +452,6 @@ extern "C" bool RemoveDirectory(const char *path)
|
||||
ShowProgress(tr("Deleting directories..."), dir.GetFilename(i), 0, done, fileCount, false, false);
|
||||
rmdir(dir.GetFilepath(i));
|
||||
done++;
|
||||
gprintf("%s\n", dir.GetFilepath(i));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,6 +58,19 @@ const char *GCGames::GetPath(const char *gameID) const
|
||||
return "";
|
||||
}
|
||||
|
||||
void GCGames::clear()
|
||||
{
|
||||
PathList.clear();
|
||||
HeaderList.clear();
|
||||
sdGCList.clear();
|
||||
sdGCPathList.clear();
|
||||
//! Clear memory of the vector completely
|
||||
std::vector<std::string>().swap(PathList);
|
||||
std::vector<struct discHdr>().swap(HeaderList);
|
||||
std::vector<struct discHdr>().swap(sdGCList);
|
||||
std::vector<std::string>().swap(sdGCPathList);
|
||||
}
|
||||
|
||||
void GCGames::LoadGameList(const std::string &path, std::vector<struct discHdr> &headerList, std::vector<std::string> &pathList)
|
||||
{
|
||||
struct discHdr tmpHdr;
|
||||
@ -65,7 +78,7 @@ void GCGames::LoadGameList(const std::string &path, std::vector<struct discHdr>
|
||||
u8 id[8];
|
||||
u8 disc_number = 0;
|
||||
char fpath[1024];
|
||||
char fname_title[64];
|
||||
char fname_title[130];
|
||||
DIR *dir_iter;
|
||||
struct dirent *dirent;
|
||||
|
||||
@ -174,19 +187,21 @@ void GCGames::LoadGameList(const std::string &path, std::vector<struct discHdr>
|
||||
}
|
||||
}
|
||||
|
||||
// if we have titles.txt entry use that
|
||||
const char *title = GameTitles.GetTitle(id);
|
||||
std::string title = "";
|
||||
if (Settings.TitlesType == TITLETYPE_FORCED_DISC && GameTitles.GetTitleType((const char *)id) == TITLETYPE_FORCED_DISC)
|
||||
title.assign(GameTitles.GetTitle((const char *)id));
|
||||
|
||||
// if no titles.txt get title from dir or file name
|
||||
if (strlen(title) == 0 && !Settings.ForceDiscTitles && strlen(fname_title) > 0)
|
||||
title = fname_title;
|
||||
if (title.length() == 0 && Settings.TitlesType != TITLETYPE_FORCED_DISC && strlen(fname_title) > 0)
|
||||
title.assign(fname_title);
|
||||
|
||||
if (*id != 0 && strlen(title) > 0)
|
||||
title.erase(0, title.find_first_not_of(' '));
|
||||
|
||||
if (*id != 0 && title.length() > 0 && title.length() < 64)
|
||||
{
|
||||
std::string gamePath = std::string(path) + dirname + (extracted ? "/" : strrchr(fpath, '/'));
|
||||
memset(&tmpHdr, 0, sizeof(tmpHdr));
|
||||
memcpy(tmpHdr.id, id, sizeof(tmpHdr.id));
|
||||
snprintf(tmpHdr.title, sizeof(tmpHdr.title), "%s", title);
|
||||
snprintf(tmpHdr.title, sizeof(tmpHdr.title), "%s", title.c_str());
|
||||
tmpHdr.magic = GCGames::MAGIC;
|
||||
tmpHdr.type = extracted ? TYPE_GAME_GC_EXTRACTED : TYPE_GAME_GC_IMG;
|
||||
tmpHdr.disc_no = disc_number;
|
||||
@ -209,11 +224,14 @@ void GCGames::LoadGameList(const std::string &path, std::vector<struct discHdr>
|
||||
std::string gamePath = std::string(path) + dirname + (extracted ? "/" : strrchr(fpath, '/'));
|
||||
tmpHdr.magic = tmpHdr.gc_magic;
|
||||
tmpHdr.type = extracted ? TYPE_GAME_GC_EXTRACTED : TYPE_GAME_GC_IMG;
|
||||
title.assign(tmpHdr.title);
|
||||
title.erase(0, title.find_first_not_of(' '));
|
||||
snprintf(tmpHdr.title, sizeof(tmpHdr.title), "%s", title.c_str());
|
||||
headerList.push_back(tmpHdr);
|
||||
pathList.push_back(gamePath);
|
||||
|
||||
// Save title for next start
|
||||
GameTitles.SetGameTitle(tmpHdr.id, tmpHdr.title);
|
||||
if (Settings.TitlesType == TITLETYPE_FORCED_DISC && GameTitles.GetTitleType((const char *)tmpHdr.id) != TITLETYPE_MANUAL_OVERRIDE)
|
||||
GameTitles.SetGameTitle((const char *)tmpHdr.id, tmpHdr.title, TITLETYPE_FORCED_DISC);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -221,14 +239,14 @@ void GCGames::LoadGameList(const std::string &path, std::vector<struct discHdr>
|
||||
closedir(dir_iter);
|
||||
}
|
||||
|
||||
u32 GCGames::LoadAllGames(void)
|
||||
u32 GCGames::LoadAllGames(bool use_cache)
|
||||
{
|
||||
if (Settings.UseGameHeaderCache && isCacheFile(GAMECUBE_HEADER_CACHE_FILE))
|
||||
if (use_cache && Settings.CacheTitles && isCacheFile(GAMECUBE_HEADER_CACHE_FILE))
|
||||
{
|
||||
if (HeaderList.empty() && PathList.empty())
|
||||
LoadGameHeaderCache(HeaderList, PathList);
|
||||
if (!HeaderList.empty())
|
||||
return (int)HeaderList.size();
|
||||
return HeaderList.size();
|
||||
}
|
||||
|
||||
PathList.clear();
|
||||
@ -282,7 +300,10 @@ u32 GCGames::LoadAllGames(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (Settings.UseGameHeaderCache && !HeaderList.empty() && !PathList.empty())
|
||||
if (HeaderList.size() > 0 || sdGCList.size() > 0)
|
||||
GameTitles.SortTitleList();
|
||||
|
||||
if (Settings.CacheTitles)
|
||||
SaveGameHeaderCache(HeaderList, PathList);
|
||||
|
||||
return HeaderList.size();
|
||||
|
@ -36,9 +36,10 @@ public:
|
||||
|
||||
static u8 *GetOpeningBnr(const char *gameID);
|
||||
|
||||
u32 LoadAllGames(void);
|
||||
u32 LoadAllGames(bool use_cache = false);
|
||||
|
||||
void LoadGameList(const std::string &path, std::vector<struct discHdr> &headerList, std::vector<std::string> &pathList);
|
||||
void clear();
|
||||
|
||||
bool RemoveGame(const char *gameID);
|
||||
bool RemoveSDGame(const char *gameID);
|
||||
@ -48,7 +49,8 @@ public:
|
||||
|
||||
std::vector<struct discHdr> & GetHeaders(void)
|
||||
{
|
||||
LoadAllGames();
|
||||
if (HeaderList.empty())
|
||||
LoadAllGames(true);
|
||||
|
||||
return HeaderList;
|
||||
}
|
||||
|
@ -270,8 +270,7 @@ int StartUpProcess::Execute(bool quickGameBoot)
|
||||
gprintf("\tLoading game settings...%s\n", GameSettings.Load(Settings.ConfigPath) ? "done" : "failed");
|
||||
gprintf("\tLoading game statistics...%s\n", GameStatistics.Load(Settings.ConfigPath) ? "done" : "failed");
|
||||
gprintf("\tLoading game categories...%s\n", GameCategories.Load(Settings.ConfigPath) ? "done" : "failed");
|
||||
if (Settings.CacheTitles)
|
||||
gprintf("\tLoading cached titles...%s\n", GameTitles.ReadCachedTitles(Settings.titlestxt_path) ? "done" : "failed (using default)");
|
||||
gprintf("\tLoading cached titles...%s\n", GameTitles.ReadCachedTitles(Settings.titlestxt_path) ? "done" : "failed (using default)");
|
||||
|
||||
// Some settings need to be enabled to boot directly into games
|
||||
gprintf("Quick game boot: %s\n", quickGameBoot ? "yes" : "no");
|
||||
|
447
source/cache/cache.cpp
vendored
447
source/cache/cache.cpp
vendored
@ -1,9 +1,9 @@
|
||||
/*
|
||||
Code by Oddx @ GBAtemp.net
|
||||
Loosely based on emuNAND caching by geoGolem.
|
||||
Code by Oddx @ GBAtemp.net
|
||||
*/
|
||||
#include <fstream>
|
||||
#include <dirent.h>
|
||||
#include <zlib.h>
|
||||
|
||||
#include "cache.hpp"
|
||||
#include "usbloader/disc.h"
|
||||
@ -13,326 +13,253 @@
|
||||
#include "Channels/channels.h"
|
||||
#include "usbloader/GameList.h"
|
||||
#include "GameCube/GCGames.h"
|
||||
#include "FileOperations/DirList.h"
|
||||
#include "wad/nandtitle.h"
|
||||
#include "Controls/DeviceHandler.hpp"
|
||||
#include "gecko.h"
|
||||
|
||||
void ResetGameHeaderCache()
|
||||
{
|
||||
RemoveDirectory(Settings.GameHeaderCachePath);
|
||||
return;
|
||||
RemoveDirectory(Settings.GameHeaderCachePath);
|
||||
}
|
||||
|
||||
// emuNAND
|
||||
void GetDirectoryList(const char *path, std::string &list)
|
||||
{
|
||||
DirList dir(path, 0, DirList::Files | DirList::Dirs);
|
||||
for (int i = 0; i < dir.GetFilecount(); ++i)
|
||||
list.append(dir.GetFilepath(i));
|
||||
}
|
||||
|
||||
|
||||
void GetListWBFS(std::string &list)
|
||||
{
|
||||
char drive[11];
|
||||
int portPart;
|
||||
u16 partitions = DeviceHandler::GetUSBPartitionCount();
|
||||
for (u16 i = 0; i < partitions; ++i)
|
||||
{
|
||||
PartitionHandle *usb = DeviceHandler::Instance()->GetUSBHandleFromPartition(i);
|
||||
if (!usb)
|
||||
continue;
|
||||
portPart = DeviceHandler::PartitionToPortPartition(i);
|
||||
snprintf(drive, sizeof(drive), "%s:/wbfs", usb->MountName(portPart));
|
||||
gprintf("Partition: %d - %s\n", i, drive);
|
||||
GetDirectoryList(drive, list);
|
||||
}
|
||||
}
|
||||
|
||||
bool isCacheCurrent()
|
||||
{
|
||||
if (!Settings.CacheTitles)
|
||||
return true;
|
||||
|
||||
char filepath[256] = {};
|
||||
std::string list;
|
||||
|
||||
// GameCube
|
||||
snprintf(filepath, sizeof(filepath), "%s", Settings.GameCubePath);
|
||||
GetDirectoryList(filepath, list);
|
||||
snprintf(filepath, sizeof(filepath), "%s", Settings.GameCubeSDPath);
|
||||
GetDirectoryList(filepath, list);
|
||||
|
||||
// Wii
|
||||
GetListWBFS(list);
|
||||
|
||||
// EmuNAND
|
||||
snprintf(filepath, sizeof(filepath), "%s/title/00010001", Settings.NandEmuChanPath);
|
||||
GetDirectoryList(filepath, list);
|
||||
snprintf(filepath, sizeof(filepath), "%s/title/00010002", Settings.NandEmuChanPath);
|
||||
GetDirectoryList(filepath, list);
|
||||
snprintf(filepath, sizeof(filepath), "%s/title/00010004", Settings.NandEmuChanPath);
|
||||
GetDirectoryList(filepath, list);
|
||||
|
||||
// NAND
|
||||
u32 types[3] = {0x00010001, 0x00010002, 0x00010004};
|
||||
for (u32 i = 0; i < 3; ++i)
|
||||
{
|
||||
u32 num_titles = NandTitles.SetType(types[i]);
|
||||
for (u32 x = 0; x < num_titles; ++x)
|
||||
{
|
||||
u64 tid = NandTitles.Next();
|
||||
if (!tid)
|
||||
break;
|
||||
snprintf(filepath, sizeof(filepath), "%016llx", tid);
|
||||
list.append(filepath);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate a CRC-32 hash
|
||||
u32 crc = crc32(0L, Z_NULL, 0);
|
||||
crc = crc32(crc, (u8 *)list.c_str(), list.length());
|
||||
|
||||
if (Settings.CacheCheckCRC == crc)
|
||||
return true;
|
||||
gprintf("Resetting cache\n");
|
||||
Settings.CacheCheckCRC = crc;
|
||||
return false;
|
||||
}
|
||||
|
||||
// EmuNAND
|
||||
void SaveGameHeaderCache(std::vector<struct discHdr> &list)
|
||||
{
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + EMUNAND_HEADER_CACHE_FILE;
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + EMUNAND_HEADER_CACHE_FILE;
|
||||
if (list.empty())
|
||||
RemoveFile(path.c_str());
|
||||
|
||||
if (!CheckFile(Settings.GameHeaderCachePath))
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "wb");
|
||||
FILE *cache = fopen(path.c_str(), "wb");
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
fwrite((void *)&list[0], 1, list.size() * sizeof(struct discHdr), cache);
|
||||
|
||||
fclose(cache);
|
||||
fwrite((void *)&list[0], 1, list.size() * sizeof(struct discHdr), cache);
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
void LoadGameHeaderCache(std::vector<struct discHdr> &list)
|
||||
{
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + EMUNAND_HEADER_CACHE_FILE;
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + EMUNAND_HEADER_CACHE_FILE;
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "rb");
|
||||
FILE *cache = fopen(path.c_str(), "rb");
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
struct discHdr tmp;
|
||||
fseek(cache, 0, SEEK_END);
|
||||
u64 fileSize = ftell(cache);
|
||||
fseek(cache, 0, SEEK_SET);
|
||||
|
||||
struct discHdr tmp;
|
||||
fseek(cache, 0, SEEK_END);
|
||||
u64 fileSize = ftell(cache);
|
||||
fseek(cache, 0, SEEK_SET);
|
||||
u32 count = (u32)(fileSize / sizeof(struct discHdr));
|
||||
|
||||
u32 count = (u32)(fileSize / sizeof(struct discHdr));
|
||||
list.reserve(count + list.size());
|
||||
for (u32 i = 0; i < count; ++i)
|
||||
{
|
||||
fseek(cache, i * sizeof(struct discHdr), SEEK_SET);
|
||||
fread((void *)&tmp, 1, sizeof(struct discHdr), cache);
|
||||
list.push_back(tmp);
|
||||
}
|
||||
|
||||
list.reserve(count + list.size());
|
||||
for (u32 i = 0; i < count; i++)
|
||||
{
|
||||
fseek(cache, i * sizeof(struct discHdr), SEEK_SET);
|
||||
fread((void *)&tmp, 1, sizeof(struct discHdr), cache);
|
||||
list.push_back(tmp);
|
||||
}
|
||||
|
||||
fclose(cache);
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
// Wii
|
||||
void SaveGameHeaderCache(std::vector<struct discHdr> &list, std::vector<int> &plist)
|
||||
{
|
||||
std::vector<struct wiiCache> wiictmp;
|
||||
struct wiiCache gtmp;
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + WII_HEADER_CACHE_FILE;
|
||||
if (list.empty() || plist.empty())
|
||||
RemoveFile(path.c_str());
|
||||
|
||||
for (u32 i = 0; i < list.size(); ++i)
|
||||
{
|
||||
memset(>mp, 0, sizeof(struct wiiCache));
|
||||
gtmp.header = list[i];
|
||||
gtmp.part = plist[i];
|
||||
wiictmp.push_back(gtmp);
|
||||
}
|
||||
std::vector<struct wiiCache> wiictmp;
|
||||
struct wiiCache gtmp;
|
||||
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + WII_HEADER_CACHE_FILE;
|
||||
for (u32 i = 0; i < list.size(); ++i)
|
||||
{
|
||||
memset(>mp, 0, sizeof(struct wiiCache));
|
||||
gtmp.header = list[i];
|
||||
gtmp.part = plist[i];
|
||||
wiictmp.push_back(gtmp);
|
||||
}
|
||||
|
||||
if (!CheckFile(Settings.GameHeaderCachePath))
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "wb");
|
||||
FILE *cache = fopen(path.c_str(), "wb");
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
fwrite((void *)&wiictmp[0], 1, wiictmp.size() * sizeof(struct wiiCache), cache);
|
||||
|
||||
fclose(cache);
|
||||
fwrite((void *)&wiictmp[0], 1, wiictmp.size() * sizeof(struct wiiCache), cache);
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
void LoadGameHeaderCache(std::vector<struct discHdr> &list, std::vector<int> &plist)
|
||||
{
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + WII_HEADER_CACHE_FILE;
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + WII_HEADER_CACHE_FILE;
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "rb");
|
||||
FILE *cache = fopen(path.c_str(), "rb");
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
struct wiiCache wiictmp;
|
||||
fseek(cache, 0, SEEK_END);
|
||||
u64 fileSize = ftell(cache);
|
||||
fseek(cache, 0, SEEK_SET);
|
||||
|
||||
struct wiiCache wiictmp;
|
||||
fseek(cache, 0, SEEK_END);
|
||||
u64 fileSize = ftell(cache);
|
||||
fseek(cache, 0, SEEK_SET);
|
||||
u32 count = (u32)(fileSize / sizeof(struct wiiCache));
|
||||
|
||||
u32 count = (u32)(fileSize / sizeof(struct wiiCache));
|
||||
list.reserve(count + list.size());
|
||||
plist.reserve(count + plist.size());
|
||||
for (u32 i = 0; i < count; ++i)
|
||||
{
|
||||
fseek(cache, i * sizeof(struct wiiCache), SEEK_SET);
|
||||
fread((void *)&wiictmp, 1, sizeof(struct wiiCache), cache);
|
||||
list.push_back(wiictmp.header);
|
||||
plist.push_back(wiictmp.part);
|
||||
}
|
||||
|
||||
list.reserve(count + list.size());
|
||||
plist.reserve(count + plist.size());
|
||||
for (u32 i = 0; i < count; i++)
|
||||
{
|
||||
fseek(cache, i * sizeof(struct wiiCache), SEEK_SET);
|
||||
fread((void *)&wiictmp, 1, sizeof(struct wiiCache), cache);
|
||||
list.push_back(wiictmp.header);
|
||||
plist.push_back(wiictmp.part);
|
||||
}
|
||||
|
||||
fclose(cache);
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
// GameCube
|
||||
void SaveGameHeaderCache(std::vector<struct discHdr> &list, std::vector<std::string> &plist)
|
||||
{
|
||||
std::vector<struct gcCache> gcctmp;
|
||||
struct gcCache gtmp;
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + GAMECUBE_HEADER_CACHE_FILE;
|
||||
if (list.empty() || plist.empty())
|
||||
RemoveFile(path.c_str());
|
||||
|
||||
for (u32 i = 0; i < list.size(); ++i)
|
||||
{
|
||||
memset(>mp, 0, sizeof(gcCache));
|
||||
gtmp.header = list[i];
|
||||
std::vector<struct gcCache> gcctmp;
|
||||
struct gcCache gtmp;
|
||||
|
||||
strcpy((char *)gtmp.path, plist[i].c_str());
|
||||
for (u32 i = 0; i < list.size(); ++i)
|
||||
{
|
||||
memset(>mp, 0, sizeof(gcCache));
|
||||
gtmp.header = list[i];
|
||||
|
||||
gcctmp.push_back(gtmp);
|
||||
}
|
||||
strcpy((char *)gtmp.path, plist[i].c_str());
|
||||
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + GAMECUBE_HEADER_CACHE_FILE;
|
||||
gcctmp.push_back(gtmp);
|
||||
}
|
||||
|
||||
if (!CheckFile(Settings.GameHeaderCachePath))
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "wb");
|
||||
FILE *cache = fopen(path.c_str(), "wb");
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
fwrite((void *)&gcctmp[0], 1, gcctmp.size() * sizeof(struct gcCache), cache);
|
||||
|
||||
fclose(cache);
|
||||
fwrite((void *)&gcctmp[0], 1, gcctmp.size() * sizeof(struct gcCache), cache);
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
void LoadGameHeaderCache(std::vector<struct discHdr> &list, std::vector<std::string> &plist)
|
||||
{
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + GAMECUBE_HEADER_CACHE_FILE;
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + GAMECUBE_HEADER_CACHE_FILE;
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "rb");
|
||||
FILE *cache = fopen(path.c_str(), "rb");
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
struct gcCache gcctmp;
|
||||
fseek(cache, 0, SEEK_END);
|
||||
u64 fileSize = ftell(cache);
|
||||
fseek(cache, 0, SEEK_SET);
|
||||
|
||||
struct gcCache gcctmp;
|
||||
fseek(cache, 0, SEEK_END);
|
||||
u64 fileSize = ftell(cache);
|
||||
fseek(cache, 0, SEEK_SET);
|
||||
u32 count = (u32)(fileSize / sizeof(struct gcCache));
|
||||
|
||||
u32 count = (u32)(fileSize / sizeof(struct gcCache));
|
||||
list.reserve(count + list.size());
|
||||
plist.reserve(count + plist.size());
|
||||
for (u32 i = 0; i < count; ++i)
|
||||
{
|
||||
fseek(cache, i * sizeof(struct gcCache), SEEK_SET);
|
||||
fread((void *)&gcctmp, 1, sizeof(struct gcCache), cache);
|
||||
list.push_back(gcctmp.header);
|
||||
|
||||
list.reserve(count + list.size());
|
||||
plist.reserve(count + plist.size());
|
||||
for (u32 i = 0; i < count; i++)
|
||||
{
|
||||
fseek(cache, i * sizeof(struct gcCache), SEEK_SET);
|
||||
fread((void *)&gcctmp, 1, sizeof(struct gcCache), cache);
|
||||
list.push_back(gcctmp.header);
|
||||
std::string tmp((char *)gcctmp.path);
|
||||
plist.push_back(tmp);
|
||||
}
|
||||
|
||||
std::string tmp((char *)gcctmp.path);
|
||||
plist.push_back(tmp);
|
||||
}
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
void SaveFilteredListCache(std::vector<struct discHdr *> &list, const wchar_t *gameFilter)
|
||||
{
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + FilteredListCacheFileName(gameFilter);
|
||||
|
||||
if (!CheckFile(Settings.GameHeaderCachePath))
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "wb");
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
std::vector<struct gameHdr> tmplist;
|
||||
struct gameHdr tmp;
|
||||
|
||||
for (u32 i = 0; i < list.size(); ++i)
|
||||
{
|
||||
memcpy(tmp.id, list[i]->id, 6);
|
||||
tmplist.push_back(tmp);
|
||||
}
|
||||
|
||||
fwrite((void *)&tmplist[0], 1, tmplist.size() * sizeof(struct gameHdr), cache);
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
void LoadFilteredListCache(std::vector<struct discHdr *> &list, const wchar_t *gameFilter)
|
||||
{
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + FilteredListCacheFileName(gameFilter);
|
||||
|
||||
if (!CheckFile(Settings.GameHeaderCachePath))
|
||||
CreateSubfolder(Settings.GameHeaderCachePath);
|
||||
|
||||
FILE *cache = fopen(path.c_str(), "rb");
|
||||
|
||||
if (!cache)
|
||||
return;
|
||||
|
||||
struct gameHdr tmp;
|
||||
|
||||
fseek(cache, 0, SEEK_END);
|
||||
u64 fileSize = ftell(cache);
|
||||
fseek(cache, 0, SEEK_SET);
|
||||
|
||||
u32 count = (u32)(fileSize / sizeof(struct gameHdr));
|
||||
|
||||
list.reserve(count + list.size());
|
||||
for (u32 i = 0; i < count; i++)
|
||||
{
|
||||
bool found = false;
|
||||
fseek(cache, i * sizeof(struct gameHdr), SEEK_SET);
|
||||
fread((void *)&tmp, 1, sizeof(struct gameHdr), cache);
|
||||
|
||||
if (!found)
|
||||
{
|
||||
std::vector<struct discHdr> &tmplist = gameList.GetFullGameList();
|
||||
for (u32 c = 0; c < tmplist.size(); ++c)
|
||||
{
|
||||
struct discHdr *header = &tmplist[c];
|
||||
if (strncasecmp((const char *)tmp.id, (const char *)header->id, 6) == 0)
|
||||
{
|
||||
list.push_back(header);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
std::vector<struct discHdr> &tmplist = GCGames::Instance()->GetHeaders();
|
||||
for (u32 c = 0; c < tmplist.size(); ++c)
|
||||
{
|
||||
struct discHdr *header = &tmplist[c];
|
||||
if (strncasecmp((const char *)tmp.id, (const char *)header->id, 6) == 0)
|
||||
{
|
||||
list.push_back(header);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
std::vector<struct discHdr> &tmplist = Channels::Instance()->GetNandHeaders();
|
||||
for (u32 c = 0; c < tmplist.size(); ++c)
|
||||
{
|
||||
struct discHdr *header = &tmplist[c];
|
||||
if (strncasecmp((const char *)tmp.id, (const char *)header->id, 6) == 0)
|
||||
{
|
||||
list.push_back(header);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
std::vector<struct discHdr> &tmplist = Channels::Instance()->GetEmuHeaders();
|
||||
for (u32 c = 0; c < tmplist.size(); ++c)
|
||||
{
|
||||
struct discHdr *header = &tmplist[c];
|
||||
if (strncasecmp((const char *)tmp.id, (const char *)header->id, 6) == 0)
|
||||
{
|
||||
list.push_back(header);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
std::string FilteredListCacheFileName(const wchar_t *gameFilter)
|
||||
{
|
||||
std::string tmp;
|
||||
tmp = "FL";
|
||||
tmp += "_" + std::to_string(Settings.LoaderMode);
|
||||
tmp += "_" + std::to_string(Settings.GameSort);
|
||||
if (gameFilter)
|
||||
{
|
||||
std::wstring ws(gameFilter);
|
||||
std::string gf(ws.begin(), ws.end());
|
||||
if ((gf.length()) > 0)
|
||||
tmp += "_" + gf;
|
||||
}
|
||||
tmp += ".cache";
|
||||
return tmp;
|
||||
}
|
||||
|
||||
std::string FilteredListCacheFileName()
|
||||
{
|
||||
std::string tmp;
|
||||
tmp = "FL";
|
||||
tmp += "_" + std::to_string(Settings.LoaderMode);
|
||||
tmp += "_" + std::to_string(Settings.GameSort);
|
||||
tmp += ".cache";
|
||||
return tmp;
|
||||
fclose(cache);
|
||||
}
|
||||
|
||||
bool isCacheFile(std::string filename)
|
||||
{
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + filename;
|
||||
|
||||
if (CheckFile(path.c_str()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
std::string path = std::string(Settings.GameHeaderCachePath) + filename;
|
||||
return CheckFile(path.c_str());
|
||||
}
|
||||
|
34
source/cache/cache.hpp
vendored
34
source/cache/cache.hpp
vendored
@ -1,6 +1,5 @@
|
||||
/*
|
||||
Code by Oddx @ GBAtemp.net
|
||||
Loosely based on emuNAND caching by geoGolem.
|
||||
Code by Oddx @ GBAtemp.net
|
||||
*/
|
||||
#include "usbloader/disc.h"
|
||||
#include "settings/CSettings.h"
|
||||
@ -11,26 +10,32 @@
|
||||
|
||||
struct gameHdr
|
||||
{
|
||||
/* Game ID */
|
||||
u8 id[6];
|
||||
/* Game ID */
|
||||
u8 id[6];
|
||||
|
||||
/* Padding */
|
||||
u8 unused3[2];
|
||||
/* Padding */
|
||||
u8 unused3[2];
|
||||
};
|
||||
|
||||
struct wiiCache
|
||||
{
|
||||
struct discHdr header;
|
||||
int part;
|
||||
struct discHdr header;
|
||||
int part;
|
||||
};
|
||||
|
||||
struct gcCache
|
||||
{
|
||||
struct discHdr header;
|
||||
u8 path[200];
|
||||
struct discHdr header;
|
||||
u8 path[200];
|
||||
};
|
||||
|
||||
// emuNAND
|
||||
void ResetGameHeaderCache();
|
||||
void GetDirectoryList(const char *path, std::string &list);
|
||||
void GetListWBFS(std::string &list);
|
||||
bool isCacheCurrent();
|
||||
bool isCacheFile(std::string filename);
|
||||
|
||||
// EmuNAND
|
||||
void SaveGameHeaderCache(std::vector<struct discHdr> &list);
|
||||
void LoadGameHeaderCache(std::vector<struct discHdr> &list);
|
||||
|
||||
@ -42,11 +47,4 @@ void LoadGameHeaderCache(std::vector<struct discHdr> &list, std::vector<int> &pl
|
||||
void SaveGameHeaderCache(std::vector<struct discHdr> &list, std::vector<std::string> &plist);
|
||||
void LoadGameHeaderCache(std::vector<struct discHdr> &list, std::vector<std::string> &plist);
|
||||
|
||||
void ResetGameHeaderCache();
|
||||
|
||||
void SaveFilteredListCache(std::vector<struct discHdr *> &list, const wchar_t *gameFilter);
|
||||
void LoadFilteredListCache(std::vector<struct discHdr *> &list, const wchar_t *gameFilter);
|
||||
|
||||
std::string FilteredListCacheFileName(const wchar_t *gameFilter);
|
||||
std::string FilteredListCacheFileName();
|
||||
bool isCacheFile(std::string filename);
|
||||
|
@ -44,7 +44,7 @@ extern int connection;
|
||||
HomebrewBrowser::HomebrewBrowser()
|
||||
: FlyingButtonsMenu(tr( "Homebrew Launcher" ))
|
||||
{
|
||||
HomebrewList = new DirList(Settings.homebrewapps_path, ".dol,.elf", DirList::Files | DirList::Dirs | DirList::CheckSubfolders | DirList::MainDOL);
|
||||
HomebrewList = new DirList(Settings.homebrewapps_path, ".dol,.elf", DirList::Files | DirList::Dirs | DirList::CheckSubfolders | DirList::MainDOL, 1);
|
||||
|
||||
if (IsNetworkInit())
|
||||
ResumeNetworkWait();
|
||||
|
@ -329,17 +329,6 @@ GameBrowseMenu::GameBrowseMenu()
|
||||
gameCoverImg->SetPosition(thInt("26 - cover/download btn pos x"), thInt("58 - cover/download btn pos y"));
|
||||
gameCoverImg->SetWidescreen(Settings.widescreen);
|
||||
|
||||
IDBtnTT = new GuiTooltip(tr( "Click to change game ID" ));
|
||||
if (Settings.wsprompt) IDBtnTT->SetWidescreen(Settings.widescreen);
|
||||
IDBtnTT->SetAlpha(thInt("255 - tooltip alpha"));
|
||||
idBtn = new GuiButton(60, 23);
|
||||
idBtn->SetPosition(thInt("68 - gameID btn pos x"), thInt("305 - gameID btn pos y"));
|
||||
idBtn->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||||
idBtn->SetSoundOver(btnSoundOver);
|
||||
idBtn->SetTrigger(0, trigA);
|
||||
idBtn->SetToolTip(IDBtnTT, 205, -30);
|
||||
idBtn->SetSelectable(false);
|
||||
|
||||
GXColor clockColor = thColor("r=138 g=138 b=138 a=240 - clock color");
|
||||
float clockFontScaleFactor = thFloat("1.0 - Overrided clock scale factor. 1.0=allow user setting") != 1.0f ? thFloat("1.0 - Overrided clock scale factor. 1.0=allow user setting") : Settings.ClockFontScaleFactor;
|
||||
clockTimeBack = new GuiText("88:88", 40 / Settings.FontScaleFactor * clockFontScaleFactor, (GXColor) {clockColor.r, clockColor.g, clockColor.b, (u8)(clockColor.a / 6)});
|
||||
@ -495,7 +484,6 @@ GameBrowseMenu::~GameBrowseMenu()
|
||||
delete loaderModeBtn;
|
||||
delete homebrewBtn;
|
||||
delete DownloadBtn;
|
||||
delete idBtn;
|
||||
|
||||
delete installBtnTT;
|
||||
delete settingsBtnTT;
|
||||
@ -515,7 +503,6 @@ GameBrowseMenu::~GameBrowseMenu()
|
||||
delete loaderModeBtnTT;
|
||||
delete homebrewBtnTT;
|
||||
delete DownloadBtnTT;
|
||||
delete IDBtnTT;
|
||||
|
||||
delete gameBrowser;
|
||||
mainWindow->Remove(searchBar);
|
||||
@ -863,9 +850,6 @@ void GameBrowseMenu::ReloadBrowser()
|
||||
if (Settings.godmode || !(Settings.ParentalBlocks & BLOCK_COVER_DOWNLOADS))
|
||||
Append(DownloadBtn);
|
||||
|
||||
if ((Settings.gameDisplay == LIST_MODE) && (Settings.godmode || !(Settings.ParentalBlocks & BLOCK_GAMEID_CHANGE)))
|
||||
Append(idBtn);
|
||||
|
||||
Append(favoriteBtn);
|
||||
Append(searchBtn);
|
||||
Append(sortBtn);
|
||||
@ -961,7 +945,7 @@ int GameBrowseMenu::MainLoop()
|
||||
else
|
||||
{
|
||||
gameList.ReadGameList();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
if(Settings.ShowFreeSpace)
|
||||
{
|
||||
ThreadedTask::Instance()->AddCallback(&HDDSizeCallback);
|
||||
@ -1317,7 +1301,7 @@ int GameBrowseMenu::MainLoop()
|
||||
{
|
||||
WBFS_ReInit(WBFS_DEVICE_USB);
|
||||
}
|
||||
gameList.ReadGameList();
|
||||
gameList.ReadGameList(true);
|
||||
|
||||
if(Settings.ShowFreeSpace)
|
||||
{
|
||||
@ -1327,32 +1311,12 @@ int GameBrowseMenu::MainLoop()
|
||||
}
|
||||
|
||||
wString oldFilter(gameList.GetCurrentFilter());
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
gameList.FilterList(oldFilter.c_str());
|
||||
ReloadBrowser();
|
||||
}
|
||||
loaderModeBtn->ResetState();
|
||||
}
|
||||
|
||||
else if (Settings.gameDisplay == LIST_MODE && idBtn->GetState() == STATE_CLICKED)
|
||||
{
|
||||
gprintf("\tidBtn Clicked\n");
|
||||
struct discHdr * header = gameList[GetSelectedGame()];
|
||||
//enter new game ID
|
||||
char entered[7];
|
||||
snprintf(entered, sizeof(entered), "%s", (char *) header->id);
|
||||
int result = OnScreenKeyboard(entered, sizeof(entered), 0);
|
||||
if (result == 1)
|
||||
{
|
||||
WBFS_ReIDGame(header->id, entered);
|
||||
wString oldFilter(gameList.GetCurrentFilter());
|
||||
gameList.ReadGameList();
|
||||
gameList.FilterList(oldFilter.c_str());
|
||||
ReloadBrowser();
|
||||
}
|
||||
idBtn->ResetState();
|
||||
}
|
||||
|
||||
else if (Settings.gameDisplay == LIST_MODE && GetSelectedGame() != gameSelectedOld)
|
||||
{
|
||||
gameSelectedOld = GetSelectedGame();
|
||||
@ -1389,7 +1353,7 @@ void GameBrowseMenu::CheckDiscSlotUpdate()
|
||||
|
||||
delayCounter = 0;
|
||||
u32 DiscDriveCover = 0;
|
||||
WDVD_GetCoverStatus(&DiscDriveCover);//for detecting if i disc has been inserted
|
||||
WDVD_GetCoverStatus(&DiscDriveCover);//for detecting if a disc has been inserted
|
||||
|
||||
if ((DiscDriveCover & 0x02) && (DiscDriveCover != DiscDriveCoverOld))
|
||||
{
|
||||
|
@ -148,7 +148,6 @@ class GameBrowseMenu : public GuiWindow
|
||||
GuiButton * loaderModeBtn;
|
||||
GuiButton * homebrewBtn;
|
||||
GuiButton * DownloadBtn;
|
||||
GuiButton * idBtn;
|
||||
|
||||
GuiTooltip * installBtnTT;
|
||||
GuiTooltip * settingsBtnTT;
|
||||
@ -168,7 +167,6 @@ class GameBrowseMenu : public GuiWindow
|
||||
GuiTooltip * loaderModeBtnTT;
|
||||
GuiTooltip * homebrewBtnTT;
|
||||
GuiTooltip * DownloadBtnTT;
|
||||
GuiTooltip * IDBtnTT;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "utils/tools.h"
|
||||
#include "system/IosLoader.h"
|
||||
#include "cache/cache.hpp"
|
||||
#include "settings/GameTitles.h"
|
||||
|
||||
#define WII_MAGIC 0x5D1C9EA3
|
||||
|
||||
@ -148,7 +149,6 @@ int MenuGCInstall()
|
||||
if(ret >= 0) {
|
||||
//! success
|
||||
installed_games++;
|
||||
ResetGameHeaderCache();
|
||||
}
|
||||
else if(ret == PROGRESS_CANCELED)
|
||||
{
|
||||
@ -184,6 +184,7 @@ int MenuGCInstall()
|
||||
return result;
|
||||
|
||||
gameList.FilterList();
|
||||
isCacheCurrent();
|
||||
bgMusic->Pause();
|
||||
GuiSound instsuccess(Resources::GetFile("success.ogg"), Resources::GetFileSize("success.ogg"), Settings.sfxvolume);
|
||||
instsuccess.SetVolume(Settings.sfxvolume);
|
||||
@ -289,9 +290,9 @@ int MenuInstall()
|
||||
else
|
||||
{
|
||||
ShowProgress(tr("Install finished"), headerdisc.title, tr("Reloading game list now, please wait..."), gamesize, gamesize, true, true);
|
||||
ResetGameHeaderCache();
|
||||
gameList.ReadGameList(); //get the entries again
|
||||
gameList.FilterList();
|
||||
isCacheCurrent();
|
||||
bgMusic->Pause();
|
||||
GuiSound instsuccess(Resources::GetFile("success.ogg"), Resources::GetFileSize("success.ogg"), Settings.sfxvolume);
|
||||
instsuccess.SetVolume(Settings.sfxvolume);
|
||||
|
@ -137,9 +137,8 @@ int UpdateGameTDB()
|
||||
remove(ZipPath.c_str());
|
||||
|
||||
//! Reload all titles and reload cached titles because the file changed now.
|
||||
GameTitles.SetDefault();
|
||||
GameTitles.Reset();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
|
||||
return (result ? filesize : -1);
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "banner/OpeningBNR.hpp"
|
||||
#include "utils/ShowError.h"
|
||||
#include "utils/tools.h"
|
||||
#include "cache/cache.hpp"
|
||||
|
||||
#define NONE 0
|
||||
#define LEFT 1
|
||||
@ -601,26 +602,37 @@ int GameWindow::MainLoop()
|
||||
{
|
||||
// Hide the window
|
||||
Hide();
|
||||
|
||||
// This button can only be clicked when this is not a dvd header
|
||||
struct discHdr *header = gameList[gameSelected];
|
||||
|
||||
//enter new game title
|
||||
char entered[60];
|
||||
// Enter the new game title
|
||||
char entered[130];
|
||||
snprintf(entered, sizeof(entered), "%s", GameTitles.GetTitle(header));
|
||||
int result = OnScreenKeyboard(entered, 60, 0);
|
||||
int result = OnScreenKeyboard(entered, 129, 0);
|
||||
if (result == 1)
|
||||
{
|
||||
WBFS_RenameGame(header->id, entered);
|
||||
GameTitles.SetGameTitle(header->id, entered);
|
||||
if (strlen(entered) > 0)
|
||||
GameTitles.SetGameTitle(header->id, entered, TITLETYPE_MANUAL_OVERRIDE);
|
||||
else
|
||||
GameTitles.SetGameTitle(header->id, header->title, TITLETYPE_DEFAULT);
|
||||
// Refresh and set the title for the window
|
||||
wString oldFilter(gameList.GetCurrentFilter());
|
||||
gameList.ReadGameList();
|
||||
gameList.FilterList(oldFilter.c_str());
|
||||
if(browserMenu) browserMenu->ReloadBrowser();
|
||||
nameTxt->SetText(GameTitles.GetTitle(header));
|
||||
// Remember the games new position
|
||||
for (int i = 0; i < gameList.size(); ++i)
|
||||
{
|
||||
if (strncasecmp((const char *)gameList[i]->id, (const char *)header->id, 6) == 0)
|
||||
{
|
||||
Settings.SelectedGame = 0;
|
||||
Settings.GameListOffset = i;
|
||||
gameSelected = i;
|
||||
}
|
||||
}
|
||||
if (browserMenu)
|
||||
browserMenu->ReloadBrowser();
|
||||
}
|
||||
// Show the window again
|
||||
Show();
|
||||
|
||||
nameBtn->ResetState();
|
||||
}
|
||||
|
||||
|
@ -133,13 +133,14 @@ void CSettings::SetDefault()
|
||||
wiilight = WIILIGHT_ON;
|
||||
autonetwork = OFF;
|
||||
patchcountrystrings = OFF;
|
||||
titlesOverride = ON;
|
||||
ForceDiscTitles = OFF;
|
||||
TitlesType = TITLETYPE_FROMWIITDB;
|
||||
CacheCheck = ON;
|
||||
CacheCheckCRC = 0;
|
||||
CacheTitles = ON;
|
||||
screensaver = SCREENSAVER_10_MIN;
|
||||
musicloopmode = ON;
|
||||
marknewtitles = ON;
|
||||
ShowFreeSpace = ON;
|
||||
UseGameHeaderCache = OFF;
|
||||
PlaylogUpdate = OFF;
|
||||
ParentalBlocks = BLOCK_ALL;
|
||||
InstallToDir = INSTALL_TO_NAME_GAMEID;
|
||||
@ -150,7 +151,6 @@ void CSettings::SetDefault()
|
||||
BlockIOSReload = AUTO;
|
||||
USBPort = 0;
|
||||
USBAutoMount = ON;
|
||||
CacheTitles = ON;
|
||||
WSFactor = 0.8f; //actually should be 0.75 for real widescreen
|
||||
FontScaleFactor = 0.8f; //it's a work around to not have to change ALL fonts now
|
||||
ClockFontScaleFactor = 1.0f; // Scale of 1 to prevent misaligned clock.
|
||||
@ -314,7 +314,7 @@ bool CSettings::Save()
|
||||
char filedest[300];
|
||||
snprintf(filedest, sizeof(filedest), "%sGXGlobal.cfg", ConfigPath);
|
||||
|
||||
if(!CreateSubfolder(ConfigPath)) return false;
|
||||
if(!CreateSubfolder(ConfigPath)) return false;
|
||||
|
||||
FILE * file = fopen(filedest, "w");
|
||||
if (!file) return false;
|
||||
@ -372,8 +372,10 @@ bool CSettings::Save()
|
||||
fprintf(file, "BcaCodepath = %s\n", BcaCodepath);
|
||||
fprintf(file, "WipCodepath = %s\n", WipCodepath);
|
||||
fprintf(file, "WDMpath = %s\n", WDMpath);
|
||||
fprintf(file, "titlesOverride = %d\n", titlesOverride);
|
||||
fprintf(file, "ForceDiscTitles = %d\n", ForceDiscTitles);
|
||||
fprintf(file, "TitlesType = %d\n", TitlesType);
|
||||
fprintf(file, "CacheCheck = %d\n", CacheCheck);
|
||||
fprintf(file, "CacheCheckCRC = %08X\n", CacheCheckCRC);
|
||||
fprintf(file, "CacheTitles = %d\n", CacheTitles);
|
||||
fprintf(file, "patchcountrystrings = %d\n", patchcountrystrings);
|
||||
fprintf(file, "screensaver = %d\n", screensaver);
|
||||
fprintf(file, "musicloopmode = %d\n", musicloopmode);
|
||||
@ -383,7 +385,6 @@ bool CSettings::Save()
|
||||
fprintf(file, "partition = %d\n", partition);
|
||||
fprintf(file, "marknewtitles = %d\n", marknewtitles);
|
||||
fprintf(file, "ShowFreeSpace = %d\n", ShowFreeSpace);
|
||||
fprintf(file, "UseGameHeaderCache = %d\n", UseGameHeaderCache);
|
||||
fprintf(file, "InstallToDir = %d\n", InstallToDir);
|
||||
fprintf(file, "GameSplit = %d\n", GameSplit);
|
||||
fprintf(file, "InstallPartitions = %08X\n", (unsigned int)InstallPartitions);
|
||||
@ -394,7 +395,6 @@ bool CSettings::Save()
|
||||
fprintf(file, "MultiplePartitions = %d\n", MultiplePartitions);
|
||||
fprintf(file, "USBPort = %d\n", USBPort);
|
||||
fprintf(file, "USBAutoMount = %d\n", USBAutoMount);
|
||||
fprintf(file, "CacheTitles = %d\n", CacheTitles);
|
||||
fprintf(file, "BlockIOSReload = %d\n", BlockIOSReload);
|
||||
fprintf(file, "WSFactor = %0.3f\n", WSFactor);
|
||||
fprintf(file, "FontScaleFactor = %0.3f\n", FontScaleFactor);
|
||||
@ -702,14 +702,24 @@ bool CSettings::SetSetting(char *name, char *value)
|
||||
screensaver = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "titlesOverride") == 0)
|
||||
else if (strcmp(name, "TitlesType") == 0)
|
||||
{
|
||||
titlesOverride = atoi(value);
|
||||
TitlesType = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "ForceDiscTitles") == 0)
|
||||
else if (strcmp(name, "CacheCheck") == 0)
|
||||
{
|
||||
ForceDiscTitles = atoi(value);
|
||||
CacheCheck = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "CacheCheckCRC") == 0)
|
||||
{
|
||||
CacheCheckCRC = strtoul(value, 0, 16);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "CacheTitles") == 0)
|
||||
{
|
||||
CacheTitles = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "musicloopmode") == 0)
|
||||
@ -747,11 +757,6 @@ bool CSettings::SetSetting(char *name, char *value)
|
||||
ShowFreeSpace = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "UseGameHeaderCache") == 0)
|
||||
{
|
||||
UseGameHeaderCache = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "HomeMenu") == 0)
|
||||
{
|
||||
HomeMenu = atoi(value);
|
||||
@ -777,11 +782,6 @@ bool CSettings::SetSetting(char *name, char *value)
|
||||
USBAutoMount = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "CacheTitles") == 0)
|
||||
{
|
||||
CacheTitles = atoi(value);
|
||||
return true;
|
||||
}
|
||||
else if (strcmp(name, "patchcountrystrings") == 0)
|
||||
{
|
||||
patchcountrystrings = atoi(value);
|
||||
|
@ -84,8 +84,8 @@ class CSettings
|
||||
char WiinnertagPath[100];
|
||||
char NandEmuPath[50];
|
||||
char NandEmuChanPath[50];
|
||||
char BNRCachePath[50];
|
||||
char GameHeaderCachePath[50];
|
||||
char BNRCachePath[100];
|
||||
char GameHeaderCachePath[100];
|
||||
char GameCubePath[100];
|
||||
char GameCubeSDPath[100];
|
||||
char DEVOLoaderPath[100];
|
||||
@ -135,7 +135,10 @@ class CSettings
|
||||
short partition;
|
||||
short musicloopmode;
|
||||
short godmode;
|
||||
short titlesOverride; // db_titles
|
||||
short TitlesType;
|
||||
short CacheCheck;
|
||||
u32 CacheCheckCRC;
|
||||
short CacheTitles;
|
||||
short gridRows;
|
||||
short autonetwork;
|
||||
short discart;
|
||||
@ -146,12 +149,10 @@ class CSettings
|
||||
short GameSplit;
|
||||
short PlaylogUpdate;
|
||||
short ShowFreeSpace;
|
||||
short UseGameHeaderCache;
|
||||
short HomeMenu;
|
||||
short MultiplePartitions;
|
||||
short USBPort;
|
||||
short USBAutoMount;
|
||||
short CacheTitles;
|
||||
short BlockIOSReload;
|
||||
u32 InstallPartitions;
|
||||
u32 ParentalBlocks;
|
||||
@ -183,7 +184,6 @@ class CSettings
|
||||
short UseChanLauncher;
|
||||
int AdjustOverscanX;
|
||||
int AdjustOverscanY;
|
||||
short ForceDiscTitles;
|
||||
short TooltipDelay;
|
||||
short GameWindowMode;
|
||||
short CacheBNRFiles;
|
||||
|
@ -1,27 +1,43 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <algorithm>
|
||||
|
||||
#include "GameTitles.h"
|
||||
#include "CSettings.h"
|
||||
#include "usbloader/GameList.h"
|
||||
#include "Channels/channels.h"
|
||||
#include "xml/GameTDB.hpp"
|
||||
#include "svnrev.h"
|
||||
#include "gecko.h"
|
||||
#include "FileOperations/fileops.h"
|
||||
|
||||
#define VALID_CACHE_REVISION 1280
|
||||
#define VALID_CACHE_REVISION 1280
|
||||
|
||||
CGameTitles GameTitles;
|
||||
|
||||
void CGameTitles::SetGameTitle(const char * id, const char * title, const std::string region)
|
||||
bool dbExists = false;
|
||||
|
||||
void CGameTitles::SortTitleList()
|
||||
{
|
||||
if(!id || !title)
|
||||
std::sort(TitleList.begin(), TitleList.end(), [](const GameTitle &x, const GameTitle &y)
|
||||
{ return (strncasecmp(x.GameID, y.GameID, 6) < 0); });
|
||||
}
|
||||
|
||||
void CGameTitles::SetGameTitle(const char *id, const char *title, char TitleType, const std::string region, int ParentalRating, int PlayersCount)
|
||||
{
|
||||
if (!id || !title)
|
||||
return;
|
||||
|
||||
for(u32 i = 0; i < TitleList.size(); ++i)
|
||||
for (u32 i = 0; i < TitleList.size(); ++i)
|
||||
{
|
||||
if(strncasecmp(id, TitleList[i].GameID, 6) == 0)
|
||||
if (strncasecmp(TitleList[i].GameID, id, 6) == 0)
|
||||
{
|
||||
TitleList[i].Title = title;
|
||||
TitleList[i].Region = region;
|
||||
if (ParentalRating != -1)
|
||||
TitleList[i].ParentalRating = ParentalRating;
|
||||
if (PlayersCount != 1)
|
||||
TitleList[i].PlayersCount = PlayersCount;
|
||||
TitleList[i].TitleType = TitleType;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -30,85 +46,107 @@ void CGameTitles::SetGameTitle(const char * id, const char * title, const std::s
|
||||
snprintf(newTitle.GameID, sizeof(newTitle.GameID), id);
|
||||
newTitle.Title = title;
|
||||
newTitle.Region = region;
|
||||
newTitle.ParentalRating = -1;
|
||||
newTitle.PlayersCount = 1;
|
||||
newTitle.FromWiiTDB = 0;
|
||||
newTitle.ParentalRating = ParentalRating;
|
||||
newTitle.PlayersCount = PlayersCount;
|
||||
newTitle.TitleType = TitleType;
|
||||
|
||||
TitleList.push_back(newTitle);
|
||||
}
|
||||
|
||||
const char * CGameTitles::GetTitle(const char * id) const
|
||||
const char *CGameTitles::GetTitle(const char *id, bool allow_access) const
|
||||
{
|
||||
if(!id)
|
||||
if (!id)
|
||||
return "";
|
||||
|
||||
for(u32 i = 0; i < TitleList.size(); ++i)
|
||||
auto game = std::lower_bound(TitleList.begin(), TitleList.end(), id, [](const GameTitle >, const char *gameid)
|
||||
{ return (strncasecmp(gt.GameID, gameid, 6) < 0); });
|
||||
if (game != TitleList.end())
|
||||
{
|
||||
if(strncasecmp(id, TitleList[i].GameID, 6) == 0)
|
||||
return TitleList[i].Title.c_str();
|
||||
if (strncasecmp((const char *)game->GameID, (const char *)id, 6) == 0)
|
||||
{
|
||||
if ((dbExists && Settings.TitlesType == TITLETYPE_FROMWIITDB) || game->TitleType == TITLETYPE_MANUAL_OVERRIDE || (Settings.TitlesType == TITLETYPE_FORCED_DISC && game->TitleType == TITLETYPE_FORCED_DISC) || allow_access)
|
||||
return game->Title.c_str();
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < gameList.size(); ++i)
|
||||
for (int i = 0; i < gameList.size(); ++i)
|
||||
{
|
||||
if(strncasecmp(id, (char *) gameList[i]->id, 6) == 0)
|
||||
if (strncasecmp((const char *)gameList[i]->id, id, 6) == 0)
|
||||
return gameList[i]->title;
|
||||
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
const char * CGameTitles::GetTitle(const struct discHdr *header) const
|
||||
const char *CGameTitles::GetTitle(const struct discHdr *header) const
|
||||
{
|
||||
if(!header)
|
||||
if (!header)
|
||||
return "";
|
||||
|
||||
for(u32 i = 0; i < TitleList.size(); ++i)
|
||||
auto game = std::lower_bound(TitleList.begin(), TitleList.end(), (const char *)header->id, [](const GameTitle >, const char *gameid)
|
||||
{ return (strncasecmp(gt.GameID, gameid, 6) < 0); });
|
||||
if (game != TitleList.end())
|
||||
{
|
||||
if(strncasecmp((const char *) header->id, TitleList[i].GameID, 6) == 0)
|
||||
return TitleList[i].Title.c_str();
|
||||
if (strncasecmp(game->GameID, (const char *)header->id, 6) == 0)
|
||||
{
|
||||
if ((dbExists && Settings.TitlesType == TITLETYPE_FROMWIITDB) || game->TitleType == TITLETYPE_MANUAL_OVERRIDE || (Settings.TitlesType == TITLETYPE_FORCED_DISC && game->TitleType == TITLETYPE_FORCED_DISC))
|
||||
return game->Title.c_str();
|
||||
}
|
||||
}
|
||||
|
||||
return header->title;
|
||||
}
|
||||
|
||||
const char * CGameTitles::GetRegion(const char * id) const
|
||||
char CGameTitles::GetTitleType(const char *id) const
|
||||
{
|
||||
if(!id || !Settings.titlesOverride)
|
||||
if (!id)
|
||||
return 0;
|
||||
|
||||
for (u32 i = 0; i < TitleList.size(); ++i)
|
||||
{
|
||||
if (strncasecmp(TitleList[i].GameID, id, 6) == 0)
|
||||
return TitleList[i].TitleType;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *CGameTitles::GetRegion(const char *id) const
|
||||
{
|
||||
if (!id || Settings.TitlesType != TITLETYPE_FROMWIITDB)
|
||||
return "NULL";
|
||||
|
||||
for(u32 i = 0; i < TitleList.size(); ++i)
|
||||
for (u32 i = 0; i < TitleList.size(); ++i)
|
||||
{
|
||||
if(strncasecmp(id, TitleList[i].GameID, 6) == 0)
|
||||
if (strncasecmp(TitleList[i].GameID, id, 6) == 0)
|
||||
return TitleList[i].Region.c_str();
|
||||
}
|
||||
|
||||
return "NULL";
|
||||
}
|
||||
|
||||
int CGameTitles::GetParentalRating(const char * id) const
|
||||
int CGameTitles::GetParentalRating(const char *id) const
|
||||
{
|
||||
if(!id)
|
||||
if (!id)
|
||||
return -1;
|
||||
|
||||
for(u32 i = 0; i < TitleList.size(); ++i)
|
||||
for (u32 i = 0; i < TitleList.size(); ++i)
|
||||
{
|
||||
if(strncasecmp(id, TitleList[i].GameID, 6) == 0)
|
||||
if (strncasecmp(TitleList[i].GameID, id, 6) == 0)
|
||||
return TitleList[i].ParentalRating;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int CGameTitles::GetPlayersCount(const char * id) const
|
||||
int CGameTitles::GetPlayersCount(const char *id) const
|
||||
{
|
||||
if(!id)
|
||||
if (!id)
|
||||
return 1;
|
||||
|
||||
for(u32 i = 0; i < TitleList.size(); ++i)
|
||||
for (u32 i = 0; i < TitleList.size(); ++i)
|
||||
{
|
||||
if(strncasecmp(id, TitleList[i].GameID, 6) == 0)
|
||||
if (strncasecmp(TitleList[i].GameID, id, 6) == 0)
|
||||
return TitleList[i].PlayersCount;
|
||||
}
|
||||
|
||||
@ -122,33 +160,41 @@ void CGameTitles::SetDefault()
|
||||
std::vector<GameTitle>().swap(TitleList);
|
||||
}
|
||||
|
||||
typedef struct _CacheTitle
|
||||
void CGameTitles::Reset()
|
||||
{
|
||||
char GameID[7];
|
||||
char Title[130]; // long titles e.g. RGOJJ9 & DLSP64
|
||||
char Region[7];
|
||||
char FromWiiTDB;
|
||||
int ParentalRating;
|
||||
int PlayersCount;
|
||||
if (TitleList.empty())
|
||||
return;
|
||||
|
||||
} ATTRIBUTE_PACKED CacheTitle;
|
||||
for (u32 i = 0; i < TitleList.size(); ++i)
|
||||
{
|
||||
if (TitleList[i].TitleType < TITLETYPE_MANUAL_OVERRIDE)
|
||||
TitleList[i].TitleType = TITLETYPE_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
u32 CGameTitles::ReadCachedTitles(const char * path)
|
||||
u32 CGameTitles::ReadCachedTitles(const char *path)
|
||||
{
|
||||
std::string Cachepath = path;
|
||||
if(path[strlen(path)-1] != '/')
|
||||
std::string dbpath(Settings.titlestxt_path);
|
||||
if (dbpath.back() != '/')
|
||||
dbpath += '/';
|
||||
dbpath += "wiitdb.xml";
|
||||
dbExists = CheckFile(dbpath.c_str());
|
||||
|
||||
std::string Cachepath(path);
|
||||
if (Cachepath.back() != '/')
|
||||
Cachepath += '/';
|
||||
Cachepath += "TitlesCache.bin";
|
||||
|
||||
//! Load cached last so that the titles are preloaded before reading list
|
||||
FILE * f = fopen(Cachepath.c_str(), "rb");
|
||||
if(!f) return 0;
|
||||
FILE *f = fopen(Cachepath.c_str(), "rb");
|
||||
if (!f)
|
||||
return 0;
|
||||
|
||||
u32 revision = 0;
|
||||
|
||||
fread(&revision, 1, 4, f);
|
||||
|
||||
if(revision < VALID_CACHE_REVISION)
|
||||
if (revision < VALID_CACHE_REVISION)
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
@ -160,7 +206,7 @@ u32 CGameTitles::ReadCachedTitles(const char * path)
|
||||
fread(LangCode, 1, 10, f);
|
||||
|
||||
//! Check if cache has correct language code
|
||||
if(strcmp(LangCode, Settings.db_language) != 0)
|
||||
if (strcmp(LangCode, Settings.db_language) != 0)
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
@ -172,31 +218,31 @@ u32 CGameTitles::ReadCachedTitles(const char * path)
|
||||
std::vector<CacheTitle> CachedList(count);
|
||||
TitleList.resize(count);
|
||||
|
||||
fread(&CachedList[0], 1, count*sizeof(CacheTitle), f);
|
||||
fread(&CachedList[0], 1, count * sizeof(CacheTitle), f);
|
||||
fclose(f);
|
||||
|
||||
for(u32 i = 0; i < count; ++i)
|
||||
for (u32 i = 0; i < count; ++i)
|
||||
{
|
||||
strcpy(TitleList[i].GameID, CachedList[i].GameID);
|
||||
TitleList[i].Title = CachedList[i].Title;
|
||||
TitleList[i].Region = CachedList[i].Region;
|
||||
TitleList[i].ParentalRating = CachedList[i].ParentalRating;
|
||||
TitleList[i].PlayersCount = CachedList[i].PlayersCount;
|
||||
TitleList[i].FromWiiTDB = CachedList[i].FromWiiTDB;
|
||||
TitleList[i].TitleType = CachedList[i].TitleType;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
void CGameTitles::WriteCachedTitles(const char * path)
|
||||
void CGameTitles::WriteCachedTitles(const char *path)
|
||||
{
|
||||
std::string Cachepath = path;
|
||||
if(path[strlen(path)-1] != '/')
|
||||
std::string Cachepath(path);
|
||||
if (Cachepath.back() != '/')
|
||||
Cachepath += '/';
|
||||
Cachepath += "TitlesCache.bin";
|
||||
|
||||
FILE *f = fopen(Cachepath.c_str(), "wb");
|
||||
if(!f)
|
||||
if (!f)
|
||||
return;
|
||||
|
||||
CacheTitle Cache;
|
||||
@ -205,8 +251,9 @@ void CGameTitles::WriteCachedTitles(const char * path)
|
||||
fwrite(&revision, 1, 4, f);
|
||||
fwrite(Settings.db_language, 1, 10, f);
|
||||
fwrite(&count, 1, 4, f);
|
||||
SortTitleList();
|
||||
|
||||
for(u32 i = 0; i < count; ++i)
|
||||
for (u32 i = 0; i < count; ++i)
|
||||
{
|
||||
memset(&Cache, 0, sizeof(CacheTitle));
|
||||
snprintf(Cache.GameID, sizeof(Cache.GameID), "%s", TitleList[i].GameID);
|
||||
@ -214,7 +261,7 @@ void CGameTitles::WriteCachedTitles(const char * path)
|
||||
snprintf(Cache.Region, sizeof(Cache.Region), "%s", TitleList[i].Region.c_str());
|
||||
Cache.ParentalRating = TitleList[i].ParentalRating;
|
||||
Cache.PlayersCount = TitleList[i].PlayersCount;
|
||||
Cache.FromWiiTDB = TitleList[i].FromWiiTDB;
|
||||
Cache.TitleType = TitleList[i].TitleType;
|
||||
|
||||
fwrite(&Cache, 1, sizeof(CacheTitle), f);
|
||||
}
|
||||
@ -222,99 +269,109 @@ void CGameTitles::WriteCachedTitles(const char * path)
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
void CGameTitles::GetMissingTitles(std::vector<std::string> &MissingTitles, bool removeUnused)
|
||||
int CGameTitles::GetMissingTitles(std::vector<std::string> &MissingTitles, std::vector<struct discHdr *> &headerlist)
|
||||
{
|
||||
std::vector<struct discHdr *> &FullList = gameList.GetFilteredList();
|
||||
std::vector<bool> UsedCachedList(TitleList.size(), false);
|
||||
|
||||
for(u32 i = 0; i < FullList.size(); ++i)
|
||||
for (u32 i = 0; i < headerlist.size(); ++i)
|
||||
{
|
||||
bool isCached = false;
|
||||
|
||||
for(u32 n = 0; n < TitleList.size(); ++n)
|
||||
bool found = false;
|
||||
for (u32 n = 0; n < TitleList.size(); ++n)
|
||||
{
|
||||
if(strncasecmp(TitleList[n].GameID, (const char *) FullList[i]->id, 6) == 0)
|
||||
if (strncasecmp(TitleList[n].GameID, (const char *)headerlist[i]->id, 6) == 0)
|
||||
{
|
||||
UsedCachedList[n] = true;
|
||||
//! If the title is not from WiiTDB, try to reload it
|
||||
isCached = TitleList[n].FromWiiTDB;
|
||||
if (TitleList[n].TitleType >= TITLETYPE_FROMWIITDB)
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!isCached)
|
||||
{
|
||||
char gameID[7];
|
||||
snprintf(gameID, sizeof(gameID), (const char *) FullList[i]->id);
|
||||
MissingTitles.push_back(std::string(gameID));
|
||||
}
|
||||
if (!found /*&& !headerlist[i]->tid*/)
|
||||
MissingTitles.push_back((std::string)(const char *)headerlist[i]->id);
|
||||
}
|
||||
return MissingTitles.size();
|
||||
}
|
||||
|
||||
if(!removeUnused)
|
||||
void CGameTitles::CleanTitles(std::vector<struct discHdr *> &headerlist)
|
||||
{
|
||||
if (TitleList.empty())
|
||||
return;
|
||||
|
||||
for(u32 n = 0; n < TitleList.size(); ++n)
|
||||
for (u32 n = 0; n < TitleList.size(); ++n)
|
||||
{
|
||||
if(!UsedCachedList[n])
|
||||
bool isCached = false;
|
||||
for (u32 i = 0; i < headerlist.size(); ++i)
|
||||
{
|
||||
TitleList.erase(TitleList.begin()+n);
|
||||
if (strncasecmp(TitleList[n].GameID, (const char *)headerlist[i]->id, 6) == 0)
|
||||
{
|
||||
isCached = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isCached)
|
||||
{
|
||||
TitleList.erase(TitleList.begin() + n);
|
||||
n--;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void CGameTitles::LoadTitlesFromGameTDB(const char * path, bool removeUnused)
|
||||
void CGameTitles::LoadTitlesFromGameTDB(const char *path)
|
||||
{
|
||||
if(!path || !Settings.titlesOverride)
|
||||
if (!path || Settings.TitlesType != TITLETYPE_FROMWIITDB)
|
||||
return;
|
||||
|
||||
std::string Filepath = path;
|
||||
if(path[strlen(path)-1] != '/')
|
||||
std::string Filepath(path);
|
||||
if (Filepath.back() != '/')
|
||||
Filepath += '/';
|
||||
|
||||
Filepath += "wiitdb.xml";
|
||||
|
||||
//! Read game list
|
||||
gameList.LoadUnfiltered();
|
||||
|
||||
//! Removed unused cache titles and get the still missing ones
|
||||
std::vector<std::string> MissingTitles;
|
||||
GetMissingTitles(MissingTitles, removeUnused);
|
||||
|
||||
if(MissingTitles.size() == 0)
|
||||
std::vector<struct discHdr *> headerlist;
|
||||
if (!gameList.GetGameListHeaders(headerlist, MODE_ALL))
|
||||
return;
|
||||
|
||||
std::string Title;
|
||||
//! Removed unused cache titles and get the still missing ones
|
||||
CleanTitles(headerlist);
|
||||
std::vector<std::string> MissingTitles;
|
||||
if (!GetMissingTitles(MissingTitles, headerlist))
|
||||
return;
|
||||
|
||||
GameTDB XML_DB;
|
||||
if (!XML_DB.OpenFile(Filepath.c_str()))
|
||||
return;
|
||||
dbExists = true;
|
||||
|
||||
GameTDB XML_DB(Filepath.c_str());
|
||||
XML_DB.SetLanguageCode(Settings.db_language);
|
||||
int Rating;
|
||||
std::string RatValTxt;
|
||||
std::string Region;
|
||||
|
||||
for(u32 i = 0; i < MissingTitles.size(); ++i)
|
||||
for (u32 i = 0; i < MissingTitles.size(); ++i)
|
||||
{
|
||||
if(!XML_DB.GetTitle(MissingTitles[i].c_str(), Title))
|
||||
std::string Title;
|
||||
std::string Region;
|
||||
std::string RatValTxt;
|
||||
int ParentalRating = -1;
|
||||
int PlayersCount = 1;
|
||||
|
||||
if (!XML_DB.GetTitle(MissingTitles[i].c_str(), Title))
|
||||
continue;
|
||||
|
||||
if(XML_DB.GetRegion(MissingTitles[i].c_str(), Region))
|
||||
this->SetGameTitle(MissingTitles[i].c_str(), Title.c_str(), Region);
|
||||
// This change allows the game to be sorted correctly
|
||||
if (Title.compare("Ōkami") == 0)
|
||||
Title.assign("Okami");
|
||||
|
||||
int Rating = XML_DB.GetRating(MissingTitles[i].c_str());
|
||||
if (Rating >= 0)
|
||||
{
|
||||
if (XML_DB.GetRatingValue(MissingTitles[i].c_str(), RatValTxt))
|
||||
ParentalRating = GameTDB::ConvertRating(RatValTxt.c_str(), GameTDB::RatingToString(Rating), "PEGI");
|
||||
}
|
||||
|
||||
int pc = XML_DB.GetPlayers(MissingTitles[i].c_str());
|
||||
if (pc > 0)
|
||||
PlayersCount = pc;
|
||||
|
||||
if (XML_DB.GetRegion(MissingTitles[i].c_str(), Region))
|
||||
SetGameTitle(MissingTitles[i].c_str(), Title.c_str(), TITLETYPE_FROMWIITDB, Region, ParentalRating, PlayersCount);
|
||||
else
|
||||
this->SetGameTitle(MissingTitles[i].c_str(), Title.c_str());
|
||||
//! Title is loaded from WiiTDB, remember that it's good
|
||||
TitleList[TitleList.size()-1].FromWiiTDB = 1;
|
||||
|
||||
Rating = XML_DB.GetRating(MissingTitles[i].c_str());
|
||||
if(Rating < 0)
|
||||
continue;
|
||||
|
||||
if(!XML_DB.GetRatingValue(MissingTitles[i].c_str(), RatValTxt))
|
||||
continue;
|
||||
|
||||
TitleList[TitleList.size()-1].ParentalRating = GameTDB::ConvertRating(RatValTxt.c_str(), GameTDB::RatingToString(Rating), "PEGI");
|
||||
int ret = XML_DB.GetPlayers(MissingTitles[i].c_str());
|
||||
if(ret > 0)
|
||||
TitleList[TitleList.size()-1].PlayersCount = ret;
|
||||
SetGameTitle(MissingTitles[i].c_str(), Title.c_str(), TITLETYPE_FROMWIITDB, "NULL", ParentalRating, PlayersCount);
|
||||
}
|
||||
XML_DB.CloseFile();
|
||||
SortTitleList();
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <vector>
|
||||
#include <gctypes.h>
|
||||
#include "usbloader/disc.h"
|
||||
#include "SettingsEnums.h"
|
||||
|
||||
typedef struct _GameTitle
|
||||
{
|
||||
@ -13,25 +14,39 @@ typedef struct _GameTitle
|
||||
std::string Region;
|
||||
int ParentalRating;
|
||||
int PlayersCount;
|
||||
char FromWiiTDB;
|
||||
char TitleType;
|
||||
|
||||
} GameTitle;
|
||||
|
||||
typedef struct _CacheTitle
|
||||
{
|
||||
char GameID[7];
|
||||
char Title[130]; // long titles e.g. RGOJJ9 & DLSP64
|
||||
char Region[7];
|
||||
int ParentalRating;
|
||||
int PlayersCount;
|
||||
char TitleType;
|
||||
|
||||
} ATTRIBUTE_PACKED CacheTitle;
|
||||
|
||||
class CGameTitles
|
||||
{
|
||||
public:
|
||||
//! Sort the title list
|
||||
void SortTitleList();
|
||||
//! Set a game title from GameTDB
|
||||
void SetGameTitle(const char * id, const char * title, const std::string region = "NULL");
|
||||
void SetGameTitle(const char * id, const char * title, char TitleType = TITLETYPE_DEFAULT, std::string region = "NULL", int ParentalRating = -1, int PlayersCount = 1);
|
||||
//! Overload
|
||||
void SetGameTitle(const u8 * id, const char * title) { SetGameTitle((const char *) id, title, "NULL"); };
|
||||
void SetGameTitle(const u8 * id, const char * title, char TitleType = TITLETYPE_DEFAULT) { SetGameTitle((const char *) id, title, TitleType); };
|
||||
|
||||
//! Get a game title
|
||||
const char * GetTitle(const char * id) const;
|
||||
const char * GetTitle(const char * id, bool allow_access = false) const;
|
||||
//! Overload
|
||||
const char * GetTitle(const u8 * id) const { return GetTitle((const char *) id); };
|
||||
const char * GetTitle(const u8 * id, bool allow_access = false) const { return GetTitle((const char *) id, allow_access); };
|
||||
//! Overload
|
||||
const char * GetTitle(const struct discHdr *header) const;
|
||||
|
||||
//! Get title type
|
||||
char GetTitleType(const char * id) const;
|
||||
//! Get game region
|
||||
const char * GetRegion(const char * id) const;
|
||||
//! Get game parental rating
|
||||
@ -39,16 +54,18 @@ class CGameTitles
|
||||
//! Get possible number of players for this game
|
||||
int GetPlayersCount(const char * id) const;
|
||||
//! Load Game Titles from GameTDB
|
||||
void LoadTitlesFromGameTDB(const char * path, bool removeUnused = true);
|
||||
void LoadTitlesFromGameTDB(const char * path);
|
||||
//! Set default game titles
|
||||
void SetDefault();
|
||||
void Reset();
|
||||
//! Free memory and remove all titles - Same as SetDefault()
|
||||
void Clear() { SetDefault(); }
|
||||
//! Cache titles functions
|
||||
u32 ReadCachedTitles(const char * path);
|
||||
void WriteCachedTitles(const char * path);
|
||||
protected:
|
||||
void GetMissingTitles(std::vector<std::string> &MissingTitles, bool removeUnused);
|
||||
int GetMissingTitles(std::vector<std::string> &MissingTitles, std::vector<struct discHdr *> &headerlist);
|
||||
void CleanTitles(std::vector<struct discHdr *> &headerlist);
|
||||
|
||||
std::vector<GameTitle> TitleList;
|
||||
};
|
||||
|
@ -385,7 +385,14 @@ enum
|
||||
PRIVSERV_ALTWFC,
|
||||
PRIVSERV_CUSTOM,
|
||||
PRIVSERV_MAX_CHOICE
|
||||
|
||||
};
|
||||
|
||||
enum TITLETYPE
|
||||
{
|
||||
TITLETYPE_DEFAULT,
|
||||
TITLETYPE_FORCED_DISC,
|
||||
TITLETYPE_FROMWIITDB,
|
||||
TITLETYPE_MANUAL_OVERRIDE = 7
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -37,6 +37,8 @@
|
||||
#include "themes/CTheme.h"
|
||||
#include "FileOperations/fileops.h"
|
||||
#include "gecko.h"
|
||||
#include "cache/cache.hpp"
|
||||
#include "usbloader/GameList.h"
|
||||
|
||||
CustomPathsSM::CustomPathsSM()
|
||||
: SettingsMenu(tr("Custom Paths"), &GuiOptions, MENU_NONE)
|
||||
@ -65,7 +67,7 @@ CustomPathsSM::CustomPathsSM()
|
||||
Options->SetName(Idx++, tr("Devolution Loader Path"));
|
||||
Options->SetName(Idx++, tr("Nintendont Loader Path"));
|
||||
Options->SetName(Idx++, tr("Cache BNR Files Path"));
|
||||
Options->SetName(Idx++, tr("Game Header Cache Files Path"));
|
||||
Options->SetName(Idx++, tr("Cache Path"));
|
||||
|
||||
SetOptionValues();
|
||||
}
|
||||
@ -143,7 +145,7 @@ void CustomPathsSM::SetOptionValues()
|
||||
//! Settings: Cache BNR Files Path
|
||||
Options->SetValue(Idx++, Settings.BNRCachePath);
|
||||
|
||||
//! Settings: Game Header Cache Files Path
|
||||
//! Settings: Cache Path
|
||||
Options->SetValue(Idx++, Settings.GameHeaderCachePath);
|
||||
}
|
||||
|
||||
@ -316,7 +318,7 @@ int CustomPathsSM::GetMenuInternal()
|
||||
else if(result == 1)
|
||||
{
|
||||
Channels::Instance()->GetEmuChannelList();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
}
|
||||
}
|
||||
|
||||
@ -372,10 +374,10 @@ int CustomPathsSM::GetMenuInternal()
|
||||
ChangePath(Settings.BNRCachePath, sizeof(Settings.BNRCachePath));
|
||||
}
|
||||
|
||||
//! Settings: Game Header Cache Files Path
|
||||
//! Settings: Cache Path
|
||||
else if (ret == ++Idx)
|
||||
{
|
||||
titleTxt->SetText(tr( "Game Header Cache Files Path" ));
|
||||
titleTxt->SetText(tr( "Cache Path" ));
|
||||
ChangePath(Settings.GameHeaderCachePath, sizeof(Settings.GameHeaderCachePath));
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include "FeatureSettingsMenu.hpp"
|
||||
#include "Channels/channels.h"
|
||||
#include "GameCube/GCGames.h"
|
||||
#include "settings/CGameCategories.hpp"
|
||||
#include "settings/CGameSettings.h"
|
||||
#include "settings/GameTitles.h"
|
||||
@ -62,14 +63,47 @@ static const char * WiilightText[WIILIGHT_MAX] =
|
||||
trNOOP( "Only for Install" )
|
||||
};
|
||||
|
||||
static const char * TitleTypeText[] =
|
||||
{
|
||||
trNOOP( "Folder" ),
|
||||
trNOOP( "Disc" ),
|
||||
trNOOP( "GameTDB" )
|
||||
};
|
||||
|
||||
FeatureSettingsMenu::FeatureSettingsMenu()
|
||||
: SettingsMenu(tr("Features Settings"), &GuiOptions, MENU_NONE)
|
||||
{
|
||||
SetOptionNames();
|
||||
SetOptionValues();
|
||||
OldTitlesType = Settings.TitlesType;
|
||||
OldCacheTitles = Settings.CacheTitles;
|
||||
}
|
||||
|
||||
FeatureSettingsMenu::~FeatureSettingsMenu()
|
||||
{
|
||||
if (Settings.TitlesType != OldTitlesType || Settings.CacheTitles != OldCacheTitles)
|
||||
{
|
||||
//! Remove cached titles and reload new titles
|
||||
GameTitles.Reset();
|
||||
gameList.clear();
|
||||
GCGames::Instance()->clear();
|
||||
Channels::Instance()->clear();
|
||||
|
||||
if ((Settings.CacheTitles && (Settings.TitlesType == TITLETYPE_FORCED_DISC || OldTitlesType == TITLETYPE_FORCED_DISC)) || (!Settings.CacheTitles && OldCacheTitles))
|
||||
ResetGameHeaderCache();
|
||||
|
||||
gameList.LoadUnfiltered();
|
||||
}
|
||||
//! EmuNAND contents might of changed
|
||||
isCacheCurrent();
|
||||
}
|
||||
|
||||
void FeatureSettingsMenu::SetOptionNames()
|
||||
{
|
||||
int Idx = 0;
|
||||
Options->SetName(Idx++, "%s", tr( "Titles from GameTDB" ));
|
||||
|
||||
Options->SetName(Idx++, "%s", tr( "Titles From" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Cache Titles" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Use Game Header Cache" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Force Titles from Disc" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Wiilight" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Rumble" ));
|
||||
Options->SetName(Idx++, "%s", tr( "AutoInit Network" ));
|
||||
@ -86,54 +120,20 @@ FeatureSettingsMenu::FeatureSettingsMenu()
|
||||
Options->SetName(Idx++, "%s", tr( "WiiU Widescreen" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Boot Neek System Menu" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Reset All Game Settings" ));
|
||||
Options->SetName(Idx++, "%s", tr( "Reset Game Header Cache" ));
|
||||
|
||||
OldTitlesOverride = Settings.titlesOverride;
|
||||
OldCacheTitles = Settings.CacheTitles;
|
||||
OldForceDiscTitles = Settings.ForceDiscTitles;
|
||||
|
||||
SetOptionValues();
|
||||
}
|
||||
|
||||
FeatureSettingsMenu::~FeatureSettingsMenu()
|
||||
{
|
||||
if ( Settings.titlesOverride != OldTitlesOverride
|
||||
|| Settings.CacheTitles != OldCacheTitles
|
||||
|| Settings.ForceDiscTitles != OldForceDiscTitles)
|
||||
{
|
||||
if(Settings.ForceDiscTitles)
|
||||
Settings.titlesOverride = OFF;
|
||||
|
||||
//! Remove cached titles and reload new titles
|
||||
GameTitles.SetDefault();
|
||||
if(Settings.titlesOverride) {
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
//! Don't override titles, in other words read them from disc header or directory names
|
||||
gameList.ReadGameList();
|
||||
gameList.LoadUnfiltered();
|
||||
}
|
||||
}
|
||||
if (Settings.CacheTitles)
|
||||
Options->SetName(Idx++, "%s", tr( "Reset Cached Titles" ));
|
||||
}
|
||||
|
||||
void FeatureSettingsMenu::SetOptionValues()
|
||||
{
|
||||
int Idx = 0;
|
||||
|
||||
//! Settings: Titles from GameTDB
|
||||
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.titlesOverride] ));
|
||||
//! Settings: Titles From
|
||||
Options->SetValue(Idx++, "%s", tr( TitleTypeText[Settings.TitlesType] ));
|
||||
|
||||
//! Settings: Cache Titles
|
||||
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.CacheTitles] ));
|
||||
|
||||
//! Settings: Use Game Header Cache
|
||||
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.UseGameHeaderCache] ));
|
||||
|
||||
//! Settings: Force Titles from Disc
|
||||
Options->SetValue(Idx++, "%s", tr( OnOffText[Settings.ForceDiscTitles] ));
|
||||
|
||||
//! Settings: Wiilight
|
||||
Options->SetValue(Idx++, "%s", tr( WiilightText[Settings.wiilight] ));
|
||||
|
||||
@ -191,28 +191,19 @@ int FeatureSettingsMenu::GetMenuInternal()
|
||||
int Idx = -1;
|
||||
|
||||
|
||||
//! Settings: Titles from GameTDB
|
||||
//! Settings: Titles From
|
||||
if (ret == ++Idx)
|
||||
{
|
||||
if (++Settings.titlesOverride >= MAX_ON_OFF) Settings.titlesOverride = 0;
|
||||
if (++Settings.TitlesType >= 3) Settings.TitlesType = 0;
|
||||
}
|
||||
|
||||
//! Settings: Cache Titles
|
||||
else if (ret == ++Idx)
|
||||
{
|
||||
if (++Settings.CacheTitles >= MAX_ON_OFF) Settings.CacheTitles = 0;
|
||||
}
|
||||
|
||||
//! Settings: Use Game Header Cache
|
||||
else if (ret == ++Idx)
|
||||
{
|
||||
if (++Settings.UseGameHeaderCache >= MAX_ON_OFF) Settings.UseGameHeaderCache = 0;
|
||||
}
|
||||
|
||||
//! Settings: Force Titles from Disc
|
||||
else if (ret == ++Idx)
|
||||
{
|
||||
if (++Settings.ForceDiscTitles >= MAX_ON_OFF) Settings.ForceDiscTitles = 0;
|
||||
Options->ClearList();
|
||||
SetOptionNames();
|
||||
SetOptionValues();
|
||||
}
|
||||
|
||||
//! Settings: Wiilight
|
||||
@ -332,8 +323,7 @@ int FeatureSettingsMenu::GetMenuInternal()
|
||||
|
||||
for(int i = 0; i < gameList.size(); ++i)
|
||||
{
|
||||
if( gameList[i]->type != TYPE_GAME_WII_IMG
|
||||
&& gameList[i]->type != TYPE_GAME_NANDCHAN)
|
||||
if(gameList[i]->type != TYPE_GAME_WII_IMG && gameList[i]->type != TYPE_GAME_NANDCHAN)
|
||||
continue;
|
||||
|
||||
if(gameList[i]->tid != 0) //! Channels
|
||||
@ -548,7 +538,6 @@ int FeatureSettingsMenu::GetMenuInternal()
|
||||
}
|
||||
|
||||
// Refresh new EmuNAND content
|
||||
ResetGameHeaderCache();
|
||||
Channels::Instance()->GetEmuChannelList();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
}
|
||||
@ -639,7 +628,6 @@ int FeatureSettingsMenu::GetMenuInternal()
|
||||
}
|
||||
|
||||
// Refresh new EmuNAND content
|
||||
ResetGameHeaderCache();
|
||||
Channels::Instance()->GetEmuChannelList();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
}
|
||||
@ -749,14 +737,17 @@ int FeatureSettingsMenu::GetMenuInternal()
|
||||
GameSettings.RemoveAll();
|
||||
}
|
||||
|
||||
//! Reset Game Header Cache
|
||||
else if(ret == ++Idx)
|
||||
//! Reset Cached Titles
|
||||
else if(Settings.CacheTitles && ret == ++Idx)
|
||||
{
|
||||
int choice = WindowPrompt(tr( "Are you sure you want to reset?" ), 0, tr( "Yes" ), tr( "Cancel" ));
|
||||
if (choice == 1)
|
||||
{
|
||||
gameList.clear();
|
||||
GCGames::Instance()->clear();
|
||||
Channels::Instance()->clear();
|
||||
ResetGameHeaderCache();
|
||||
gameList.ReadGameList();
|
||||
gameList.LoadUnfiltered();
|
||||
}
|
||||
}
|
||||
SetOptionValues();
|
||||
|
@ -32,12 +32,12 @@ class FeatureSettingsMenu : public SettingsMenu
|
||||
FeatureSettingsMenu();
|
||||
virtual ~FeatureSettingsMenu();
|
||||
protected:
|
||||
void SetOptionNames();
|
||||
void SetOptionValues();
|
||||
int GetMenuInternal();
|
||||
|
||||
int OldTitlesOverride;
|
||||
int OldTitlesType;
|
||||
int OldCacheTitles;
|
||||
int OldForceDiscTitles;
|
||||
|
||||
OptionList GuiOptions;
|
||||
};
|
||||
|
@ -280,7 +280,7 @@ int GuiSettingsMenu::GetMenuInternal()
|
||||
if (returnhere == 2)
|
||||
{
|
||||
//! Language changed. Reload game titles with new lang code.
|
||||
GameTitles.SetDefault();
|
||||
GameTitles.Reset();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
return MENU_SETTINGS;
|
||||
}
|
||||
|
@ -124,7 +124,6 @@ HardDriveSM::~HardDriveSM()
|
||||
//! Reload the new game titles
|
||||
gameList.ReadGameList();
|
||||
gameList.LoadUnfiltered();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
|
||||
|
||||
if(oldSettingsUSBAutoMount != Settings.USBAutoMount || NewSettingsUSBPort == -1)
|
||||
{
|
||||
|
@ -226,7 +226,6 @@ LoaderSettings::~LoaderSettings()
|
||||
}
|
||||
|
||||
gameList.LoadUnfiltered();
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path, false);
|
||||
}
|
||||
|
||||
if(oldGameCubeSource != Settings.GameCubeSource)
|
||||
@ -1067,4 +1066,3 @@ int LoaderSettings::GetMenuInternal()
|
||||
|
||||
return MENU_NONE;
|
||||
}
|
||||
|
||||
|
@ -129,17 +129,17 @@ int UninstallSM::GetMenuInternal()
|
||||
if(ret >= 0)
|
||||
{
|
||||
wString oldFilter(gameList.GetCurrentFilter());
|
||||
ResetGameHeaderCache();
|
||||
gameList.ReadGameList();
|
||||
gameList.FilterList(oldFilter.c_str());
|
||||
isCacheCurrent();
|
||||
}
|
||||
}
|
||||
else if(DiscHeader->type == TYPE_GAME_GC_IMG)
|
||||
{
|
||||
GCGames::Instance()->RemoveGame(GameID);
|
||||
ResetGameHeaderCache();
|
||||
// Reload list
|
||||
GCGames::Instance()->LoadAllGames();
|
||||
isCacheCurrent();
|
||||
}
|
||||
else if(DiscHeader->type == TYPE_GAME_EMUNANDCHAN && DiscHeader->tid != 0)
|
||||
{
|
||||
@ -151,8 +151,8 @@ int UninstallSM::GetMenuInternal()
|
||||
snprintf(filepath, sizeof(filepath), "%s/title/%08x/%08x/", Settings.NandEmuChanPath, (unsigned int) (DiscHeader->tid >> 32), (unsigned int) DiscHeader->tid);
|
||||
RemoveDirectory(filepath);
|
||||
|
||||
ResetGameHeaderCache();
|
||||
Channels::Instance()->GetEmuChannelList();
|
||||
isCacheCurrent();
|
||||
}
|
||||
|
||||
if(choice == 2)
|
||||
|
@ -91,8 +91,7 @@ void AppCleanUp(void)
|
||||
|
||||
BannerAsync::ThreadExit();
|
||||
|
||||
if(Settings.CacheTitles)
|
||||
GameTitles.WriteCachedTitles(Settings.titlestxt_path);
|
||||
GameTitles.WriteCachedTitles(Settings.titlestxt_path);
|
||||
Settings.Save();
|
||||
|
||||
ExitGUIThreads();
|
||||
|
@ -55,8 +55,10 @@ void GameList::clear()
|
||||
FullGameList.clear();
|
||||
GamePartitionList.clear();
|
||||
FilteredList.clear();
|
||||
EnabledGameList.clear();
|
||||
//! Clear memory of the vector completely
|
||||
std::vector<struct discHdr *>().swap(FilteredList);
|
||||
std::vector<struct discHdr *>().swap(EnabledGameList);
|
||||
std::vector<struct discHdr>().swap(FullGameList);
|
||||
std::vector<int>().swap(GamePartitionList);
|
||||
}
|
||||
@ -118,6 +120,9 @@ int GameList::InternalReadList(int part)
|
||||
if (cnt == 0)
|
||||
return 0;
|
||||
|
||||
// Sort the titles by game ID for faster searching
|
||||
GameTitles.SortTitleList();
|
||||
|
||||
/* Buffer length */
|
||||
u32 len = sizeof(struct discHdr) * cnt;
|
||||
|
||||
@ -165,14 +170,14 @@ int GameList::InternalReadList(int part)
|
||||
return PartGameList.size();
|
||||
}
|
||||
|
||||
int GameList::ReadGameList()
|
||||
int GameList::ReadGameList(bool use_cache)
|
||||
{
|
||||
if (Settings.UseGameHeaderCache && isCacheFile(WII_HEADER_CACHE_FILE))
|
||||
if (use_cache && Settings.CacheTitles && isCacheFile(WII_HEADER_CACHE_FILE))
|
||||
{
|
||||
if (FullGameList.empty() && GamePartitionList.empty())
|
||||
LoadGameHeaderCache(FullGameList, GamePartitionList);
|
||||
if (!FullGameList.empty())
|
||||
return (int)FullGameList.size();
|
||||
return FullGameList.size();
|
||||
}
|
||||
// Clear list
|
||||
FullGameList.clear();
|
||||
@ -199,17 +204,16 @@ int GameList::ReadGameList()
|
||||
}
|
||||
}
|
||||
|
||||
if (Settings.UseGameHeaderCache && !FullGameList.empty() && !GamePartitionList.empty())
|
||||
if (Settings.CacheTitles)
|
||||
SaveGameHeaderCache(FullGameList, GamePartitionList);
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
void GameList::InternalFilterList(std::vector<struct discHdr> &FullList)
|
||||
void GameList::InternalFilterList(std::vector<struct discHdr *> &FullList)
|
||||
{
|
||||
for (u32 i = 0; i < FullList.size(); ++i)
|
||||
{
|
||||
struct discHdr *header = &FullList[i];
|
||||
struct discHdr *header = FullList[i];
|
||||
|
||||
/* Register game */
|
||||
NewTitles::Instance()->CheckGame(header->id);
|
||||
@ -231,7 +235,7 @@ void GameList::InternalFilterList(std::vector<struct discHdr> &FullList)
|
||||
}
|
||||
}
|
||||
|
||||
//ignore uLoader cfg "iso". i was told it is "__CFG_" but not confirmed
|
||||
// Ignore uLoader cfg "iso". i was told it is "__CFG_" but not confirmed
|
||||
if (strncasecmp((char *)header->id, "__CFG_", 6) == 0)
|
||||
continue;
|
||||
|
||||
@ -326,65 +330,27 @@ void GameList::InternalFilterList(std::vector<struct discHdr> &FullList)
|
||||
|
||||
int GameList::FilterList(const wchar_t *gameFilter)
|
||||
{
|
||||
if ((Settings.LoaderMode & MODE_WIIGAMES) && (FullGameList.size() == 0))
|
||||
ReadGameList();
|
||||
|
||||
if (gameFilter)
|
||||
GameFilter.assign(gameFilter);
|
||||
|
||||
FilteredList.clear();
|
||||
|
||||
int allType = DISABLED;
|
||||
// Verify the display mode for category "All"
|
||||
for (u32 n = 0; n < Settings.EnabledCategories.size(); ++n)
|
||||
{
|
||||
if (Settings.EnabledCategories[n] == 0)
|
||||
{
|
||||
allType = ENABLED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Settings.UseGameHeaderCache && allType == ENABLED && Settings.godmode && isCacheFile(FilteredListCacheFileName(gameFilter)))
|
||||
{
|
||||
LoadFilteredListCache(FilteredList, GameFilter.c_str());
|
||||
GuiSearchBar::FilterList(FilteredList, GameFilter);
|
||||
if (!FilteredList.empty())
|
||||
return FilteredList.size();
|
||||
}
|
||||
|
||||
// Filter current game list if selected
|
||||
if (Settings.LoaderMode & MODE_WIIGAMES)
|
||||
InternalFilterList(FullGameList);
|
||||
|
||||
// Filter gc game list if selected
|
||||
if (Settings.LoaderMode & MODE_GCGAMES)
|
||||
InternalFilterList(GCGames::Instance()->GetHeaders());
|
||||
|
||||
// Filter nand channel list if selected
|
||||
if (Settings.LoaderMode & MODE_NANDCHANNELS)
|
||||
InternalFilterList(Channels::Instance()->GetNandHeaders());
|
||||
|
||||
// Filter emu nand channel list if selected
|
||||
if (Settings.LoaderMode & MODE_EMUCHANNELS)
|
||||
InternalFilterList(Channels::Instance()->GetEmuHeaders());
|
||||
EnabledList();
|
||||
InternalFilterList(EnabledGameList);
|
||||
|
||||
NewTitles::Instance()->Save();
|
||||
GuiSearchBar::FilterList(FilteredList, GameFilter);
|
||||
|
||||
SortList();
|
||||
|
||||
if (Settings.UseGameHeaderCache && allType == ENABLED && Settings.godmode && !FilteredList.empty() && (Settings.GameSort & SORT_RANKING) == 0 && (Settings.GameSort & SORT_PLAYCOUNT) == 0 && (Settings.GameSort & SORT_FAVORITE) == 0)
|
||||
SaveFilteredListCache(FilteredList, GameFilter.c_str());
|
||||
|
||||
return FilteredList.size();
|
||||
}
|
||||
|
||||
void GameList::InternalLoadUnfiltered(std::vector<struct discHdr> &FullList)
|
||||
void GameList::InternalLoadUnfiltered(std::vector<struct discHdr *> &FullList)
|
||||
{
|
||||
for (u32 i = 0; i < FullList.size(); ++i)
|
||||
{
|
||||
struct discHdr *header = &FullList[i];
|
||||
struct discHdr *header = FullList[i];
|
||||
|
||||
/* Register game */
|
||||
NewTitles::Instance()->CheckGame(header->id);
|
||||
@ -395,47 +361,66 @@ void GameList::InternalLoadUnfiltered(std::vector<struct discHdr> &FullList)
|
||||
|
||||
int GameList::LoadUnfiltered()
|
||||
{
|
||||
if ((Settings.LoaderMode & MODE_WIIGAMES) && (FullGameList.size() == 0))
|
||||
ReadGameList();
|
||||
|
||||
GameFilter.clear();
|
||||
FilteredList.clear();
|
||||
|
||||
if (Settings.UseGameHeaderCache && isCacheFile(FilteredListCacheFileName()))
|
||||
{
|
||||
LoadFilteredListCache(FilteredList, GameFilter.c_str());
|
||||
GuiSearchBar::FilterList(FilteredList, GameFilter);
|
||||
if (!FilteredList.empty())
|
||||
return FilteredList.size();
|
||||
}
|
||||
|
||||
// Filter current game list if selected
|
||||
if (Settings.LoaderMode & MODE_WIIGAMES)
|
||||
InternalLoadUnfiltered(FullGameList);
|
||||
|
||||
// Filter gc game list if selected
|
||||
if (Settings.LoaderMode & MODE_GCGAMES)
|
||||
InternalLoadUnfiltered(GCGames::Instance()->GetHeaders());
|
||||
|
||||
// Filter nand channel list if selected
|
||||
if (Settings.LoaderMode & MODE_NANDCHANNELS)
|
||||
InternalLoadUnfiltered(Channels::Instance()->GetNandHeaders());
|
||||
|
||||
// Filter emu nand channel list if selected
|
||||
if (Settings.LoaderMode & MODE_EMUCHANNELS)
|
||||
InternalLoadUnfiltered(Channels::Instance()->GetEmuHeaders());
|
||||
EnabledList();
|
||||
InternalLoadUnfiltered(EnabledGameList);
|
||||
|
||||
NewTitles::Instance()->Save();
|
||||
GuiSearchBar::FilterList(FilteredList, GameFilter);
|
||||
|
||||
SortList();
|
||||
|
||||
if (Settings.UseGameHeaderCache && !FilteredList.empty() && (Settings.GameSort & SORT_RANKING) == 0 && (Settings.GameSort & SORT_PLAYCOUNT) == 0 && (Settings.GameSort & SORT_FAVORITE) == 0)
|
||||
SaveFilteredListCache(FilteredList, GameFilter.c_str());
|
||||
|
||||
return FilteredList.size();
|
||||
}
|
||||
|
||||
int GameList::EnabledList()
|
||||
{
|
||||
EnabledGameList.clear();
|
||||
|
||||
if (Settings.TitlesType == TITLETYPE_FROMWIITDB)
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
|
||||
GetGameListHeaders(EnabledGameList, Settings.LoaderMode);
|
||||
|
||||
return EnabledGameList.size();
|
||||
}
|
||||
|
||||
void GameList::InternalGetGameListHeaders(std::vector<struct discHdr *> &tmplist, std::vector<struct discHdr> &FullList)
|
||||
{
|
||||
for (u32 i = 0; i < FullList.size(); ++i)
|
||||
{
|
||||
struct discHdr *header = &FullList[i];
|
||||
tmplist.push_back(header);
|
||||
}
|
||||
}
|
||||
|
||||
int GameList::GetGameListHeaders(std::vector<struct discHdr *> &tmplist, short LoaderMode)
|
||||
{
|
||||
// Filter current game list if selected
|
||||
if (LoaderMode & MODE_WIIGAMES)
|
||||
{
|
||||
if (FullGameList.size() == 0)
|
||||
ReadGameList(true);
|
||||
InternalGetGameListHeaders(tmplist, FullGameList);
|
||||
}
|
||||
|
||||
// Filter GC game list if selected
|
||||
if (LoaderMode & MODE_GCGAMES)
|
||||
InternalGetGameListHeaders(tmplist, GCGames::Instance()->GetHeaders());
|
||||
|
||||
// Filter NAND channel list if selected
|
||||
if (LoaderMode & MODE_NANDCHANNELS)
|
||||
InternalGetGameListHeaders(tmplist, Channels::Instance()->GetNandHeaders());
|
||||
|
||||
// Filter EmuNAND channel list if selected
|
||||
if (LoaderMode & MODE_EMUCHANNELS)
|
||||
InternalGetGameListHeaders(tmplist, Channels::Instance()->GetEmuHeaders());
|
||||
|
||||
return tmplist.size();
|
||||
}
|
||||
|
||||
void GameList::SortList()
|
||||
{
|
||||
if (FilteredList.size() < 2)
|
||||
|
@ -10,11 +10,12 @@ class GameList
|
||||
{
|
||||
public:
|
||||
GameList() : selectedGame(0) { };
|
||||
int ReadGameList();
|
||||
int ReadGameList(bool use_cache = false);
|
||||
int size() const { return FilteredList.size(); }
|
||||
int GameCount() const { return FullGameList.size(); }
|
||||
int FilterList(const wchar_t * gameFilter = NULL);
|
||||
int LoadUnfiltered();
|
||||
int EnabledList();
|
||||
struct discHdr * at(int i) const { return operator[](i); }
|
||||
struct discHdr * operator[](int i) const { if (i < 0 || i >= (int) FilteredList.size()) return NULL; return FilteredList[i]; }
|
||||
struct discHdr * GetDiscHeader(const char * gameID) const;
|
||||
@ -35,10 +36,12 @@ class GameList
|
||||
void RemovePartition(int part_num);
|
||||
std::vector<struct discHdr *> &GetFilteredList(void) { return FilteredList; }
|
||||
std::vector<struct discHdr> &GetFullGameList(void) { return FullGameList; }
|
||||
int GetGameListHeaders(std::vector<struct discHdr *> &tmplist, short LoaderMode);
|
||||
protected:
|
||||
int InternalReadList(int part);
|
||||
void InternalFilterList(std::vector<struct discHdr> &FullList);
|
||||
void InternalLoadUnfiltered(std::vector<struct discHdr> &FullList);
|
||||
void InternalFilterList(std::vector<struct discHdr *> &FullList);
|
||||
void InternalLoadUnfiltered(std::vector<struct discHdr *> &FullList);
|
||||
void InternalGetGameListHeaders(std::vector<struct discHdr *> &tmplist, std::vector<struct discHdr> &FullList);
|
||||
static bool NameSortCallback(const struct discHdr *a, const struct discHdr *b);
|
||||
static bool PlaycountSortCallback(const struct discHdr *a, const struct discHdr *b);
|
||||
static bool RankingSortCallback(const struct discHdr *a, const struct discHdr *b);
|
||||
@ -47,6 +50,7 @@ class GameList
|
||||
wString GameFilter;
|
||||
int selectedGame;
|
||||
std::vector<struct discHdr *> FilteredList;
|
||||
std::vector<struct discHdr *> EnabledGameList;
|
||||
std::vector<struct discHdr> FullGameList;
|
||||
std::vector<int> GamePartitionList;
|
||||
};
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "settings/GameTitles.h"
|
||||
#include "xml/GameTDB.hpp"
|
||||
#include "utils/ShowError.h"
|
||||
#include "cache/cache.hpp"
|
||||
|
||||
static int FindGamePartition()
|
||||
{
|
||||
@ -25,6 +26,7 @@ static int FindGamePartition()
|
||||
|
||||
if (WBFS_OpenPart(i) == 0)
|
||||
{
|
||||
GameTitles.SortTitleList();
|
||||
Settings.partition = i;
|
||||
return 0;
|
||||
}
|
||||
@ -54,6 +56,7 @@ static int FindGamePartition()
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
GameTitles.SortTitleList();
|
||||
Settings.partition = i;
|
||||
return 0;
|
||||
}
|
||||
@ -66,6 +69,7 @@ static int FindGamePartition()
|
||||
|
||||
if(firstValidPartition >= 0)
|
||||
{
|
||||
GameTitles.SortTitleList();
|
||||
Settings.partition = firstValidPartition;
|
||||
return 0;
|
||||
}
|
||||
@ -167,13 +171,10 @@ int MountGamePartition(bool ShowGUI)
|
||||
Sys_LoadMenu();
|
||||
}
|
||||
|
||||
gprintf("LoadTitlesFromGameTDB\n");
|
||||
//! gameList is loaded in GameTitles.LoadTitlesFromGameTDB after cache file load
|
||||
//! for speed up purpose. If titles override active, load game list here.
|
||||
if(Settings.titlesOverride)
|
||||
GameTitles.LoadTitlesFromGameTDB(Settings.titlestxt_path);
|
||||
else
|
||||
gameList.LoadUnfiltered();
|
||||
if(ShowGUI && Settings.CacheCheck && !isCacheCurrent())
|
||||
ResetGameHeaderCache();
|
||||
|
||||
gameList.LoadUnfiltered();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include "gecko.h"
|
||||
|
||||
#define MAX_FAT_PATH 1024
|
||||
#define TITLE_LEN 64
|
||||
#define TITLE_LEN 130
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -367,19 +367,24 @@ bool Wbfs_Fat::CheckLayoutB(char *fname, int len, u8* id, char *fname_title)
|
||||
void Wbfs_Fat::AddHeader(struct discHdr *discHeader)
|
||||
{
|
||||
//! First allocate before reallocating
|
||||
if(!fat_hdr_list)
|
||||
fat_hdr_list = (struct discHdr *) malloc(sizeof(struct discHdr));
|
||||
if (!fat_hdr_list)
|
||||
fat_hdr_list = (struct discHdr *)malloc(sizeof(struct discHdr));
|
||||
|
||||
struct discHdr *tmpList = (struct discHdr *) realloc(fat_hdr_list, (fat_hdr_count+1) * sizeof(struct discHdr));
|
||||
if(!tmpList)
|
||||
return; //out of memory, keep the list until now and stop
|
||||
struct discHdr *tmpList = (struct discHdr *)realloc(fat_hdr_list, (fat_hdr_count + 1) * sizeof(struct discHdr));
|
||||
if (!tmpList)
|
||||
return; // out of memory, keep the list until now and stop
|
||||
|
||||
for(int j = 0; j < 6; ++j)
|
||||
discHeader->id[j] = toupper((int) discHeader->id[j]);
|
||||
for (int j = 0; j < 6; ++j)
|
||||
discHeader->id[j] = toupper((int)discHeader->id[j]);
|
||||
|
||||
std::string title(discHeader->title);
|
||||
title.erase(0, title.find_first_not_of(' '));
|
||||
snprintf(discHeader->title, sizeof(discHeader->title), "%s", title.c_str());
|
||||
|
||||
fat_hdr_list = tmpList;
|
||||
memcpy(&fat_hdr_list[fat_hdr_count], discHeader, sizeof(struct discHdr));
|
||||
GameTitles.SetGameTitle(discHeader->id, discHeader->title);
|
||||
if ((Settings.TitlesType == TITLETYPE_FORCED_DISC && GameTitles.GetTitleType((const char *)discHeader->id) != TITLETYPE_MANUAL_OVERRIDE))
|
||||
GameTitles.SetGameTitle((const char *)discHeader->id, discHeader->title, TITLETYPE_FORCED_DISC);
|
||||
fat_hdr_count++;
|
||||
}
|
||||
|
||||
@ -395,7 +400,6 @@ s32 Wbfs_Fat::GetHeadersCount()
|
||||
int len;
|
||||
u8 id[8];
|
||||
memset(id, 0, sizeof(id));
|
||||
const char *title;
|
||||
DIR *dir_iter;
|
||||
struct dirent *dirent;
|
||||
|
||||
@ -491,17 +495,18 @@ s32 Wbfs_Fat::GetHeadersCount()
|
||||
snprintf(fpath, sizeof(fpath), "%s/%s/%.6s.wbfs", path, dirent->d_name, (char *) id);
|
||||
}
|
||||
|
||||
// if we have titles.txt entry use that
|
||||
title = GameTitles.GetTitle(id);
|
||||
// if no titles.txt get title from dir or file name
|
||||
if (strlen(title) == 0 && !Settings.ForceDiscTitles && strlen(fname_title) > 0)
|
||||
title = fname_title;
|
||||
std::string title = "";
|
||||
if (Settings.TitlesType == TITLETYPE_FORCED_DISC && GameTitles.GetTitleType((const char *)id) == TITLETYPE_FORCED_DISC)
|
||||
title.assign(GameTitles.GetTitle((const char *)id));
|
||||
|
||||
if (strlen(title) > 0)
|
||||
if (title.length() == 0 && Settings.TitlesType != TITLETYPE_FORCED_DISC && strlen(fname_title) > 0)
|
||||
title.assign(fname_title);
|
||||
|
||||
if (*id != 0 && title.length() > 0 && title.length() < 64)
|
||||
{
|
||||
memset(&tmpHdr, 0, sizeof(tmpHdr));
|
||||
memcpy(tmpHdr.id, id, sizeof(tmpHdr.id));
|
||||
snprintf(tmpHdr.title, sizeof(tmpHdr.title), "%s", title);
|
||||
snprintf(tmpHdr.title, sizeof(tmpHdr.title), "%s", title.c_str());
|
||||
tmpHdr.magic = 0x5D1C9EA3;
|
||||
AddHeader(&tmpHdr);
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user