(Filebrowser/RMenu) Now refreshes filebrowser when unzipping a file

This commit is contained in:
twinaphex 2013-01-13 08:58:57 +01:00
parent 37ed33daba
commit 32495632d8
6 changed files with 53 additions and 7 deletions

View File

@ -115,6 +115,8 @@ void console_load_game(const char *path)
if(g_extern.lifecycle_mode_state & (1ULL << MODE_INFO_DRAW))
rmenu_settings_msg(S_MSG_EXTRACTED_ZIPFILE, S_DELAY_180);
g_extern.lifecycle_mode_state |= (1ULL << MODE_FILEBROWSER_REFRESH_PENDING);
if ((g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE)) ||
(g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN)))
{
@ -358,6 +360,7 @@ begin_loop:
if (ret == 0)
RARCH_LOG("Removed temporary unzipped ROM file: [%s].\n", g_extern.fullpath);
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_UNZIP_DELETE_PENDING);
g_extern.lifecycle_mode_state |= (1ULL << MODE_FILEBROWSER_REFRESH_PENDING);
}
#endif
}

View File

@ -558,7 +558,12 @@ static void browser_update(void *data, uint64_t input, const char *extensions)
filebrowser_action_t action = FILEBROWSER_ACTION_NOOP;
bool ret = true;
if (input & (1ULL << RMENU_DEVICE_NAV_DOWN))
if (g_extern.lifecycle_mode_state & (1ULL << MODE_FILEBROWSER_REFRESH_PENDING))
{
action = FILEBROWSER_ACTION_REFRESH;
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_FILEBROWSER_REFRESH_PENDING);
}
else if (input & (1ULL << RMENU_DEVICE_NAV_DOWN))
action = FILEBROWSER_ACTION_DOWN;
else if (input & (1ULL << RMENU_DEVICE_NAV_UP))
action = FILEBROWSER_ACTION_UP;

View File

@ -138,35 +138,53 @@ void rmenu_settings_set(unsigned setting)
case S_UNZIP_MODE_DECREMENT:
if (g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CACHEDIR))
{
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_UNZIP_TO_CACHEDIR);
g_extern.lifecycle_mode_state &= ~((1ULL << MODE_UNZIP_TO_CACHEDIR) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE) |
(1ULL << MODE_UNZIP_TO_CURDIR));
g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN);
}
else if (g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE))
{
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE);
g_extern.lifecycle_mode_state &= ~((1ULL << MODE_UNZIP_TO_CACHEDIR) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE) |
(1ULL << MODE_UNZIP_TO_CURDIR));
g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CURDIR);
}
else if (g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN))
{
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN);
g_extern.lifecycle_mode_state &= ~((1ULL << MODE_UNZIP_TO_CACHEDIR) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE) |
(1ULL << MODE_UNZIP_TO_CURDIR));
g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE);
}
break;
case S_UNZIP_MODE_INCREMENT:
if (g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CURDIR))
{
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_UNZIP_TO_CURDIR);
g_extern.lifecycle_mode_state &= ~((1ULL << MODE_UNZIP_TO_CACHEDIR) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE) |
(1ULL << MODE_UNZIP_TO_CURDIR));
g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE);
}
else if (g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE))
{
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE);
g_extern.lifecycle_mode_state &= ~((1ULL << MODE_UNZIP_TO_CACHEDIR) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE) |
(1ULL << MODE_UNZIP_TO_CURDIR));
g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN);
}
else if (g_extern.lifecycle_mode_state & (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN))
{
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN);
g_extern.lifecycle_mode_state &= ~((1ULL << MODE_UNZIP_TO_CACHEDIR) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN) |
(1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE) |
(1ULL << MODE_UNZIP_TO_CURDIR));
g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CACHEDIR);
}
break;

View File

@ -16,6 +16,7 @@
#include <stdint.h>
#include <stdlib.h>
#include "../../../file.h"
#include "file_browser.h"
static bool filebrowser_parse_directory(void *data, unsigned stack_size,
@ -101,6 +102,20 @@ bool with_extension)
return ret;
}
static bool filebrowser_refresh_directory(void *data, const char * path)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
bool ret = true;
char basedir[PATH_MAX];
fill_pathname_basedir(basedir, path, sizeof(basedir));
ret = filebrowser_parse_directory(filebrowser, filebrowser->directory_stack_size, basedir,
filebrowser->extensions);
return ret;
}
static bool filebrowser_pop_directory (void *data)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
@ -209,6 +224,9 @@ bool filebrowser_iterate(void *data, unsigned action)
filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr +
entries_to_scroll, filebrowser->current_dir.list->size-1));
break;
case FILEBROWSER_ACTION_REFRESH:
ret = filebrowser_refresh_directory(filebrowser, filebrowser_get_current_path(filebrowser));
break;
case FILEBROWSER_ACTION_OK:
ret = filebrowser_push_directory(filebrowser, filebrowser_get_current_path(filebrowser), true);
break;

View File

@ -38,6 +38,7 @@ typedef enum
FILEBROWSER_ACTION_LEFT,
FILEBROWSER_ACTION_RIGHT,
FILEBROWSER_ACTION_OK,
FILEBROWSER_ACTION_REFRESH,
FILEBROWSER_ACTION_CANCEL,
FILEBROWSER_ACTION_SCROLL_UP,
FILEBROWSER_ACTION_SCROLL_DOWN,

View File

@ -135,6 +135,7 @@ enum menu_enums
MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE_AND_CLEAN,
MODE_UNZIP_TO_CACHEDIR,
MODE_UNZIP_DELETE_PENDING,
MODE_FILEBROWSER_REFRESH_PENDING,
};
// All config related settings go here.