diff --git a/command_event.c b/command_event.c index 8ca37f27a5..3426da21d1 100644 --- a/command_event.c +++ b/command_event.c @@ -665,10 +665,13 @@ static bool event_init_core(void) } pretro_set_environment(rarch_environment_cb); - + if(settings->auto_remaps_enable) config_load_remap(); + if(settings->sort_savestates_enable || settings->sort_savefiles_enable) + set_paths_redirect(global->basename); + rarch_verify_api_version(); pretro_init(); diff --git a/config.def.h b/config.def.h index 8e3598b7b0..ad6b287d2f 100644 --- a/config.def.h +++ b/config.def.h @@ -494,6 +494,9 @@ static bool default_core_specific_config = false; static bool default_auto_overrides_enable = false; static bool default_auto_remaps_enable = false; +static bool default_sort_savefiles_enable = false; +static bool default_sort_savestates_enable = false; + static unsigned default_menu_btn_ok = RETRO_DEVICE_ID_JOYPAD_A; static unsigned default_menu_btn_cancel = RETRO_DEVICE_ID_JOYPAD_B; static unsigned default_menu_btn_search = RETRO_DEVICE_ID_JOYPAD_X; diff --git a/configuration.c b/configuration.c index 13d01e4573..5bc696cb5d 100644 --- a/configuration.c +++ b/configuration.c @@ -689,6 +689,9 @@ static void config_set_defaults(void) settings->auto_overrides_enable = default_auto_overrides_enable; settings->auto_remaps_enable = default_auto_remaps_enable; + settings->sort_savefiles_enable = default_sort_savefiles_enable; + settings->sort_savestates_enable = default_sort_savestates_enable; + settings->menu_ok_btn = default_menu_btn_ok; settings->menu_cancel_btn = default_menu_btn_cancel; settings->menu_search_btn = default_menu_btn_search; @@ -1620,6 +1623,9 @@ static bool config_load_file(const char *path, bool set_defaults) CONFIG_GET_BOOL_BASE(conf, settings, auto_overrides_enable, "auto_overrides_enable"); CONFIG_GET_BOOL_BASE(conf, settings, auto_remaps_enable, "auto_remaps_enable"); + CONFIG_GET_BOOL_BASE(conf, settings, sort_savefiles_enable, "sort_savefiles_enable"); + CONFIG_GET_BOOL_BASE(conf, settings, sort_savestates_enable, "sort_savestates_enable"); + CONFIG_GET_INT_BASE(conf, settings, menu_ok_btn, "menu_ok_btn"); CONFIG_GET_INT_BASE(conf, settings, menu_cancel_btn, "menu_cancel_btn"); CONFIG_GET_INT_BASE(conf, settings, menu_search_btn, "menu_search_btn"); @@ -1817,7 +1823,7 @@ bool config_load_override(void) { RARCH_WARN("Can't use overrides in conjunction with netplay, disabling overrides\n"); return false; - } + } #endif char buf[PATH_MAX_LENGTH]; @@ -1829,7 +1835,7 @@ bool config_load_override(void) global->has_set_state_path = false; if (config_load_file(global->config_path, false)) - { + { // Restore the libretro_path we're using since it will be overwritten by the override when reloading strlcpy(settings->libretro,buf,sizeof(settings->libretro)); rarch_main_msg_queue_push("Configuration override loaded", 1, 100, true); @@ -1860,16 +1866,16 @@ bool config_load_override(void) return false; *global->append_config_path = '\0'; - + // Toggle has_save_path to false so it resets global->has_set_save_path = false; global->has_set_state_path = false; - + if (config_load_file(global->config_path, false)) { RARCH_LOG("Configuration overrides unloaded, original configuration reset\n"); - - // Reset save paths + + // Reset save paths global->has_set_save_path = true; global->has_set_state_path = true; @@ -2535,6 +2541,10 @@ bool config_save_file(const char *path) settings->auto_overrides_enable); config_set_bool(conf, "auto_remaps_enable", settings->auto_remaps_enable); + config_set_bool(conf, "sort_savefiles_enable", + settings->sort_savefiles_enable); + config_set_bool(conf, "sort_savestates_enable", + settings->sort_savestates_enable); config_set_int(conf, "libretro_log_level", settings->libretro_log_level); config_set_bool(conf, "log_verbosity", global->verbosity); config_set_bool(conf, "perfcnt_enable", global->perfcnt_enable); diff --git a/configuration.h b/configuration.h index ff2ffe160b..ea07fc7912 100644 --- a/configuration.h +++ b/configuration.h @@ -33,7 +33,7 @@ extern "C" { typedef struct settings { - struct + struct { char driver[32]; char context_driver[32]; @@ -105,7 +105,7 @@ typedef struct settings } ui; #ifdef HAVE_MENU - struct + struct { char driver[32]; bool pause_libretro; @@ -323,6 +323,9 @@ typedef struct settings bool auto_overrides_enable; bool auto_remaps_enable; + bool sort_savefiles_enable; + bool sort_savestates_enable; + unsigned menu_ok_btn; unsigned menu_cancel_btn; unsigned menu_search_btn; diff --git a/retroarch.c b/retroarch.c index 317a4c88f4..4475c73807 100644 --- a/retroarch.c +++ b/retroarch.c @@ -273,7 +273,7 @@ static void set_basename(const char *path) * /file/to/path/comp.7z#folder/game.extension * * The choice I take here is: - * /file/to/path/game as basename. We might end up in a writable + * /file/to/path/game as basename. We might end up in a writable * directory then and the name of srm and states are meaningful. * */ @@ -326,9 +326,25 @@ static void set_special_paths(char **argv, unsigned num_content) sizeof(settings->system_directory)); } -static void set_paths_redirect(const char *path) +void set_paths_redirect(const char *path) { global_t *global = global_get_ptr(); + settings_t *settings = config_get_ptr(); + + char orig_savestate_dir[PATH_MAX_LENGTH] = ""; + char orig_savefile_dir[PATH_MAX_LENGTH] = ""; + + if (global->system.info.library_name && strcmp(global->system.info.library_name,"No Core") && settings->sort_savefiles_enable) + { + strlcpy(orig_savefile_dir,global->savefile_dir,sizeof(global->savefile_dir)); + fill_pathname_dir(global->savefile_dir,global->savefile_dir,global->system.info.library_name,sizeof(global->savefile_dir)); + } + + if (global->system.info.library_name && strcmp(global->system.info.library_name,"No Core") && settings->sort_savestates_enable) + { + strlcpy(orig_savestate_dir,global->savestate_dir,sizeof(global->savestate_dir)); + fill_pathname_dir(global->savestate_dir,global->savestate_dir,global->system.info.library_name,sizeof(global->savestate_dir)); + } if(path_is_directory(global->savefile_dir)) strlcpy(global->savefile_name,global->savefile_dir,sizeof(global->savefile_dir)); @@ -340,9 +356,9 @@ static void set_paths_redirect(const char *path) { fill_pathname_dir(global->savefile_name, global->basename, ".srm", sizeof(global->savefile_name)); - RARCH_LOG("Redirecting save file to \"%s\".\n", global->savefile_name); + RARCH_LOG("%s \nRedirecting save file to \"%s\".\n", orig_savefile_dir,global->savefile_name); } - + if (path_is_directory(global->savestate_name)) { fill_pathname_dir(global->savestate_name, global->basename, @@ -356,6 +372,13 @@ static void set_paths_redirect(const char *path) ".state", sizeof(global->cheatfile_name)); RARCH_LOG("Redirecting cheat file to \"%s\".\n", global->cheatfile_name); } + + if(global->system.info.library_name && strcmp(global->system.info.library_name,"No Core") && settings->sort_savefiles_enable) + strlcpy(global->savefile_dir,orig_savefile_dir,sizeof(global->savefile_dir)); + + if(global->system.info.library_name && strcmp(global->system.info.library_name,"No Core") && settings->sort_savestates_enable) + strlcpy(global->savestate_dir,orig_savestate_dir,sizeof(global->savestate_dir)); + } void rarch_set_paths(const char *path) @@ -388,7 +411,7 @@ void rarch_set_paths(const char *path) /** * parse_input: * @argc : Count of (commandline) arguments. - * @argv : (Commandline) arguments. + * @argv : (Commandline) arguments. * * Parses (commandline) arguments passed to RetroArch. * @@ -423,8 +446,8 @@ static void parse_input(int argc, char *argv[]) *global->bps_name = '\0'; *global->ips_name = '\0'; *global->subsystem = '\0'; - - global->overrides_active = false; + + global->overrides_active = false; if (argc < 2) { @@ -820,7 +843,7 @@ static void rarch_init_savefile_paths(void) /* For subsystems, we know exactly which RAM types are supported. */ unsigned i, j; - const struct retro_subsystem_info *info = + const struct retro_subsystem_info *info = libretro_find_subsystem_info( global->system.special, global->system.num_special, global->subsystem); @@ -1445,7 +1468,7 @@ int rarch_defer_core(core_info_list_t *core_info, const char *dir, else strlcpy(new_core_path, info->path, sizeof(new_core_path)); - /* There are multiple deferred cores and a + /* There are multiple deferred cores and a * selection needs to be made from a list, return 0. */ if (supported != 1) return 0; @@ -1483,7 +1506,7 @@ bool rarch_replace_config(const char *path) settings_t *settings = config_get_ptr(); global_t *global = global_get_ptr(); - /* If config file to be replaced is the same as the + /* If config file to be replaced is the same as the * current config file, exit. */ if (!strcmp(path, global->config_path)) return false; diff --git a/retroarch.h b/retroarch.h index 6367f0d769..f751a7a190 100644 --- a/retroarch.h +++ b/retroarch.h @@ -167,6 +167,8 @@ void rarch_init_system_av_info(void); void rarch_set_paths(const char *path); +void set_paths_redirect(const char *path); + /** * rarch_print_compiler: * diff --git a/settings.c b/settings.c index 616a4236a9..91bd38d908 100644 --- a/settings.c +++ b/settings.c @@ -3682,6 +3682,30 @@ static bool setting_append_list_general_options( general_write_handler, general_read_handler); + CONFIG_BOOL( + settings->sort_savefiles_enable, + "sort_savefiles_enable", + "Sort Saves In Folders", + default_sort_savefiles_enable, + "OFF", + "ON", + group_info.name, + subgroup_info.name, + general_write_handler, + general_read_handler); + + CONFIG_BOOL( + settings->sort_savestates_enable, + "sort_savestates_enable", + "Sort Saves States In Folders", + default_sort_savestates_enable, + "OFF", + "ON", + group_info.name, + subgroup_info.name, + general_write_handler, + general_read_handler); + END_SUB_GROUP(list, list_info); START_SUB_GROUP(list, list_info, "Logging", group_info.name, subgroup_info);