fix a little bug

add function to create gameList based on installed channels.  not used yet.
This commit is contained in:
giantpune 2009-10-01 09:17:55 +00:00
parent c797c3fa13
commit aa936a5c43
10 changed files with 462 additions and 94 deletions

View File

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

View File

@ -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();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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