diff --git a/frontend/frontend_console.c b/frontend/frontend_console.c index 6a817fbd98..c078a64b11 100644 --- a/frontend/frontend_console.c +++ b/frontend/frontend_console.c @@ -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 } diff --git a/frontend/menu/rmenu.c b/frontend/menu/rmenu.c index e59322becf..a4a6ec1729 100644 --- a/frontend/menu/rmenu.c +++ b/frontend/menu/rmenu.c @@ -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; diff --git a/frontend/menu/rmenu_settings.c b/frontend/menu/rmenu_settings.c index 562ed1c2ce..27b1fe5cf1 100644 --- a/frontend/menu/rmenu_settings.c +++ b/frontend/menu/rmenu_settings.c @@ -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; diff --git a/frontend/menu/utils/file_browser.c b/frontend/menu/utils/file_browser.c index 51a504f70d..26c7c3b7f6 100644 --- a/frontend/menu/utils/file_browser.c +++ b/frontend/menu/utils/file_browser.c @@ -16,6 +16,7 @@ #include #include +#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; diff --git a/frontend/menu/utils/file_browser.h b/frontend/menu/utils/file_browser.h index 0e9644d0d5..b9143a9c9d 100644 --- a/frontend/menu/utils/file_browser.h +++ b/frontend/menu/utils/file_browser.h @@ -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, diff --git a/general.h b/general.h index aa7f794ac2..93b892e6d1 100644 --- a/general.h +++ b/general.h @@ -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.