mirror of
https://github.com/dborth/vbagx.git
synced 2024-11-26 04:24:16 +01:00
fix slow browser issue
This commit is contained in:
parent
22d1cfea45
commit
4591df7e28
@ -533,7 +533,6 @@ int BrowserChangeFolder()
|
|||||||
sprintf(browserList[i].filename, "sd:/");
|
sprintf(browserList[i].filename, "sd:/");
|
||||||
sprintf(browserList[i].displayname, "SD Card");
|
sprintf(browserList[i].displayname, "SD Card");
|
||||||
browserList[i].length = 0;
|
browserList[i].length = 0;
|
||||||
browserList[i].mtime = 0;
|
|
||||||
browserList[i].isdir = 1;
|
browserList[i].isdir = 1;
|
||||||
browserList[i].icon = ICON_SD;
|
browserList[i].icon = ICON_SD;
|
||||||
i++;
|
i++;
|
||||||
@ -542,7 +541,6 @@ int BrowserChangeFolder()
|
|||||||
sprintf(browserList[i].filename, "usb:/");
|
sprintf(browserList[i].filename, "usb:/");
|
||||||
sprintf(browserList[i].displayname, "USB Mass Storage");
|
sprintf(browserList[i].displayname, "USB Mass Storage");
|
||||||
browserList[i].length = 0;
|
browserList[i].length = 0;
|
||||||
browserList[i].mtime = 0;
|
|
||||||
browserList[i].isdir = 1;
|
browserList[i].isdir = 1;
|
||||||
browserList[i].icon = ICON_USB;
|
browserList[i].icon = ICON_USB;
|
||||||
i++;
|
i++;
|
||||||
@ -551,7 +549,6 @@ int BrowserChangeFolder()
|
|||||||
sprintf(browserList[i].filename, "carda:/");
|
sprintf(browserList[i].filename, "carda:/");
|
||||||
sprintf(browserList[i].displayname, "SD Gecko Slot A");
|
sprintf(browserList[i].displayname, "SD Gecko Slot A");
|
||||||
browserList[i].length = 0;
|
browserList[i].length = 0;
|
||||||
browserList[i].mtime = 0;
|
|
||||||
browserList[i].isdir = 1;
|
browserList[i].isdir = 1;
|
||||||
browserList[i].icon = ICON_SD;
|
browserList[i].icon = ICON_SD;
|
||||||
i++;
|
i++;
|
||||||
@ -560,7 +557,6 @@ int BrowserChangeFolder()
|
|||||||
sprintf(browserList[i].filename, "cardb:/");
|
sprintf(browserList[i].filename, "cardb:/");
|
||||||
sprintf(browserList[i].displayname, "SD Gecko Slot B");
|
sprintf(browserList[i].displayname, "SD Gecko Slot B");
|
||||||
browserList[i].length = 0;
|
browserList[i].length = 0;
|
||||||
browserList[i].mtime = 0;
|
|
||||||
browserList[i].isdir = 1;
|
browserList[i].isdir = 1;
|
||||||
browserList[i].icon = ICON_SD;
|
browserList[i].icon = ICON_SD;
|
||||||
i++;
|
i++;
|
||||||
@ -569,7 +565,6 @@ int BrowserChangeFolder()
|
|||||||
sprintf(browserList[i].filename, "smb:/");
|
sprintf(browserList[i].filename, "smb:/");
|
||||||
sprintf(browserList[i].displayname, "Network Share");
|
sprintf(browserList[i].displayname, "Network Share");
|
||||||
browserList[i].length = 0;
|
browserList[i].length = 0;
|
||||||
browserList[i].mtime = 0;
|
|
||||||
browserList[i].isdir = 1;
|
browserList[i].isdir = 1;
|
||||||
browserList[i].icon = ICON_SMB;
|
browserList[i].icon = ICON_SMB;
|
||||||
i++;
|
i++;
|
||||||
@ -578,7 +573,6 @@ int BrowserChangeFolder()
|
|||||||
sprintf(browserList[i].filename, "dvd:/");
|
sprintf(browserList[i].filename, "dvd:/");
|
||||||
sprintf(browserList[i].displayname, "Data DVD");
|
sprintf(browserList[i].displayname, "Data DVD");
|
||||||
browserList[i].length = 0;
|
browserList[i].length = 0;
|
||||||
browserList[i].mtime = 0;
|
|
||||||
browserList[i].isdir = 1;
|
browserList[i].isdir = 1;
|
||||||
browserList[i].icon = ICON_DVD;
|
browserList[i].icon = ICON_DVD;
|
||||||
i++;
|
i++;
|
||||||
|
@ -33,7 +33,6 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
size_t length; // file length
|
size_t length; // file length
|
||||||
time_t mtime; // file modified time
|
|
||||||
int isdir; // 0 - file, 1 - directory
|
int isdir; // 0 - file, 1 - directory
|
||||||
char filename[MAXJOLIET + 1]; // full filename
|
char filename[MAXJOLIET + 1]; // full filename
|
||||||
char displayname[MAXJOLIET + 1]; // name for browser display
|
char displayname[MAXJOLIET + 1]; // name for browser display
|
||||||
|
@ -56,7 +56,7 @@ static lwp_t parsethread = LWP_THREAD_NULL;
|
|||||||
static DIR * dir = NULL;
|
static DIR * dir = NULL;
|
||||||
static bool parseHalt = true;
|
static bool parseHalt = true;
|
||||||
static bool parseFilter = true;
|
static bool parseFilter = true;
|
||||||
bool ParseDirEntries();
|
static bool ParseDirEntries();
|
||||||
int selectLoadedFile = 0;
|
int selectLoadedFile = 0;
|
||||||
|
|
||||||
// device thread
|
// device thread
|
||||||
@ -474,15 +474,30 @@ static char *GetExt(char *file)
|
|||||||
return ext;
|
return ext;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ParseDirEntries()
|
bool GetFileSize(int i)
|
||||||
|
{
|
||||||
|
if(browserList[i].length > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
struct stat filestat;
|
||||||
|
char path[MAXPATHLEN+1];
|
||||||
|
snprintf(path, MAXPATHLEN, "%s%s", browser.dir, browserList[i].filename);
|
||||||
|
|
||||||
|
if(stat(path, &filestat) < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
browserList[i].length = filestat.st_size;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool ParseDirEntries()
|
||||||
{
|
{
|
||||||
if(!dir)
|
if(!dir)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
char *ext;
|
char *ext;
|
||||||
char path[MAXPATHLEN+1];
|
|
||||||
struct dirent *entry = NULL;
|
struct dirent *entry = NULL;
|
||||||
struct stat filestat;
|
int isdir;
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@ -498,19 +513,20 @@ bool ParseDirEntries()
|
|||||||
|
|
||||||
if(strcmp(entry->d_name, "..") == 0)
|
if(strcmp(entry->d_name, "..") == 0)
|
||||||
{
|
{
|
||||||
filestat.st_mode = _IFDIR;
|
isdir = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ext = GetExt(entry->d_name);
|
if(entry->d_type==DT_DIR)
|
||||||
snprintf(path, MAXPATHLEN, "%s%s", browser.dir, entry->d_name);
|
isdir = 1;
|
||||||
|
else
|
||||||
if(stat(path, &filestat) < 0)
|
isdir = 0;
|
||||||
continue;
|
|
||||||
|
|
||||||
// don't show the file if it's not a valid ROM
|
// don't show the file if it's not a valid ROM
|
||||||
if(parseFilter && (filestat.st_mode & _IFDIR) == 0)
|
if(parseFilter && !isdir)
|
||||||
{
|
{
|
||||||
|
ext = GetExt(entry->d_name);
|
||||||
|
|
||||||
if(ext == NULL)
|
if(ext == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -531,11 +547,9 @@ bool ParseDirEntries()
|
|||||||
}
|
}
|
||||||
|
|
||||||
snprintf(browserList[browser.numEntries+i].filename, MAXJOLIET, "%s", entry->d_name);
|
snprintf(browserList[browser.numEntries+i].filename, MAXJOLIET, "%s", entry->d_name);
|
||||||
browserList[browser.numEntries+i].length = filestat.st_size;
|
browserList[browser.numEntries+i].isdir = isdir; // flag this as a dir
|
||||||
browserList[browser.numEntries+i].mtime = filestat.st_mtime;
|
|
||||||
browserList[browser.numEntries+i].isdir = (filestat.st_mode & _IFDIR) == 0 ? 0 : 1; // flag this as a dir
|
|
||||||
|
|
||||||
if(browserList[browser.numEntries+i].isdir)
|
if(isdir)
|
||||||
{
|
{
|
||||||
if(strcmp(entry->d_name, "..") == 0)
|
if(strcmp(entry->d_name, "..") == 0)
|
||||||
sprintf(browserList[browser.numEntries+i].displayname, "Up One Level");
|
sprintf(browserList[browser.numEntries+i].displayname, "Up One Level");
|
||||||
@ -661,7 +675,6 @@ ParseDirectory(bool waitParse, bool filter)
|
|||||||
sprintf(browserList[0].filename, "..");
|
sprintf(browserList[0].filename, "..");
|
||||||
sprintf(browserList[0].displayname, "Up One Level");
|
sprintf(browserList[0].displayname, "Up One Level");
|
||||||
browserList[0].length = 0;
|
browserList[0].length = 0;
|
||||||
browserList[0].mtime = 0;
|
|
||||||
browserList[0].isdir = 1; // flag this as a dir
|
browserList[0].isdir = 1; // flag this as a dir
|
||||||
browserList[0].icon = ICON_FOLDER;
|
browserList[0].icon = ICON_FOLDER;
|
||||||
browser.numEntries++;
|
browser.numEntries++;
|
||||||
|
@ -31,6 +31,7 @@ char * StripDevice(char * path);
|
|||||||
bool ChangeInterface(int device, bool silent);
|
bool ChangeInterface(int device, bool silent);
|
||||||
bool ChangeInterface(char * filepath, bool silent);
|
bool ChangeInterface(char * filepath, bool silent);
|
||||||
void CreateAppPath(char * origpath);
|
void CreateAppPath(char * origpath);
|
||||||
|
bool GetFileSize(int i);
|
||||||
int ParseDirectory(bool waitParse = false, bool filter = true);
|
int ParseDirectory(bool waitParse = false, bool filter = true);
|
||||||
void AllocSaveBuffer();
|
void AllocSaveBuffer();
|
||||||
void FreeSaveBuffer();
|
void FreeSaveBuffer();
|
||||||
|
@ -372,7 +372,7 @@ int SzParse(char * filepath)
|
|||||||
|
|
||||||
int device;
|
int device;
|
||||||
|
|
||||||
if(!FindDevice(browser.dir, &device))
|
if(!FindDevice(browser.dir, &device) || !GetFileSize(browser.selIndex))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int nbfiles = 0;
|
int nbfiles = 0;
|
||||||
|
@ -899,6 +899,12 @@ bool LoadVBAROM()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!GetFileSize(browser.selIndex))
|
||||||
|
{
|
||||||
|
ErrorPrompt("Error loading game!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
srcWidth = 0;
|
srcWidth = 0;
|
||||||
srcHeight = 0;
|
srcHeight = 0;
|
||||||
srcPitch = 0;
|
srcPitch = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user