mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-05 02:55:07 +01:00
19067967bc
no button to create a new file and a little bug with the scrolling, but better than typing stuff in. added channel launcher. currently doesnt show the actual name, only the u32 and ID. also, it is only showing 0x00010001 channels, so no Mii, weather, or other crappy channels, just the good stuff. fixed bug that showed the MacOS hidden files as extra homebrew entries.
103 lines
2.5 KiB
C++
103 lines
2.5 KiB
C++
/****************************************************************************
|
|
* HomebrewFiles Class
|
|
* for USB Loader GX
|
|
***************************************************************************/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/dir.h>
|
|
|
|
#include "HomebrewFiles.h"
|
|
|
|
HomebrewFiles::HomebrewFiles(const char * path)
|
|
{
|
|
filecount = 0;
|
|
this->LoadPath(path);
|
|
this->SortList();
|
|
}
|
|
|
|
HomebrewFiles::~HomebrewFiles()
|
|
{
|
|
}
|
|
|
|
bool HomebrewFiles::LoadPath(const char * folderpath)
|
|
{
|
|
struct stat st;
|
|
DIR_ITER *dir = NULL;
|
|
char filename[1024];
|
|
|
|
dir = diropen(folderpath);
|
|
if(dir == NULL) {
|
|
return false;
|
|
}
|
|
|
|
while (dirnext(dir,filename,&st) == 0)
|
|
{
|
|
if((st.st_mode & S_IFDIR) != 0) {
|
|
if(strcmp(filename,".") != 0 && strcmp(filename,"..") != 0) {
|
|
char currentname[200];
|
|
snprintf(currentname, sizeof(currentname), "%s%s/", folderpath, filename);
|
|
this->LoadPath(currentname);
|
|
}
|
|
} else {
|
|
char temp[5];
|
|
for(int i = 0; i < 5; i++) {
|
|
temp[i] = filename[strlen(filename)-4+i];
|
|
}
|
|
|
|
if((strncasecmp(temp, ".dol", 4) == 0 || strncasecmp(temp, ".elf", 4) == 0)
|
|
&& filecount < MAXHOMEBREWS && filename[0]!='.') {
|
|
|
|
strncpy(FileInfo[filecount].FilePath, folderpath, sizeof(FileInfo[filecount].FilePath));
|
|
strncpy(FileInfo[filecount].FileName, filename, sizeof(FileInfo[filecount].FileName));
|
|
FileInfo[filecount].FileSize = st.st_size;
|
|
filecount++;
|
|
}
|
|
}
|
|
}
|
|
dirclose(dir);
|
|
|
|
return true;
|
|
}
|
|
|
|
char * HomebrewFiles::GetFilename(int ind)
|
|
{
|
|
if(ind > filecount)
|
|
return NULL;
|
|
else
|
|
return FileInfo[ind].FileName;
|
|
}
|
|
|
|
char * HomebrewFiles::GetFilepath(int ind)
|
|
{
|
|
if(ind > filecount)
|
|
return NULL;
|
|
else
|
|
return FileInfo[ind].FilePath;
|
|
}
|
|
|
|
unsigned int HomebrewFiles::GetFilesize(int ind)
|
|
{
|
|
if(ind > filecount)
|
|
return NULL;
|
|
else
|
|
return FileInfo[ind].FileSize;
|
|
}
|
|
|
|
int HomebrewFiles::GetFilecount()
|
|
{
|
|
return filecount;
|
|
}
|
|
|
|
int ListCompare(const void *a, const void *b)
|
|
{
|
|
FileInfos *ab = (FileInfos*) a;
|
|
FileInfos *bb = (FileInfos*) b;
|
|
|
|
return stricmp((char *) ab->FilePath, (char *) bb->FilePath);
|
|
}
|
|
void HomebrewFiles::SortList()
|
|
{
|
|
qsort(FileInfo, filecount, sizeof(FileInfos), ListCompare);
|
|
}
|