mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Added form validation for list-single type
This commit is contained in:
parent
524a52d0ac
commit
e13940daf4
@ -1916,6 +1916,7 @@ cmd_room(gchar **args, struct cmd_help_t help)
|
||||
ui_current_print_line("Form does not contain a field with tag %s", tag);
|
||||
} else {
|
||||
form_field_type_t field_type = form_get_field_type_by_tag(current->form, tag);
|
||||
gboolean valid = FALSE;
|
||||
switch (field_type) {
|
||||
case FIELD_TEXT_SINGLE:
|
||||
case FIELD_TEXT_PRIVATE:
|
||||
@ -1930,11 +1931,20 @@ cmd_room(gchar **args, struct cmd_help_t help)
|
||||
form_set_value_by_tag(current->form, tag, "0");
|
||||
ui_current_print_line("%s set to %s", tag, value);
|
||||
} else {
|
||||
ui_current_print_line("Value %s not valid for boolean field: %s", tag, value);
|
||||
ui_current_print_line("Value %s not valid for boolean field: %s", value, tag);
|
||||
}
|
||||
break;
|
||||
case FIELD_LIST_SINGLE:
|
||||
valid = form_field_contains_option_by_tag(current->form, tag, value);
|
||||
if (valid == TRUE) {
|
||||
form_set_value_by_tag(current->form, tag, value);
|
||||
ui_current_print_line("%s set to %s", tag, value);
|
||||
} else {
|
||||
ui_current_print_line("Value %s not a valid option for field: %s", value, tag);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ui_current_print_line("Value %s not valid for field: %s", tag, value);
|
||||
ui_current_print_line("Value %s not valid for field: %s", value, tag);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -441,6 +441,31 @@ _form_set_value_by_tag(DataForm *form, const char * const tag, char *value)
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_form_field_contains_option_by_tag(DataForm *form, const char * const tag, char *value)
|
||||
{
|
||||
char *var = g_hash_table_lookup(form->tag_to_var, tag);
|
||||
if (var != NULL) {
|
||||
GSList *curr = form->fields;
|
||||
while (curr != NULL) {
|
||||
FormField *field = curr->data;
|
||||
if (g_strcmp0(field->var, var) == 0) {
|
||||
GSList *curr_option = field->options;
|
||||
while (curr_option != NULL) {
|
||||
FormOption *option = curr_option->data;
|
||||
if (g_strcmp0(option->value, value) == 0) {
|
||||
return TRUE;
|
||||
}
|
||||
curr_option = g_slist_next(curr_option);
|
||||
}
|
||||
}
|
||||
curr = g_slist_next(curr);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
form_init_module(void)
|
||||
{
|
||||
@ -448,5 +473,6 @@ form_init_module(void)
|
||||
form_get_form_type_field = _form_get_form_type_field;
|
||||
form_get_field_type_by_tag = _form_get_field_type_by_tag;
|
||||
form_set_value_by_tag = _form_set_value_by_tag;
|
||||
form_field_contains_option_by_tag = _form_field_contains_option_by_tag;
|
||||
form_tag_exists = _form_tag_exists;
|
||||
}
|
||||
|
@ -211,5 +211,6 @@ char * (*form_get_form_type_field)(DataForm *form);
|
||||
void (*form_set_value_by_tag)(DataForm *form, const char * const tag, char *value);
|
||||
gboolean (*form_tag_exists)(DataForm *form, const char * const tag);
|
||||
form_field_type_t (*form_get_field_type_by_tag)(DataForm *form, const char * const tag);
|
||||
gboolean (*form_field_contains_option_by_tag)(DataForm *form, const char * const tag, char *value);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user