(360) Filebrowser sorts files by name now
This commit is contained in:
parent
1355f1204d
commit
5185fb7baa
|
@ -21,20 +21,16 @@
|
||||||
|
|
||||||
static int less_than_key(const void * a, const void * b)
|
static int less_than_key(const void * a, const void * b)
|
||||||
{
|
{
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
DirectoryEntry * a_dir = (DirectoryEntry*)a;
|
DirectoryEntry * a_dir = (DirectoryEntry*)a;
|
||||||
DirectoryEntry * b_dir = (DirectoryEntry*)b;
|
DirectoryEntry * b_dir = (DirectoryEntry*)b;
|
||||||
|
|
||||||
/* compare a directory to a file directory is always lesser than*/
|
/* compare a directory to a file directory is always lesser than*/
|
||||||
if ((a_dir->d_type == CELL_FS_TYPE_DIRECTORY && b_dir->d_type == CELL_FS_TYPE_REGULAR))
|
if ((a_dir->d_type == FS_TYPES_DIRECTORY && b_dir->d_type == FS_TYPES_FILE))
|
||||||
return -1;
|
return -1;
|
||||||
else if (a_dir->d_type == CELL_FS_TYPE_REGULAR && b_dir->d_type == CELL_FS_TYPE_DIRECTORY)
|
else if (a_dir->d_type == FS_TYPES_FILE && b_dir->d_type == FS_TYPES_DIRECTORY)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return strcasecmp(a_dir->d_name, b_dir->d_name);
|
return strcasecmp(a_dir->d_name, b_dir->d_name);
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * filebrowser_get_extension(const char * filename)
|
static const char * filebrowser_get_extension(const char * filename)
|
||||||
|
@ -92,7 +88,7 @@ const char * path, const char * extensions)
|
||||||
strlcpy(filebrowser->dir[filebrowser->directory_stack_size], path, sizeof(filebrowser->dir[filebrowser->directory_stack_size]));
|
strlcpy(filebrowser->dir[filebrowser->directory_stack_size], path, sizeof(filebrowser->dir[filebrowser->directory_stack_size]));
|
||||||
bool found_dir = false;
|
bool found_dir = false;
|
||||||
|
|
||||||
if(!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
if(!(ffd.dwFileAttributes & FS_TYPES_DIRECTORY))
|
||||||
{
|
{
|
||||||
char tmp_extensions[512];
|
char tmp_extensions[512];
|
||||||
strncpy(tmp_extensions, extensions, sizeof(tmp_extensions));
|
strncpy(tmp_extensions, extensions, sizeof(tmp_extensions));
|
||||||
|
@ -116,10 +112,10 @@ const char * path, const char * extensions)
|
||||||
if(!found_rom)
|
if(!found_rom)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
else if (ffd.dwFileAttributes & FS_TYPES_DIRECTORY)
|
||||||
found_dir = true;
|
found_dir = true;
|
||||||
|
|
||||||
filebrowser->cur[filebrowser->file_count].d_type = found_dir ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
|
filebrowser->cur[filebrowser->file_count].d_type = found_dir ? FS_TYPES_DIRECTORY : FS_TYPES_FILE;
|
||||||
snprintf(filebrowser->cur[filebrowser->file_count].d_name, sizeof(filebrowser->cur[filebrowser->file_count].d_name), ffd.cFileName);
|
snprintf(filebrowser->cur[filebrowser->file_count].d_name, sizeof(filebrowser->cur[filebrowser->file_count].d_name), ffd.cFileName);
|
||||||
|
|
||||||
filebrowser->file_count++;
|
filebrowser->file_count++;
|
||||||
|
@ -153,13 +149,13 @@ const char * path, const char * extensions)
|
||||||
if (nread == 0)
|
if (nread == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((dirent.d_type != CELL_FS_TYPE_REGULAR) && (dirent.d_type != CELL_FS_TYPE_DIRECTORY))
|
if ((dirent.d_type != FS_TYPES_FILE) && (dirent.d_type != FS_TYPES_DIRECTORY))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (dirent.d_type == CELL_FS_TYPE_DIRECTORY && !(strcmp(dirent.d_name, ".")))
|
if (dirent.d_type == FS_TYPES_DIRECTORY && !(strcmp(dirent.d_name, ".")))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (dirent.d_type == CELL_FS_TYPE_REGULAR)
|
if (dirent.d_type == FS_TYPES_FILE)
|
||||||
{
|
{
|
||||||
char tmp_extensions[512];
|
char tmp_extensions[512];
|
||||||
strncpy(tmp_extensions, extensions, sizeof(tmp_extensions));
|
strncpy(tmp_extensions, extensions, sizeof(tmp_extensions));
|
||||||
|
@ -198,9 +194,8 @@ const char * path, const char * extensions)
|
||||||
error = 1;
|
error = 1;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort(filebrowser->cur, filebrowser->file_count, sizeof(DirectoryEntry), less_than_key);
|
|
||||||
#endif
|
#endif
|
||||||
|
qsort(filebrowser->cur, filebrowser->file_count, sizeof(DirectoryEntry), less_than_key);
|
||||||
error:
|
error:
|
||||||
if(error)
|
if(error)
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,6 +36,14 @@
|
||||||
#define MAX_FILE_LIMIT 4096
|
#define MAX_FILE_LIMIT 4096
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_XBOX)
|
||||||
|
#define FS_TYPES_DIRECTORY (FILE_ATTRIBUTE_DIRECTORY)
|
||||||
|
#define FS_TYPES_FILE (FILE_ATTRIBUTE_NORMAL)
|
||||||
|
#elif defined(__CELLOS_LV2__)
|
||||||
|
#define FS_TYPES_DIRECTORY (CELL_FS_TYPE_DIRECTORY)
|
||||||
|
#define FS_TYPES_FILE (CELL_FS_TYPE_REGULAR)
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t d_type;
|
uint8_t d_type;
|
||||||
uint8_t d_namlen;
|
uint8_t d_namlen;
|
||||||
|
|
Loading…
Reference in New Issue