From 50ace058ce4b017b09deaf899a3d7d87756a1fee Mon Sep 17 00:00:00 2001 From: sonninnos <45124675+sonninnos@users.noreply.github.com> Date: Wed, 12 Oct 2022 12:37:36 +0300 Subject: [PATCH] Config appendconfig + saving + logging (#14505) * Config override + logging cleanups * 'config_save_on_exit' cleanup --- configuration.c | 119 +++++++++++++++++++++++++++++++++--------------- retroarch.c | 26 +++++------ runloop.c | 11 ++--- 3 files changed, 100 insertions(+), 56 deletions(-) diff --git a/configuration.c b/configuration.c index 4fe5f66d10..4973d94600 100644 --- a/configuration.c +++ b/configuration.c @@ -3254,6 +3254,45 @@ static void video_driver_load_settings(global_t *global, } #endif +static void check_verbosity_settings(config_file_t *conf, + settings_t *settings) +{ + unsigned tmp_uint = 0; + bool tmp_bool = false; + + /* Make sure log_to_file is true if 'log-file' command line argument was used. */ + if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_LOG_TO_FILE, NULL)) + { + configuration_set_bool(settings, settings->bools.log_to_file, true); + } + else + { + /* Make sure current 'log_to_file' is effective */ + if (config_get_bool(conf, "log_to_file", &tmp_bool)) + configuration_set_bool(settings, settings->bools.log_to_file, tmp_bool); + } + + /* Set frontend log level */ + if (config_get_uint(conf, "frontend_log_level", &tmp_uint)) + verbosity_set_log_level(tmp_uint); + + /* Set verbosity according to config only if command line argument was not used. */ + if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL)) + { + verbosity_enable(); + } + else + { + if (config_get_bool(conf, "log_verbosity", &tmp_bool)) + { + if (tmp_bool) + verbosity_enable(); + else + verbosity_disable(); + } + } +} + /** * config_load: * @path : path to be read from. @@ -3310,6 +3349,17 @@ static bool config_load_file(global_t *global, array_settings = populate_settings_array (settings, &array_settings_size); path_settings = populate_settings_path (settings, &path_settings_size); + /* Initialize verbosity settings */ + check_verbosity_settings(conf, settings); + + if (!first_load) + { + if (!path) + RARCH_LOG("[Config]: Loading default config.\n"); + else + RARCH_LOG("[Config]: Loading config: \"%s\".\n", path); + } + if (!path_is_empty(RARCH_PATH_CONFIG_APPEND)) { /* Don't destroy append_config_path, store in temporary @@ -3324,12 +3374,18 @@ static bool config_load_file(global_t *global, { bool result = config_append_file(conf, extra_path); - RARCH_LOG("[Config]: Appending config \"%s\".\n", extra_path); + if (!first_load) + { + RARCH_LOG("[Config]: Appending config: \"%s\".\n", extra_path); - if (!result) - RARCH_ERR("[Config]: Failed to append config \"%s\".\n", extra_path); + if (!result) + RARCH_ERR("[Config]: Failed to append config: \"%s\".\n", extra_path); + } extra_path = strtok_r(NULL, "|", &save); } + + /* Re-check verbosity settings */ + check_verbosity_settings(conf, settings); } #if 0 @@ -3367,28 +3423,6 @@ static bool config_load_file(global_t *global, settings->bools.network_remote_enable_user[i], tmp_bool); } #endif - /* Set verbosity according to config only if the 'v' command line argument was not used - * or if it is not the first config load. */ - if (config_get_bool(conf, "log_verbosity", &tmp_bool) && - (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL) || - !first_load)) - { - if (tmp_bool) - verbosity_enable(); - else - verbosity_disable(); - } - /* On first config load, make sure log_to_file is true if 'log-file' command line - * argument was used. */ - if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_LOG_TO_FILE, NULL) && - first_load) - { - configuration_set_bool(settings,settings->bools.log_to_file,true); - } - if (config_get_uint(conf, "frontend_log_level", &tmp_uint)) - { - verbosity_set_log_level(tmp_uint); - } /* Integer settings */ @@ -3906,14 +3940,33 @@ bool config_load_override(void *data) ".cfg", sizeof(core_path)); + /* Prevent "--appendconfig" from being ignored */ + if (!path_is_empty(RARCH_PATH_CONFIG_APPEND)) + should_append = true; + /* per-core overrides */ /* Create a new config file from core_path */ if (path_is_valid(core_path)) { + char tmp_path[PATH_MAX_LENGTH + 1]; + RARCH_LOG("[Overrides]: Core-specific overrides found at \"%s\".\n", core_path); - path_set(RARCH_PATH_CONFIG_APPEND, core_path); + if (should_append) + { + size_t _len = strlcpy(tmp_path, + path_get(RARCH_PATH_CONFIG_APPEND), + sizeof(tmp_path)); + tmp_path[_len ] = '|'; + tmp_path[_len+1] = '\0'; + strlcat(tmp_path, core_path, sizeof(tmp_path)); + RARCH_LOG("[Overrides]: Core-specific overrides stacking on top of previous overrides.\n"); + } + else + strlcpy(tmp_path, core_path, sizeof(tmp_path)); + + path_set(RARCH_PATH_CONFIG_APPEND, tmp_path); should_append = true; } @@ -4174,19 +4227,11 @@ success: static void config_parse_file(global_t *global) { const char *config_path = path_get(RARCH_PATH_CONFIG); - if (path_is_empty(RARCH_PATH_CONFIG)) - { - RARCH_LOG("[Config]: Loading default config.\n"); - } - else - RARCH_LOG("[Config]: Loading config from: \"%s\".\n", config_path); + if (!config_load_file(global, config_path, config_st)) { - if (!config_load_file(global, config_path, config_st)) - { - RARCH_ERR("[Config]: Couldn't find config at path: \"%s\".\n", - config_path); - } + RARCH_ERR("[Config]: Config not found at: \"%s\".\n", + config_path); } } diff --git a/retroarch.c b/retroarch.c index bc94aaed38..0d50387cca 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3687,8 +3687,6 @@ static void sdl_exit(void) * * Cleanly exit RetroArch. * - * Also saves configuration files to disk, - * and (optionally) autosave state. **/ void main_exit(void *args) { @@ -3698,13 +3696,9 @@ void main_exit(void *args) struct menu_state *menu_st = menu_state_get_ptr(); #endif settings_t *settings = config_get_ptr(); - bool config_save_on_exit = settings->bools.config_save_on_exit; video_driver_restore_cached(settings); - if (config_save_on_exit) - command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL); - #if defined(HAVE_GFX_WIDGETS) /* Do not want display widgets to live any more. */ dispwidget_get_ptr()->flags &= ~DISPGFX_WIDGET_FLAG_PERSISTING; @@ -6164,18 +6158,16 @@ void retroarch_fail(int error_code, const char *error) longjmp(global->error_sjlj_context, error_code); } +/* + * Also saves configuration files to disk, + * and (optionally) autosave state. + */ bool retroarch_main_quit(void) { runloop_state_t *runloop_st = runloop_state_get_ptr(); video_driver_state_t*video_st = video_state_get_ptr(); settings_t *settings = config_get_ptr(); - /*Save configs before quitting - *as for UWP depending on `OnSuspending` is not important as we can call it directly here - *specifically we need to get width,height which requires UI thread and it will not be available on exit - */ - bool config_save_on_exit = settings->bools.config_save_on_exit; - if (config_save_on_exit) - command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL); + #ifdef HAVE_PRESENCE { presence_userdata_t userdata; @@ -6206,6 +6198,14 @@ bool retroarch_main_quit(void) if (!(runloop_st->flags & RUNLOOP_FLAG_SHUTDOWN_INITIATED)) { + /* Save configs before quitting + * as for UWP depending on `OnSuspending` is not important as we can call it directly here + * specifically we need to get width,height which requires UI thread and it will not be available on exit + */ + bool config_save_on_exit = settings->bools.config_save_on_exit; + if (config_save_on_exit) + command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL); + command_event_save_auto_state( settings->bools.savestate_auto_save, runloop_st->current_core_type); diff --git a/runloop.c b/runloop.c index 116934c42e..6fb8e5e664 100644 --- a/runloop.c +++ b/runloop.c @@ -6770,7 +6770,7 @@ MENU_ST_FLAG_IS_BINDING; { bool load_dummy_core = false; - runloop_st->flags &= ~RUNLOOP_FLAG_CORE_SHUTDOWN_INITIATED; + runloop_st->flags &= ~RUNLOOP_FLAG_CORE_SHUTDOWN_INITIATED; /* Check whether dummy core should be loaded * instead of exiting RetroArch completely @@ -6778,14 +6778,14 @@ MENU_ST_FLAG_IS_BINDING; if (settings->bools.load_dummy_on_core_shutdown) { load_dummy_core = true; - runloop_st->flags &= ~RUNLOOP_FLAG_SHUTDOWN_INITIATED; + runloop_st->flags &= ~RUNLOOP_FLAG_SHUTDOWN_INITIATED; } /* Unload current core, and load dummy if * required */ if (!command_event(CMD_EVENT_UNLOAD_CORE, &load_dummy_core)) { - runloop_st->flags |= RUNLOOP_FLAG_SHUTDOWN_INITIATED; + runloop_st->flags |= RUNLOOP_FLAG_SHUTDOWN_INITIATED; quit_runloop = true; } @@ -6795,12 +6795,11 @@ MENU_ST_FLAG_IS_BINDING; else quit_runloop = true; - runloop_st->flags &= ~RUNLOOP_FLAG_CORE_RUNNING; + runloop_st->flags &= ~RUNLOOP_FLAG_CORE_RUNNING; if (quit_runloop) { old_quit_key = quit_key; - retroarch_main_quit(); return RUNLOOP_STATE_QUIT; } } @@ -7768,7 +7767,7 @@ RUNLOOP_FLAG_PAUSED) || (menu_pause_libretro && (menu_state_get_ptr()->flags & M { case RUNLOOP_STATE_QUIT: runloop_st->frame_limit_last_time = 0.0; - runloop_st->flags &= ~RUNLOOP_FLAG_CORE_RUNNING; + runloop_st->flags &= ~RUNLOOP_FLAG_CORE_RUNNING; command_event(CMD_EVENT_QUIT, NULL); return -1; case RUNLOOP_STATE_POLLED_AND_SLEEP: