mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-12-23 10:21:55 +01:00
fix a little bug
add function to create gameList based on installed channels. not used yet.
This commit is contained in:
parent
c797c3fa13
commit
aa936a5c43
@ -23,7 +23,7 @@
|
||||
#include "sys.h"
|
||||
#include "network/http.h"
|
||||
#include <zlib.h>
|
||||
#include "Settings/cfg.h"
|
||||
#include "settings/cfg.h"
|
||||
#include "unzip/unzip.h"
|
||||
#include "unzip/miniunz.h"
|
||||
|
||||
|
@ -64,7 +64,7 @@ float gamesize;
|
||||
int currentMenu;
|
||||
int idiotFlag=-1;
|
||||
char idiotChar[50];
|
||||
u8 dvdMounted=0;
|
||||
u8 mountMethod=0;
|
||||
struct discHdr *dvdheader = NULL;
|
||||
|
||||
|
||||
@ -222,7 +222,7 @@ void rockout(int f = 0) {
|
||||
if ((!(strcasestr(get_title(&gameList[num]),"guitar")||
|
||||
strcasestr(get_title(&gameList[num]),"band")||
|
||||
strcasestr(get_title(&gameList[num]),"rock")||
|
||||
f==1))||dvdMounted) {
|
||||
f==1))||mountMethod) {
|
||||
for (int i = 0; i < 4; i++)
|
||||
delete pointer[i];
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path);
|
||||
@ -336,6 +336,13 @@ int MenuDiscList() {
|
||||
char dvdID[8];
|
||||
if (!dvdheader)
|
||||
dvdheader = new struct discHdr;
|
||||
u8 mountMethodOLD =0;
|
||||
|
||||
|
||||
|
||||
///WII_Initialize();
|
||||
///WII_LaunchTitle(TITLE_ID(0x00010001,0xJODI));
|
||||
|
||||
|
||||
|
||||
|
||||
@ -362,6 +369,7 @@ int MenuDiscList() {
|
||||
char theTime[80]="";
|
||||
time_t lastrawtime=0;
|
||||
|
||||
if (mountMethod!=3)
|
||||
WBFS_DiskSpace(&used, &freespace);
|
||||
|
||||
if (!gameCnt) { //if there is no list of games to display
|
||||
@ -454,13 +462,13 @@ int MenuDiscList() {
|
||||
|
||||
|
||||
char spaceinfo[30];
|
||||
sprintf(spaceinfo,"%.2fGB %s %.2fGB %s",freespace,tr("of"),(freespace+used),tr("free"));
|
||||
sprintf(spaceinfo,(mountMethod!=3?"%.2fGB %s %.2fGB %s":" "),freespace,tr("of"),(freespace+used),tr("free"));
|
||||
GuiText usedSpaceTxt(spaceinfo, 18, THEME.info);
|
||||
usedSpaceTxt.SetAlignment(THEME.hddinfo_align, ALIGN_TOP);
|
||||
usedSpaceTxt.SetPosition(THEME.hddinfo_x, THEME.hddinfo_y);
|
||||
|
||||
char GamesCnt[15];
|
||||
sprintf(GamesCnt,"%s: %i",tr("Games"), gameCnt);
|
||||
sprintf(GamesCnt,"%s: %i",(mountMethod!=3?tr("Games"):tr("Channels")), gameCnt);
|
||||
GuiText gamecntTxt(GamesCnt, 18, THEME.info);
|
||||
|
||||
GuiButton gamecntBtn(100,18);
|
||||
@ -729,7 +737,7 @@ int MenuDiscList() {
|
||||
|
||||
|
||||
|
||||
if (Settings.godmode == 1) {//only make the button have trigger & tooltip if in godmode
|
||||
if (Settings.godmode == 1 && mountMethod!=3) {//only make the button have trigger & tooltip if in godmode
|
||||
DownloadBtn.SetSoundOver(&btnSoundOver);
|
||||
DownloadBtn.SetTrigger(&trigA);
|
||||
DownloadBtn.SetTrigger(&trig1);
|
||||
@ -738,6 +746,7 @@ int MenuDiscList() {
|
||||
idBtn.SetSoundOver(&btnSoundOver);
|
||||
idBtn.SetTrigger(&trigA);
|
||||
idBtn.SetToolTip(&IDBtnTT,205,-30);
|
||||
|
||||
} else
|
||||
{
|
||||
DownloadBtn.SetRumble(false);
|
||||
@ -810,6 +819,8 @@ int MenuDiscList() {
|
||||
w.SetUpdateCallback(DiscListWinUpdateCallback);
|
||||
// End Toolbar
|
||||
|
||||
|
||||
|
||||
if (Settings.godmode == 1)
|
||||
w.Append(&homebrewBtn);
|
||||
|
||||
@ -838,6 +849,7 @@ int MenuDiscList() {
|
||||
|
||||
ResumeGui();
|
||||
|
||||
|
||||
while (menu == MENU_NONE) {
|
||||
|
||||
if (idiotFlag==1) {
|
||||
@ -936,7 +948,7 @@ int MenuDiscList() {
|
||||
}
|
||||
}
|
||||
|
||||
} else if (gamecntBtn.GetState() == STATE_CLICKED) {
|
||||
} else if (gamecntBtn.GetState() == STATE_CLICKED && mountMethod!=3) {
|
||||
|
||||
char linebuf[150];
|
||||
snprintf(linebuf, sizeof(linebuf), "%s %sGameList ?",tr("Save Game List to"), Settings.update_path);
|
||||
@ -945,16 +957,7 @@ int MenuDiscList() {
|
||||
|
||||
if (choice==1)
|
||||
{
|
||||
if (save_gamelist(0))
|
||||
WindowPrompt(0,tr("Saved"), tr("OK"));
|
||||
else
|
||||
WindowPrompt(tr("Error"),tr("Could not save."), tr("OK"));
|
||||
menu = MENU_DISCLIST;
|
||||
break;
|
||||
}
|
||||
else if (choice==2)
|
||||
{
|
||||
if (save_gamelist(1))
|
||||
if (save_gamelist(choice-1))
|
||||
WindowPrompt(0,tr("Saved"), tr("OK"));
|
||||
else
|
||||
WindowPrompt(tr("Error"),tr("Could not save."), tr("OK"));
|
||||
@ -962,6 +965,7 @@ int MenuDiscList() {
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
gamecntBtn.ResetState();
|
||||
|
||||
} else if (homeBtn.GetState() == STATE_CLICKED) {
|
||||
@ -1112,7 +1116,7 @@ int MenuDiscList() {
|
||||
|
||||
}
|
||||
|
||||
else if (searchBtn.GetState() == STATE_CLICKED) {
|
||||
else if (searchBtn.GetState() == STATE_CLICKED && mountMethod!=3) {
|
||||
|
||||
show_searchwindow=!show_searchwindow;
|
||||
HaltGui();
|
||||
@ -1270,7 +1274,7 @@ int MenuDiscList() {
|
||||
} else if (homebrewBtn.GetState() == STATE_CLICKED) {
|
||||
menu = MENU_HOMEBREWBROWSE;
|
||||
break;
|
||||
} else if (gameInfo.GetState() == STATE_CLICKED) {
|
||||
} else if (gameInfo.GetState() == STATE_CLICKED && mountMethod!=3) {
|
||||
gameInfo.ResetState();
|
||||
gameSelected = selectImg1;
|
||||
rockout();
|
||||
@ -1286,7 +1290,9 @@ int MenuDiscList() {
|
||||
}
|
||||
}
|
||||
else if (dvdBtn.GetState() == STATE_CLICKED) {
|
||||
dvdMounted=DiscMount(dvdID);
|
||||
mountMethodOLD = (mountMethod==0||mountMethod==3?mountMethod:0);
|
||||
|
||||
mountMethod=DiscMount(dvdID);
|
||||
dvdheader->id[0]=dvdID[0];
|
||||
dvdheader->id[1]=dvdID[1];
|
||||
dvdheader->id[2]=dvdID[2];
|
||||
@ -1398,8 +1404,8 @@ int MenuDiscList() {
|
||||
idBtn.SetLabel(GameIDTxt);
|
||||
w.Append(&idBtn);
|
||||
}
|
||||
|
||||
if ((Settings.sinfo == GameRegion) || (Settings.sinfo == Both)) {
|
||||
//don't try to show region for channels because all the custom channels wont follow the rules
|
||||
if (((Settings.sinfo == GameRegion) || (Settings.sinfo == Both))&&mountMethod!=3) {
|
||||
GameRegionTxt = new GuiText(gameregion, 22, THEME.info);
|
||||
GameRegionTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||||
GameRegionTxt->SetPosition(THEME.region_x, THEME.region_y);
|
||||
@ -1409,7 +1415,7 @@ int MenuDiscList() {
|
||||
}
|
||||
}
|
||||
|
||||
if (idBtn.GetState() == STATE_CLICKED) {
|
||||
if (idBtn.GetState() == STATE_CLICKED && mountMethod!=3) {
|
||||
struct discHdr * header = &gameList[gameBrowser->GetSelectedOption()];
|
||||
//enter new game ID
|
||||
char entered[10];
|
||||
@ -1426,7 +1432,7 @@ int MenuDiscList() {
|
||||
}
|
||||
}
|
||||
|
||||
if (((gameSelected >= 0) && (gameSelected < (s32)gameCnt)) || dvdMounted) {
|
||||
if (((gameSelected >= 0) && (gameSelected < (s32)gameCnt)) || mountMethod==1 || mountMethod==2) {
|
||||
if(searchBar)
|
||||
{
|
||||
HaltGui();
|
||||
@ -1434,9 +1440,9 @@ int MenuDiscList() {
|
||||
ResumeGui();
|
||||
}
|
||||
rockout();
|
||||
struct discHdr *header = (dvdMounted?dvdheader:&gameList[gameSelected]);
|
||||
struct discHdr *header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]);
|
||||
// struct discHdr *header = dvdheader:&gameList[gameSelected]);
|
||||
if (!dvdMounted)//only get this stuff it we are booting a game from USB
|
||||
if (!mountMethod)//only get this stuff it we are booting a game from USB
|
||||
{
|
||||
WBFS_GameSize(header->id, &size);
|
||||
if (strlen(get_title(header)) < (MAX_CHARACTERS + 3)) {
|
||||
@ -1451,7 +1457,7 @@ int MenuDiscList() {
|
||||
//check if alt Dol and gct file is present
|
||||
FILE *exeFile = NULL;
|
||||
char nipple[100];
|
||||
header = (dvdMounted?dvdheader:&gameList[gameSelected]); //reset header
|
||||
header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]); //reset header
|
||||
snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
||||
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
|
||||
|
||||
@ -1574,7 +1580,7 @@ int MenuDiscList() {
|
||||
ResumeGui();
|
||||
|
||||
//re-evaluate header now in case they changed games while on the game prompt
|
||||
header = (dvdMounted?dvdheader:&gameList[gameSelected]);
|
||||
header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]);
|
||||
int settret = GameSettings(header);
|
||||
/* unneeded for now, kept in case database gets a separate language setting
|
||||
//menu = MENU_DISCLIST; // refresh titles (needed if the language setting has changed)
|
||||
@ -1593,7 +1599,7 @@ int MenuDiscList() {
|
||||
rockout(2);
|
||||
}
|
||||
|
||||
else if (choice == 3 && !dvdMounted) { //WBFS renaming
|
||||
else if (choice == 3 && !mountMethod) { //WBFS renaming
|
||||
wiilight(0);
|
||||
//re-evaluate header now in case they changed games while on the game prompt
|
||||
header = &gameList[gameSelected];
|
||||
@ -1610,7 +1616,7 @@ int MenuDiscList() {
|
||||
}
|
||||
} else if (choice == 0) {
|
||||
rockout(2);
|
||||
dvdMounted =0;
|
||||
if (mountMethod==1||mountMethod==2)mountMethod = mountMethodOLD;
|
||||
if (Settings.gameDisplay==list) {
|
||||
gameBrowser->SetFocus(1);
|
||||
} else if (Settings.gameDisplay==grid) {
|
||||
@ -1648,7 +1654,7 @@ int MenuDiscList() {
|
||||
|
||||
// set alt dol default
|
||||
if (menu == MENU_EXIT && altdoldefault) {
|
||||
struct discHdr *header = (dvdMounted?dvdheader:&gameList[gameSelected]);
|
||||
struct discHdr *header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]);
|
||||
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
|
||||
// use default only if no alt dol was selected manually
|
||||
if (game_cfg) {
|
||||
@ -1688,8 +1694,6 @@ int MenuDiscList() {
|
||||
gameGrid = NULL;
|
||||
delete gameCarousel;
|
||||
gameCarousel = NULL;
|
||||
//delete dvdheader;
|
||||
//dvdheader = NULL;
|
||||
ResumeGui();
|
||||
return menu;
|
||||
}
|
||||
@ -2163,12 +2167,14 @@ int MainMenu(int menu) {
|
||||
}
|
||||
|
||||
//MemInfoPrompt();
|
||||
if (dvdMounted)
|
||||
//for testing
|
||||
/*if (mountMethod)
|
||||
{
|
||||
char tmp[30];
|
||||
sprintf(tmp,"boot method --> %i",dvdMounted);
|
||||
sprintf(tmp,"boot method --> %i",mountMethod);
|
||||
WindowPrompt(0,tmp,0,0,0,0,100);
|
||||
}
|
||||
*/
|
||||
CloseXMLDatabase();
|
||||
ExitGUIThreads();
|
||||
bgMusic->Stop();
|
||||
@ -2186,7 +2192,17 @@ int MainMenu(int menu) {
|
||||
delete fontSystem;
|
||||
ShutdownAudio();
|
||||
StopGX();
|
||||
if (dvdMounted==2)
|
||||
if (mountMethod==3)
|
||||
{
|
||||
struct discHdr *header = &gameList[gameSelected];
|
||||
char tmp[20];
|
||||
u32 tid;
|
||||
sprintf(tmp,"%c%c%c%c",header->id[0],header->id[1],header->id[2],header->id[3]);
|
||||
memcpy(&tid, tmp, 4);
|
||||
WII_Initialize();
|
||||
WII_LaunchTitle(TITLE_ID((header->id[5]=='1'?0x00010001:0x00010002),tid));
|
||||
}
|
||||
if (mountMethod==2)
|
||||
{
|
||||
WII_Initialize();
|
||||
WII_LaunchTitle(0x0000000100000100ULL);
|
||||
@ -2199,7 +2215,7 @@ int MainMenu(int menu) {
|
||||
} else {
|
||||
|
||||
int ret = 0;
|
||||
struct discHdr *header = (dvdMounted?dvdheader:&gameList[gameSelected]);
|
||||
struct discHdr *header = (mountMethod?dvdheader:&gameList[gameSelected]);
|
||||
|
||||
struct Game_CFG* game_cfg = CFG_get_game_opt(header->id);
|
||||
|
||||
@ -2234,6 +2250,7 @@ int MainMenu(int menu) {
|
||||
}
|
||||
reloadblock = off;
|
||||
}
|
||||
|
||||
int ios2;
|
||||
switch (iosChoice) {
|
||||
case i249:
|
||||
@ -2260,7 +2277,7 @@ int MainMenu(int menu) {
|
||||
Sys_IosReload(249);
|
||||
}
|
||||
}
|
||||
if (!dvdMounted)
|
||||
if (!mountMethod)
|
||||
{
|
||||
ret = Disc_SetUSB(header->id);
|
||||
if (ret < 0) Sys_BackToLoader();
|
||||
|
@ -30,7 +30,7 @@ extern void HaltGui();
|
||||
extern GuiWindow * mainWindow;
|
||||
extern u8 shutdown;
|
||||
extern u8 reset;
|
||||
extern u8 dvdMounted;
|
||||
extern u8 mountMethod;
|
||||
|
||||
/********************************************************************************
|
||||
*Disk Browser
|
||||
@ -41,7 +41,7 @@ int DiscBrowse(struct discHdr * header) {
|
||||
u64 offset;
|
||||
|
||||
HaltGui();
|
||||
if (!dvdMounted)
|
||||
if (!mountMethod)
|
||||
{
|
||||
ret = Disc_SetUSB(header->id);
|
||||
if (ret < 0) {
|
||||
|
@ -51,7 +51,7 @@ extern float gamesize;
|
||||
extern struct discHdr * gameList;
|
||||
extern u8 shutdown;
|
||||
extern u8 reset;
|
||||
extern u8 dvdMounted;
|
||||
extern u8 mountMethod;
|
||||
extern struct discHdr *dvdheader;
|
||||
|
||||
/*** Extern functions ***/
|
||||
@ -1034,7 +1034,7 @@ int GameWindowPrompt() {
|
||||
GuiImage dialogBoxImg(&dialogBox);
|
||||
|
||||
GuiTooltip nameBtnTT(tr("Rename Game on WBFS"));
|
||||
if (Settings.wsprompt == yes && !dvdMounted)
|
||||
if (Settings.wsprompt == yes)
|
||||
nameBtnTT.SetWidescreen(CFG.widescreen);
|
||||
GuiText nameTxt("", 22, THEME.prompttext);
|
||||
if (Settings.wsprompt == yes)
|
||||
@ -1047,9 +1047,9 @@ int GameWindowPrompt() {
|
||||
nameBtn.SetPosition(0,-122);
|
||||
nameBtn.SetSoundOver(&btnSoundOver);
|
||||
nameBtn.SetSoundClick(&btnClick);
|
||||
nameBtn.SetToolTip(&nameBtnTT,24,-30, ALIGN_LEFT);
|
||||
if (!mountMethod) nameBtn.SetToolTip(&nameBtnTT,24,-30, ALIGN_LEFT);
|
||||
|
||||
if (Settings.godmode == 1 && !dvdMounted) {
|
||||
if (Settings.godmode == 1 && !mountMethod) {
|
||||
nameBtn.SetTrigger(&trigA);
|
||||
nameBtn.SetEffectGrow();
|
||||
}
|
||||
@ -1091,7 +1091,7 @@ int GameWindowPrompt() {
|
||||
btn2Img.SetWidescreen(CFG.widescreen);
|
||||
}
|
||||
GuiButton btn2(&btn2Img,&btn2Img, 1, 5, 0, 0, &trigA, &btnSoundOver, &btnClick,1);
|
||||
if (Settings.godmode == 1 && dvdMounted!=2) {
|
||||
if (Settings.godmode == 1 && mountMethod!=2 && mountMethod!=3) {
|
||||
btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM);
|
||||
btn2.SetPosition(-50, -40);
|
||||
} else {
|
||||
@ -1143,7 +1143,7 @@ int GameWindowPrompt() {
|
||||
promptWindow.Append(&nameBtn);
|
||||
promptWindow.Append(&playcntTxt);
|
||||
promptWindow.Append(&btn2);
|
||||
if (!dvdMounted)//stuff we don't show if it is a DVD mounted
|
||||
if (!mountMethod)//stuff we don't show if it is a DVD mounted
|
||||
{
|
||||
promptWindow.Append(&sizeTxt);
|
||||
promptWindow.Append(&btnLeft);
|
||||
@ -1152,7 +1152,7 @@ int GameWindowPrompt() {
|
||||
}
|
||||
|
||||
//check if unlocked
|
||||
if (Settings.godmode == 1 && dvdMounted!=2) {
|
||||
if (Settings.godmode == 1 && mountMethod!=2 && mountMethod!=3) {
|
||||
promptWindow.Append(&btn3);
|
||||
}
|
||||
|
||||
@ -1180,7 +1180,7 @@ int GameWindowPrompt() {
|
||||
}
|
||||
|
||||
//load disc image based or what game is seleted
|
||||
struct discHdr * header = (dvdMounted?dvdheader:&gameList[gameSelected]);
|
||||
struct discHdr * header = (mountMethod==1||mountMethod==2?dvdheader:&gameList[gameSelected]);
|
||||
|
||||
snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]);
|
||||
snprintf (IDFull,sizeof(IDFull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
||||
@ -1260,13 +1260,13 @@ int GameWindowPrompt() {
|
||||
} else
|
||||
diskImg.SetImage(diskCover);
|
||||
|
||||
if (!dvdMounted)
|
||||
if (!mountMethod)
|
||||
{
|
||||
WBFS_GameSize(header->id, &size);
|
||||
sizeTxt.SetTextf("%.2fGB", size); //set size text;
|
||||
}
|
||||
|
||||
nameTxt.SetText(!dvdMounted?get_title(header):IDFull);
|
||||
nameTxt.SetText(mountMethod!=1&&mountMethod!=2?get_title(header):IDFull);
|
||||
|
||||
struct Game_NUM* game_num = CFG_get_game_num(header->id);
|
||||
if (game_num) {
|
||||
|
@ -24,7 +24,16 @@
|
||||
#include "wad/wad.h"
|
||||
#include "xml/xml.h"
|
||||
#include "../wad/title.h"
|
||||
#include "unzip/inflate.h"
|
||||
#include "../usbloader/getentries.h"
|
||||
|
||||
#define typei 0x00010001
|
||||
|
||||
struct discHdr * titleList=NULL;
|
||||
//discHdr ** titleList;
|
||||
u32 titleCnt;
|
||||
|
||||
extern struct discHdr * gameList;
|
||||
extern u32 gameCnt;
|
||||
|
||||
/*** Extern functions ***/
|
||||
extern void ResumeGui();
|
||||
@ -35,8 +44,188 @@ extern GuiWindow * mainWindow;
|
||||
extern u8 shutdown;
|
||||
extern u8 reset;
|
||||
extern u32 infilesize;
|
||||
extern u32 uncfilesize;
|
||||
extern char wiiloadVersion[2];
|
||||
extern wchar_t *gameFilter;
|
||||
|
||||
inline int wcsnicmp(const wchar_t *s1, const wchar_t *s2, int len)
|
||||
{
|
||||
if (len <= 0)
|
||||
return (0);
|
||||
do
|
||||
{
|
||||
int r = towupper(*s1) - towupper(*s2++);
|
||||
if (r) return r;
|
||||
if (*s1++ == 0)
|
||||
break;
|
||||
} while (--len != 0);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************************
|
||||
* put istalled titles into a struct so it can be handled by all the other
|
||||
* shitloads of functions we have easily
|
||||
*
|
||||
*********************************************************************************/
|
||||
int buildTitleList1(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameCnt){
|
||||
|
||||
struct discHdr *buffer = NULL;
|
||||
u32 i = 0;
|
||||
u32 cnt, cnt2=0, len;
|
||||
u32 num_titles;
|
||||
u32 titles[100] ATTRIBUTE_ALIGN(32);
|
||||
u32 num_sys_titles;
|
||||
u32 sys_titles[10] ATTRIBUTE_ALIGN(32);
|
||||
s32 ret = -1;
|
||||
FILE *f;
|
||||
char path[100];
|
||||
|
||||
ISFS_Initialize();
|
||||
|
||||
sprintf(path,"%s/config/database.txt",bootDevice);
|
||||
f = fopen(path, "r");
|
||||
|
||||
ret = getTitles_TypeCount(typei, &num_titles);
|
||||
if (ret < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = getTitles_Type(typei, titles, num_titles);
|
||||
if (ret < 0) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
ret = getTitles_TypeCount(0x00010002, &num_sys_titles);
|
||||
if (ret < 0) {
|
||||
return -3;
|
||||
}
|
||||
|
||||
ret = getTitles_Type(0x00010002, sys_titles, num_sys_titles);
|
||||
if (ret < 0) {
|
||||
return -4;
|
||||
}
|
||||
|
||||
cnt = (num_titles+num_sys_titles);
|
||||
len = sizeof(struct discHdr) * cnt;
|
||||
buffer = (struct discHdr *)memalign(32, len);
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
memset(buffer, 0, len);
|
||||
|
||||
char name[64];
|
||||
while (i < (num_titles+num_sys_titles)) {
|
||||
//start from the beginning of the file each loop
|
||||
if (f)rewind(f);
|
||||
char text[15];
|
||||
strcpy(name,"");//make sure name is empty
|
||||
u8 found=0;
|
||||
|
||||
sprintf(text, "%s", titleText(i<num_titles?typei:0x00010002, i<num_titles?titles[i]:sys_titles[i-num_titles]));
|
||||
|
||||
|
||||
char line[200];
|
||||
char tmp[50];
|
||||
snprintf(tmp,50," ");
|
||||
|
||||
//check if the content.bin is on the SD card for that game
|
||||
//if there is content.bin,then the game is on the SDmenu and not the wii
|
||||
sprintf(line,"SD:/private/wii/title/%s/content.bin",text);
|
||||
if (!checkfile(line))
|
||||
{
|
||||
|
||||
struct discHdr *header = &buffer[i];
|
||||
if (f) {
|
||||
while (fgets(line, sizeof(line), f)) {
|
||||
if (line[0]== text[0]&&
|
||||
line[1]== text[1]&&
|
||||
line[2]== text[2]) {
|
||||
int j=0;
|
||||
found=1;
|
||||
for (j=0;(line[j+4]!='\0' || j<51);j++)
|
||||
|
||||
tmp[j]=line[j+4];
|
||||
snprintf(header->title,sizeof(header->title),"%s",tmp);
|
||||
//break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (getName00(header->title, TITLE_ID(i<num_titles?typei:0x00010002, i<num_titles?titles[i]:sys_titles[i-num_titles]),CONF_GetLanguage()*2)>=0)
|
||||
found=2;
|
||||
|
||||
if (!found) {
|
||||
if (getNameBN(header->title, TITLE_ID(i<num_titles?typei:0x00010002, i<num_titles?titles[i]:sys_titles[i-num_titles]))>=0)
|
||||
found=3;
|
||||
|
||||
if (!found)
|
||||
snprintf(header->title,sizeof(header->title),"%s (%08x)",text,i<num_titles?titles[i]:sys_titles[i-num_titles]);
|
||||
}
|
||||
}
|
||||
header->id[0]=text[0];
|
||||
header->id[1]=text[1];
|
||||
header->id[2]=text[2];
|
||||
header->id[3]=text[3];
|
||||
header->id[4]='G';
|
||||
header->id[5]='P';
|
||||
|
||||
//not using these filters right now, but i left them in just in case
|
||||
// Filters
|
||||
/*if (Settings.fave) {
|
||||
struct Game_NUM* game_num = CFG_get_game_num(header->id);
|
||||
if (!game_num || game_num->favorite==0)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Settings.parentalcontrol && !Settings.godmode ) {
|
||||
if (get_block(header) >= Settings.parentalcontrol)
|
||||
continue;
|
||||
}*/
|
||||
|
||||
if(gameFilter && *gameFilter) {
|
||||
u32 filter_len = wcslen(gameFilter);
|
||||
wchar_t *gameName = FreeTypeGX::charToWideChar(get_title(header));
|
||||
if (!gameName || wcsnicmp(gameName, gameFilter, filter_len)) {
|
||||
delete [] gameName;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(i != cnt2)
|
||||
buffer[cnt2] = buffer[i];
|
||||
cnt2++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
|
||||
Uninstall_FromTitle(TITLE_ID(1, 0));
|
||||
ISFS_Deinitialize();
|
||||
|
||||
if(cnt > cnt2)
|
||||
{
|
||||
cnt = cnt2;
|
||||
buffer = (struct discHdr *)realloc(buffer, sizeof(struct discHdr) * cnt);
|
||||
}
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
if (Settings.sort==pcount) {
|
||||
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount);
|
||||
} else {
|
||||
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmp);
|
||||
}
|
||||
/*PgameList = buffer;
|
||||
buffer = NULL;
|
||||
PgameCnt = cnt;*/
|
||||
|
||||
if(PgameList) *PgameList = buffer; else free(buffer);
|
||||
if(PgameCnt) *PgameCnt = cnt;
|
||||
|
||||
return 0;
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
/********************************************************************************
|
||||
* TitleBrowser- opens a browser with a list of installed Titles
|
||||
@ -419,12 +608,7 @@ int TitleBrowser(u32 type) {
|
||||
int choice = WindowPrompt(filesizetxt, temp, tr("OK"), tr("Cancel"));
|
||||
|
||||
if(choice == 1) {
|
||||
bool compressed = (wiiloadVersion[0] > 1 || wiiloadVersion[1] > 4) && uncfilesize != 0;
|
||||
|
||||
char currentPath[100];
|
||||
sprintf(currentPath, compressed ? "%s.z" : "%s", filepath);
|
||||
|
||||
FILE *file = fopen(currentPath, "wb");
|
||||
FILE *file = fopen(filepath, "wb");
|
||||
|
||||
int len = NETWORKBLOCKSIZE;
|
||||
u8 *buffer = (u8*) malloc(NETWORKBLOCKSIZE);
|
||||
@ -456,24 +640,6 @@ int TitleBrowser(u32 type) {
|
||||
}
|
||||
free(buffer);
|
||||
fclose(file);
|
||||
|
||||
if (compressed) {
|
||||
FILE *cfile = fopen(currentPath, "rb");
|
||||
FILE *ufile = fopen(filepath, "wb");
|
||||
|
||||
int r;
|
||||
if (( r = inflateFile(cfile, ufile)) != Z_OK) {
|
||||
char buf[100];
|
||||
sprintf((char *) &buf, "Inflate failed: %d", r);
|
||||
WindowPrompt(tr("Compressed:"), (char *) &buf, tr("OK"));
|
||||
}
|
||||
|
||||
fclose(cfile);
|
||||
fclose(ufile);
|
||||
|
||||
remove(currentPath);
|
||||
}
|
||||
|
||||
ProgressStop();
|
||||
|
||||
if (read != infilesize) {
|
||||
@ -481,10 +647,6 @@ int TitleBrowser(u32 type) {
|
||||
remove(filepath);
|
||||
} else {
|
||||
|
||||
if (compressed) {
|
||||
infilesize = uncfilesize;
|
||||
}
|
||||
|
||||
//determine what type of file we just got
|
||||
char filename[101];
|
||||
char tmptxt[200];
|
||||
@ -569,3 +731,4 @@ int TitleBrowser(u32 type) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -12,4 +12,6 @@
|
||||
//! type is the type of chnnel to put in the list
|
||||
int TitleBrowser(u32 type);
|
||||
|
||||
//int buildTitleList(int t=0, const wchar_t* Filter=NULL);
|
||||
|
||||
#endif
|
||||
|
@ -35,7 +35,7 @@ extern GuiImageData * pointer[4];
|
||||
extern GuiImageData * background;
|
||||
extern u8 shutdown;
|
||||
extern u8 reset;
|
||||
extern u8 dvdMounted;
|
||||
extern u8 mountMethod;
|
||||
extern struct discHdr *dvdheader;
|
||||
|
||||
/****************************************************************************
|
||||
@ -1788,7 +1788,7 @@ int GameSettings(struct discHdr * header) {
|
||||
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
|
||||
|
||||
char gameName[31];
|
||||
if (!dvdMounted)
|
||||
if (!mountMethod)
|
||||
{
|
||||
if (strlen(get_title(header)) < (27 + 3)) {
|
||||
sprintf(gameName, "%s", get_title(header));
|
||||
@ -1800,7 +1800,7 @@ int GameSettings(struct discHdr * header) {
|
||||
}
|
||||
else sprintf(gameName, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);
|
||||
|
||||
GuiText titleTxt(!dvdMounted?get_title(header):gameName, 28, (GXColor) {0, 0, 0, 255});
|
||||
GuiText titleTxt(!mountMethod?get_title(header):gameName, 28, (GXColor) {0, 0, 0, 255});
|
||||
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
titleTxt.SetPosition(12,40);
|
||||
titleTxt.SetMaxWidth(356, GuiText::SCROLL);
|
||||
@ -2367,7 +2367,7 @@ int GameSettings(struct discHdr * header) {
|
||||
switch (ret) {
|
||||
case 0:
|
||||
choice1 = WindowPrompt(tr("Do you really want to delete:"),gameName,tr("Yes"),tr("Cancel"));
|
||||
if (choice1 == 1 && !dvdMounted) {
|
||||
if (choice1 == 1 && !mountMethod) {
|
||||
CFG_forget_game_opt(header->id);
|
||||
CFG_forget_game_num(header->id);
|
||||
ret = WBFS_RemoveGame(header->id);
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "fstfile.h"
|
||||
#include "../patches/dvd_broadway.h"
|
||||
|
||||
extern u8 dvdMounted;
|
||||
extern u8 mountMethod;
|
||||
|
||||
/** Alternate dolloader made by WiiPower modified by dimok **/
|
||||
bool Load_Dol(void **buffer, int* dollen, char * filepath) {
|
||||
@ -198,7 +198,7 @@ u32 Load_Dol_from_disc(u32 doloffset, u8 videoSelected, u8 patchcountrystring, u
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!dvdMounted)ret = WDVD_Read(dol_header, sizeof(dolheader), (doloffset<<2));
|
||||
if (!mountMethod)ret = WDVD_Read(dol_header, sizeof(dolheader), (doloffset<<2));
|
||||
|
||||
else{
|
||||
dvddone = 0;
|
||||
|
@ -5,10 +5,20 @@
|
||||
#include "main.h"
|
||||
#include <wctype.h>
|
||||
#include "getentries.h"
|
||||
|
||||
#include "../prompts/TitleBrowser.h"
|
||||
|
||||
#include "wad/wad.h"
|
||||
#include "xml/xml.h"
|
||||
#include "../wad/title.h"
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
|
||||
#include "listfiles.h"
|
||||
#define typei 0x00010001
|
||||
|
||||
|
||||
struct discHdr * gameList=NULL;
|
||||
s32 gameSelected=0, gameStart=0;
|
||||
u32 gameCnt=0;
|
||||
@ -16,6 +26,8 @@ wchar_t *gameFilter=NULL;
|
||||
wchar_t *gameFilterNextList=NULL;
|
||||
wchar_t *gameFilterPrev=NULL;
|
||||
|
||||
extern u8 mountMethod;
|
||||
|
||||
/****************************************************************************
|
||||
* wcsdup based on new wchar_t [...]
|
||||
***************************************************************************/
|
||||
@ -236,6 +248,171 @@ error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
int buildTitleList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameCnt){
|
||||
|
||||
struct discHdr *buffer = NULL;
|
||||
u32 i = 0;
|
||||
u32 cnt, cnt2=0, len;
|
||||
u32 num_titles;
|
||||
u32 titles[100] ATTRIBUTE_ALIGN(32);
|
||||
u32 num_sys_titles;
|
||||
u32 sys_titles[10] ATTRIBUTE_ALIGN(32);
|
||||
s32 ret = -1;
|
||||
FILE *f;
|
||||
char path[100];
|
||||
|
||||
ISFS_Initialize();
|
||||
|
||||
sprintf(path,"%s/config/database.txt",bootDevice);
|
||||
f = fopen(path, "r");
|
||||
|
||||
ret = getTitles_TypeCount(typei, &num_titles);
|
||||
if (ret < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = getTitles_Type(typei, titles, num_titles);
|
||||
if (ret < 0) {
|
||||
return -2;
|
||||
}
|
||||
|
||||
ret = getTitles_TypeCount(0x00010002, &num_sys_titles);
|
||||
if (ret < 0) {
|
||||
return -3;
|
||||
}
|
||||
|
||||
ret = getTitles_Type(0x00010002, sys_titles, num_sys_titles);
|
||||
if (ret < 0) {
|
||||
return -4;
|
||||
}
|
||||
|
||||
cnt = (num_titles+num_sys_titles);
|
||||
len = sizeof(struct discHdr) * cnt;
|
||||
buffer = (struct discHdr *)memalign(32, len);
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
memset(buffer, 0, len);
|
||||
|
||||
char name[64];
|
||||
while (i < (num_titles+num_sys_titles)) {
|
||||
//start from the beginning of the file each loop
|
||||
if (f)rewind(f);
|
||||
char text[15];
|
||||
strcpy(name,"");//make sure name is empty
|
||||
u8 found=0;
|
||||
|
||||
sprintf(text, "%s", titleText(i<num_titles?typei:0x00010002, i<num_titles?titles[i]:sys_titles[i-num_titles]));
|
||||
|
||||
|
||||
char line[200];
|
||||
char tmp[50];
|
||||
snprintf(tmp,50," ");
|
||||
|
||||
//check if the content.bin is on the SD card for that game
|
||||
//if there is content.bin,then the game is on the SDmenu and not the wii
|
||||
sprintf(line,"SD:/private/wii/title/%s/content.bin",text);
|
||||
if (!checkfile(line))
|
||||
{
|
||||
|
||||
struct discHdr *header = &buffer[i];
|
||||
if (f) {
|
||||
while (fgets(line, sizeof(line), f)) {
|
||||
if (line[0]== text[0]&&
|
||||
line[1]== text[1]&&
|
||||
line[2]== text[2]) {
|
||||
int j=0;
|
||||
found=1;
|
||||
for (j=0;(line[j+4]!='\0' || j<51);j++)
|
||||
|
||||
tmp[j]=line[j+4];
|
||||
snprintf(header->title,sizeof(header->title),"%s",tmp);
|
||||
//break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (getName00(header->title, TITLE_ID(i<num_titles?typei:0x00010002, i<num_titles?titles[i]:sys_titles[i-num_titles]),CONF_GetLanguage()*2)>=0)
|
||||
found=2;
|
||||
|
||||
if (!found) {
|
||||
if (getNameBN(header->title, TITLE_ID(i<num_titles?typei:0x00010002, i<num_titles?titles[i]:sys_titles[i-num_titles]))>=0)
|
||||
found=3;
|
||||
|
||||
if (!found)
|
||||
snprintf(header->title,sizeof(header->title),"%s (%08x)",text,i<num_titles?titles[i]:sys_titles[i-num_titles]);
|
||||
}
|
||||
}
|
||||
//put the 4th and 8th digit of the title type as the last 2 characters here
|
||||
//no reason other than it will let us know how we should boot the title later
|
||||
header->id[0]=text[0];
|
||||
header->id[1]=text[1];
|
||||
header->id[2]=text[2];
|
||||
header->id[3]=text[3];
|
||||
header->id[4]='1';
|
||||
header->id[5]=(i<num_titles?'1':'2');
|
||||
//header->
|
||||
|
||||
//not using these filters right now, but i left them in just in case
|
||||
// Filters
|
||||
/*if (Settings.fave) {
|
||||
struct Game_NUM* game_num = CFG_get_game_num(header->id);
|
||||
if (!game_num || game_num->favorite==0)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Settings.parentalcontrol && !Settings.godmode ) {
|
||||
if (get_block(header) >= Settings.parentalcontrol)
|
||||
continue;
|
||||
}*/
|
||||
|
||||
if(gameFilter && *gameFilter) {
|
||||
u32 filter_len = wcslen(gameFilter);
|
||||
wchar_t *gameName = FreeTypeGX::charToWideChar(get_title(header));
|
||||
if (!gameName || wcsnicmp(gameName, gameFilter, filter_len)) {
|
||||
delete [] gameName;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(i != cnt2)
|
||||
buffer[cnt2] = buffer[i];
|
||||
cnt2++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
|
||||
Uninstall_FromTitle(TITLE_ID(1, 0));
|
||||
ISFS_Deinitialize();
|
||||
|
||||
if(cnt > cnt2)
|
||||
{
|
||||
cnt = cnt2;
|
||||
buffer = (struct discHdr *)realloc(buffer, sizeof(struct discHdr) * cnt);
|
||||
}
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
if (Settings.sort==pcount) {
|
||||
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount);
|
||||
} else {
|
||||
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmp);
|
||||
}
|
||||
/*PgameList = buffer;
|
||||
buffer = NULL;
|
||||
PgameCnt = cnt;*/
|
||||
|
||||
if(PgameList) *PgameList = buffer; else free(buffer);
|
||||
if(PgameCnt) *PgameCnt = cnt;
|
||||
|
||||
return 0;
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Get Gamelist
|
||||
***************************************************************************/
|
||||
@ -317,6 +494,12 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg
|
||||
|
||||
int __Menu_GetEntries(int t, const wchar_t* Filter) {
|
||||
|
||||
/*if (mountMethod==3)
|
||||
{
|
||||
return buildTitleList();
|
||||
}*/
|
||||
|
||||
|
||||
u32 new_gameCnt = 0;
|
||||
struct discHdr *new_gameList = NULL;
|
||||
wchar_t *new_gameFilter = NULL;
|
||||
@ -327,7 +510,8 @@ int __Menu_GetEntries(int t, const wchar_t* Filter) {
|
||||
if(new_gameFilter == NULL) return -1;
|
||||
for(;;)
|
||||
{
|
||||
if(__Menu_GetGameList(t, new_gameFilter, &new_gameList, &new_gameCnt) < 0)
|
||||
if(buildTitleList(t, new_gameFilter, &new_gameList, &new_gameCnt) < 0)
|
||||
//if(__Menu_GetGameList(t, new_gameFilter, &new_gameList, &new_gameCnt) < 0)
|
||||
return -1;
|
||||
if(new_gameCnt > 0 || new_gameFilter[0] == 0)
|
||||
break;
|
||||
|
@ -27,5 +27,7 @@ extern wchar_t *gameFilterPrev;
|
||||
//! if this Parameter="" then no filter is activ
|
||||
//!
|
||||
int __Menu_GetEntries(int t=0, const wchar_t* Filter=NULL);
|
||||
s32 __Menu_EntryCmpCount(const void *a, const void *b);
|
||||
s32 __Menu_EntryCmp(const void *a, const void *b);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user