diff --git a/source/libublsettings-config.c b/source/libublsettings-config.c index 17e00b6..2cee21e 100644 --- a/source/libublsettings-config.c +++ b/source/libublsettings-config.c @@ -339,9 +339,20 @@ char *yon_config_command_get_full(config_str command, int command_size){ } if (final_size>0){ char *final_command = yon_char_parsed_to_string(final,final_size," -- get "); - char *temp = yon_char_replace(final_command,"ubconfig","ubconfig -ea"); - free(final_command); - final_command = temp; + int pos = yon_char_check_element(final_command,"ubconfig", " "); + if (pos&&yon_char_check_element(final_command,"-ea"," ")==0){ + int size=0; + config_str parsed = yon_char_parse(final_command,&size," "); + pos = yon_char_parsed_check_exist(parsed,size,"ubconfig"); + char *tmp = yon_char_unite(parsed[pos]," -ea",NULL); + free(parsed[pos]); + parsed[pos] = tmp; + free(final_command); + final_command = yon_char_parsed_to_string(parsed,size," "); + } + // char *temp = yon_char_replace(final_command,"ubconfig","ubconfig -ea"); + // free(final_command); + // final_command = temp; yon_char_parsed_free(final,final_size); return final_command; } @@ -1191,13 +1202,17 @@ config_str yon_config_get_load_parameters_by_list(int *size, config_str paramete if (!strcmp(temp->key,current_str)){ int position = yon_char_parsed_find_element(final,*size,((yon_config_parameter*)temp)->section); if (position>=0){ - char *string = yon_char_unite((final)[position]," ",current_str,NULL); + char *quoted = yon_config_parameter_set_quotes(current_str); + char *string = yon_char_unite((final)[position]," ",quoted,NULL); free((final)[position]); (final)[position]=string; + free(quoted); } else { - char *string = yon_char_unite(temp->section," ",current_str,NULL); + char *quoted = yon_config_parameter_set_quotes(current_str); + char *string = yon_char_unite(temp->section," ",quoted,NULL); yon_char_parsed_add_or_create_if_exists(final,size,string); + free(quoted); } } } @@ -1414,8 +1429,9 @@ int yon_config_save_list_simple(config_str parameters_keys, size_t size, char *p int parameters_size=0; config_str parameters = yon_config_get_save_parameters_by_list(¶meters_size,parameters_keys,size); if (parameters&¶meters_size){ - char *command_parameters = yon_char_parsed_to_string(parameters,parameters_size,";"); + char *command_parameters = yon_char_parsed_to_string(parameters,parameters_size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target ",path," ", command_parameters,NULL); + printf("%s\n",command); return !!system(command); } } @@ -1438,7 +1454,7 @@ int yon_config_save_args_simple(char *path, ...){ config_str parameters = yon_config_get_save_parameters_by_list(¶meters_size,params,size); yon_char_parsed_free(params,size); if (parameters&¶meters_size){ - char *command_parameters = yon_char_parsed_to_string(parameters,parameters_size,";"); + char *command_parameters = yon_char_parsed_to_string(parameters,parameters_size," -- "); char *command = yon_char_unite(ubconfig_dull_command,"--target ",path," ", command_parameters,NULL); return !!system(command); } @@ -1446,6 +1462,66 @@ int yon_config_save_args_simple(char *path, ...){ return 0; } +int yon_config_update_by_key(char *key){ + if (yon_char_is_empty(key)) return 0; + check_config{ + dictionary *current = yon_dictionary_get((dictionary**)&__yon__config__strings,key); + if (!current) return 0; + if (current->data) free(current->data); + current->data = NULL; + int size=0; + char *command = yon_config_parameter_get_load_command(key); + config_str new_param = yon_config_load(command,&size); + if (size&&!yon_char_is_empty(new_param[0])&&strcmp(new_param[0],"(null)\n")){ + yon_char_remove_last_symbol(new_param[0],'\n'); + current->data = yon_char_new(new_param[0]); + ((yon_config_parameter*)current)->flag1=0; + yon_config_set_status(key,0); + return 1; + } + } + return 0; +} + +int yon_config_update_by_list(config_str keys, size_t size){ + if (!size||!keys) return 0; + check_config{ + int params_size=0; + config_str parameters = yon_config_get_load_parameters_by_list(¶ms_size,keys,size); + if (params_size&¶meters){ + char *path = yon_config_command_get_path(config_last_load_command); + char *parameters_str = yon_char_parsed_to_string(parameters,params_size," "); + char *command = yon_char_unite(ubconfig_load_command(path), parameters_str, NULL); + yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); + } + } + return 0; +} + +int yon_config_update_by_args(char *key, ...){ + check_config{ + int size=0; + config_str keys = NULL; + yon_char_parsed_add_or_create_if_exists(keys,&size,key); + va_list args; + va_start(args,key); + char *cur_key = NULL; + while((cur_key = va_arg(args,char*))){ + yon_char_parsed_add_or_create_if_exists(keys,&size,cur_key); + + } + int params_size=0; + config_str parameters = yon_config_get_load_parameters_by_list(¶ms_size,keys,size); + if (params_size&¶meters){ + char *path = yon_config_command_get_path(config_last_load_command); + char *parameters_str = yon_char_parsed_to_string(parameters,params_size," -- get "); + char *command = yon_char_unite(ubconfig_load_command(path), parameters_str, NULL); + yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); + } + } + return 0; +} + char *yon_config_parameter_prepare_command(char *command, char *path, char *section, char *parameter){ if (!yon_char_is_empty(command)){ int size=0; diff --git a/source/libublsettings.h b/source/libublsettings.h index 7f94a1a..13b1cd5 100644 --- a/source/libublsettings.h +++ b/source/libublsettings.h @@ -1536,6 +1536,23 @@ int yon_config_save_list_simple(config_str parameters_keys, size_t size, char *p /// @return TRUE if successful, FALSE otherwise. int yon_config_save_args_simple(char *path, ...); +/// @brief Update parameter's value from configuration. +/// @param key Parameter's key. +/// @return TRUE if parameter successfully updated, FALSE if parameter doesn't registered in configuration +int yon_config_update_by_key(char *key); + +/// @brief Update parameter's value from configuration. +/// @param key Parameters key list. +/// @param size size of parameters keys list. +/// @return TRUE if parameter successfully updated, FALSE if parameter doesn't registered in configuration +int yon_config_update_by_list(config_str keys, size_t size); + +/// @brief Update parameters value from configuration. +/// @param key First parameter's key. +/// @param ... NULL-terminated list of parameter keys. +/// @return TRUE if parameter successfully updated, FALSE if parameter doesn't registered in configuration +int yon_config_update_by_args(char *key, ...); + /**int yon_config_force_save_registered(char *path, char *section) * [EN] * Force config to save at [path] config ignoring parameter save status.