diff --git a/configuration.c b/configuration.c index 9e77748bac..ce6ee1b340 100644 --- a/configuration.c +++ b/configuration.c @@ -1769,6 +1769,8 @@ static struct config_bool_setting *populate_settings_bool( SETTING_BOOL("location_allow", &settings->bools.location_allow, true, false, false); SETTING_BOOL("cloud_sync_enable", &settings->bools.cloud_sync_enable, true, false, false); SETTING_BOOL("cloud_sync_destructive", &settings->bools.cloud_sync_destructive, true, false, false); + SETTING_BOOL("cloud_sync_sync_saves", &settings->bools.cloud_sync_sync_saves, true, false, false); + SETTING_BOOL("cloud_sync_sync_configs", &settings->bools.cloud_sync_sync_configs, true, false, false); SETTING_BOOL("discord_allow", &settings->bools.discord_enable, true, false, false); #ifdef HAVE_MIST SETTING_BOOL("steam_rich_presence_enable", &settings->bools.steam_rich_presence_enable, true, false, false); diff --git a/configuration.h b/configuration.h index 51b7630bbd..e027903a8d 100644 --- a/configuration.h +++ b/configuration.h @@ -960,6 +960,8 @@ typedef struct settings /* Cloud Sync */ bool cloud_sync_enable; bool cloud_sync_destructive; + bool cloud_sync_sync_saves; + bool cloud_sync_sync_configs; /* Misc. */ bool discord_enable; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 37c934d385..484f3bce25 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -3636,6 +3636,14 @@ MSG_HASH( MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE, "cloud_sync_destructive" ) +MSG_HASH( + MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES, + "cloud_sync_sync_saves" + ) +MSG_HASH( + MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS, + "cloud_sync_sync_configs" + ) MSG_HASH( MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER, "cloud_sync_driver" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 9a29da372f..0faeea183e 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1244,10 +1244,26 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_DESTRUCTIVE, "Destructive Cloud Sync" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_SAVES, + "Sync: Saves/States" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_CONFIGS, + "Sync: Configuration Files" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_SAVES, + "When enabled, saves/states will be synced to cloud." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_CONFIGS, + "When enabled, configuration files will be synced to cloud." + ) MSG_HASH( MENU_ENUM_SUBLABEL_CLOUD_SYNC_DESTRUCTIVE, "When disabled, files are moved to a backup folder before being overwritten or deleted." - ) + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_DRIVER, "Cloud Sync Backend" diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index ebe578684a..43058d5ea7 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -257,6 +257,8 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_saving_settings_list, MENU_ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_settings_list, MENU_ENUM_SUBLABEL_CLOUD_SYNC_SETTINGS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_enable, MENU_ENUM_SUBLABEL_CLOUD_SYNC_ENABLE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_destructive, MENU_ENUM_SUBLABEL_CLOUD_SYNC_DESTRUCTIVE) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_sync_saves, MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_SAVES) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_sync_configs, MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_CONFIGS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_driver, MENU_ENUM_SUBLABEL_CLOUD_SYNC_DRIVER) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_url, MENU_ENUM_SUBLABEL_CLOUD_SYNC_URL) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_username, MENU_ENUM_SUBLABEL_CLOUD_SYNC_USERNAME) @@ -5049,6 +5051,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_destructive); break; + case MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_sync_saves); + break; + case MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_sync_configs); + break; case MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_driver); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index aa1daeba56..3aed5bdb08 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -10708,12 +10708,14 @@ unsigned menu_displaylist_build_list( case DISPLAYLIST_CLOUD_SYNC_SETTINGS_LIST: { menu_displaylist_build_info_t build_list[] = { - {MENU_ENUM_LABEL_CLOUD_SYNC_ENABLE, PARSE_ONLY_BOOL }, - {MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE, PARSE_ONLY_BOOL }, - {MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER, PARSE_ONLY_STRING_OPTIONS }, - {MENU_ENUM_LABEL_CLOUD_SYNC_URL, PARSE_ONLY_STRING }, - {MENU_ENUM_LABEL_CLOUD_SYNC_USERNAME, PARSE_ONLY_STRING }, - {MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD, PARSE_ONLY_STRING }, + {MENU_ENUM_LABEL_CLOUD_SYNC_ENABLE, PARSE_ONLY_BOOL }, + {MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE, PARSE_ONLY_BOOL }, + {MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES, PARSE_ONLY_BOOL }, + {MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS, PARSE_ONLY_BOOL }, + {MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER, PARSE_ONLY_STRING_OPTIONS }, + {MENU_ENUM_LABEL_CLOUD_SYNC_URL, PARSE_ONLY_STRING }, + {MENU_ENUM_LABEL_CLOUD_SYNC_USERNAME, PARSE_ONLY_STRING }, + {MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD, PARSE_ONLY_STRING }, }; for (i = 0; i < ARRAY_SIZE(build_list); i++) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 40d1aedfb7..a92f2bca80 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -11830,6 +11830,36 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE); + CONFIG_BOOL( + list, list_info, + &settings->bools.cloud_sync_sync_saves, + MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES, + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_SAVES, + false, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE); + + CONFIG_BOOL( + list, list_info, + &settings->bools.cloud_sync_sync_configs, + MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS, + MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SYNC_CONFIGS, + false, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE); + CONFIG_STRING_OPTIONS( list, list_info, settings->arrays.cloud_sync_driver, diff --git a/msg_hash.h b/msg_hash.h index d759907560..b38471c158 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -3230,6 +3230,8 @@ enum msg_hash_enums MENU_LABEL(CLOUD_SYNC_SETTINGS), MENU_LABEL(CLOUD_SYNC_ENABLE), MENU_LABEL(CLOUD_SYNC_DESTRUCTIVE), + MENU_LABEL(CLOUD_SYNC_SYNC_SAVES), + MENU_LABEL(CLOUD_SYNC_SYNC_CONFIGS), MENU_LABEL(CLOUD_SYNC_DRIVER), MENU_LABEL(CLOUD_SYNC_URL), MENU_LABEL(CLOUD_SYNC_USERNAME), diff --git a/tasks/task_cloudsync.c b/tasks/task_cloudsync.c index 0660a7afe5..c57a3027a5 100644 --- a/tasks/task_cloudsync.c +++ b/tasks/task_cloudsync.c @@ -302,23 +302,32 @@ static void task_cloud_sync_manifest_append_dir(file_list_t *manifest, static struct string_list *task_cloud_sync_directory_map(void) { static struct string_list *list = NULL; + settings_t *settings = config_get_ptr(); + if (!list) { union string_list_elem_attr attr = {0}; char dir[PATH_MAX_LENGTH]; list = string_list_new(); - string_list_append(list, "config", attr); - fill_pathname_application_special(dir, - sizeof(dir), APPLICATION_SPECIAL_DIRECTORY_CONFIG); - list->elems[list->size - 1].userdata = strdup(dir); + if (settings->bools.cloud_sync_sync_configs) + { + string_list_append(list, "config", attr); + fill_pathname_application_special(dir, + sizeof(dir), APPLICATION_SPECIAL_DIRECTORY_CONFIG); + list->elems[list->size - 1].userdata = strdup(dir); + } - string_list_append(list, "saves", attr); - list->elems[list->size - 1].userdata = strdup(dir_get_ptr(RARCH_DIR_SAVEFILE)); + if (settings->bools.cloud_sync_sync_saves) + { + string_list_append(list, "saves", attr); + list->elems[list->size - 1].userdata = strdup(dir_get_ptr(RARCH_DIR_SAVEFILE)); - string_list_append(list, "states", attr); - list->elems[list->size - 1].userdata = strdup(dir_get_ptr(RARCH_DIR_SAVESTATE)); + string_list_append(list, "states", attr); + list->elems[list->size - 1].userdata = strdup(dir_get_ptr(RARCH_DIR_SAVESTATE)); + } } + return list; }