libpurple/request.c

changeset 42116
d80a59dc4c91
parent 42112
86e0a26348a1
child 42117
8a001a903e90
equal deleted inserted replaced
42115:4f06e6f47a78 42116:d80a59dc4c91
56 char *type_hint; 56 char *type_hint;
57 57
58 gboolean visible; 58 gboolean visible;
59 gboolean required; 59 gboolean required;
60 gboolean sensitive; 60 gboolean sensitive;
61 PurpleRequestFieldSensitivityCb sensitivity_cb;
62 61
63 union 62 union
64 { 63 {
65 struct 64 struct
66 { 65 {
145 144
146 GList *required_fields; 145 GList *required_fields;
147 146
148 GList *validated_fields; 147 GList *validated_fields;
149 148
150 GList *autosensitive_fields;
151
152 void *ui_data; 149 void *ui_data;
153 }; 150 };
154 151
155 struct _PurpleRequestFieldGroup 152 struct _PurpleRequestFieldGroup
156 { 153 {
178 175
179 GSList *extra_actions; 176 GSList *extra_actions;
180 177
181 gpointer parent_from; 178 gpointer parent_from;
182 }; 179 };
183
184 static void
185 purple_request_fields_check_others_sensitivity(PurpleRequestField *field);
186 180
187 PurpleRequestCommonParameters * 181 PurpleRequestCommonParameters *
188 purple_request_cpar_new(void) 182 purple_request_cpar_new(void)
189 { 183 {
190 return g_rc_box_new0(PurpleRequestCommonParameters); 184 return g_rc_box_new0(PurpleRequestCommonParameters);
484 478
485 g_list_free_full(fields->groups, 479 g_list_free_full(fields->groups,
486 (GDestroyNotify)purple_request_field_group_destroy); 480 (GDestroyNotify)purple_request_field_group_destroy);
487 g_list_free(fields->required_fields); 481 g_list_free(fields->required_fields);
488 g_list_free(fields->validated_fields); 482 g_list_free(fields->validated_fields);
489 g_list_free(fields->autosensitive_fields);
490 g_hash_table_destroy(fields->fields); 483 g_hash_table_destroy(fields->fields);
491 g_free(fields); 484 g_free(fields);
492 } 485 }
493 486
494 void 487 void
521 514
522 if (purple_request_field_is_validatable(field)) { 515 if (purple_request_field_is_validatable(field)) {
523 fields->validated_fields = 516 fields->validated_fields =
524 g_list_append(fields->validated_fields, field); 517 g_list_append(fields->validated_fields, field);
525 } 518 }
526
527 if (field->sensitivity_cb != NULL) {
528 fields->autosensitive_fields =
529 g_list_append(fields->autosensitive_fields, field);
530 }
531 } 519 }
532 } 520 }
533 521
534 GList * 522 GList *
535 purple_request_fields_get_groups(const PurpleRequestFields *fields) 523 purple_request_fields_get_groups(const PurpleRequestFields *fields)
560 purple_request_fields_get_validatable(const PurpleRequestFields *fields) 548 purple_request_fields_get_validatable(const PurpleRequestFields *fields)
561 { 549 {
562 g_return_val_if_fail(fields != NULL, NULL); 550 g_return_val_if_fail(fields != NULL, NULL);
563 551
564 return fields->validated_fields; 552 return fields->validated_fields;
565 }
566
567 const GList *
568 purple_request_fields_get_autosensitive(const PurpleRequestFields *fields)
569 {
570 g_return_val_if_fail(fields != NULL, NULL);
571
572 return fields->autosensitive_fields;
573 } 553 }
574 554
575 gboolean 555 gboolean
576 purple_request_fields_is_field_required(const PurpleRequestFields *fields, 556 purple_request_fields_is_field_required(const PurpleRequestFields *fields,
577 const char *id) 557 const char *id)
636 if (!purple_request_field_is_valid(field, NULL)) 616 if (!purple_request_field_is_valid(field, NULL))
637 return FALSE; 617 return FALSE;
638 } 618 }
639 619
640 return TRUE; 620 return TRUE;
641 }
642
643 static void
644 purple_request_fields_check_sensitivity(PurpleRequestFields *fields)
645 {
646 GList *it;
647
648 g_return_if_fail(fields != NULL);
649
650 for (it = fields->autosensitive_fields; it; it = g_list_next(it)) {
651 PurpleRequestField *field = it->data;
652
653 if (field->sensitivity_cb == NULL) {
654 g_warn_if_reached();
655 continue;
656 }
657
658 purple_request_field_set_sensitive(field,
659 field->sensitivity_cb(field));
660 }
661 }
662
663 static void
664 purple_request_fields_check_others_sensitivity(PurpleRequestField *field)
665 {
666 g_return_if_fail(field != NULL);
667
668 if (field->group == NULL || field->group->fields_list == NULL)
669 return;
670
671 purple_request_fields_check_sensitivity(field->group->fields_list);
672 } 621 }
673 622
674 PurpleRequestField * 623 PurpleRequestField *
675 purple_request_fields_get_field(const PurpleRequestFields *fields, const char *id) 624 purple_request_fields_get_field(const PurpleRequestFields *fields, const char *id)
676 { 625 {
820 769
821 if (purple_request_field_is_validatable(field)) 770 if (purple_request_field_is_validatable(field))
822 { 771 {
823 group->fields_list->validated_fields = 772 group->fields_list->validated_fields =
824 g_list_append(group->fields_list->validated_fields, field); 773 g_list_append(group->fields_list->validated_fields, field);
825 }
826
827 if (field->sensitivity_cb != NULL)
828 {
829 group->fields_list->autosensitive_fields =
830 g_list_append(group->fields_list->autosensitive_fields, field);
831 } 774 }
832 } 775 }
833 776
834 field->group = group; 777 field->group = group;
835 778
1118 g_return_val_if_fail(field != NULL, FALSE); 1061 g_return_val_if_fail(field != NULL, FALSE);
1119 1062
1120 return field->sensitive; 1063 return field->sensitive;
1121 } 1064 }
1122 1065
1123 void
1124 purple_request_field_set_sensitivity_cb(PurpleRequestField *field,
1125 PurpleRequestFieldSensitivityCb cb)
1126 {
1127 PurpleRequestFields *flist;
1128
1129 g_return_if_fail(field != NULL);
1130
1131 field->sensitivity_cb = cb;
1132
1133 if (!field->group || !field->group->fields_list)
1134 return;
1135 flist = field->group->fields_list;
1136 flist->autosensitive_fields = g_list_remove(flist->autosensitive_fields,
1137 field);
1138 if (cb != NULL)
1139 {
1140 flist->autosensitive_fields = g_list_append(
1141 flist->autosensitive_fields, field);
1142 }
1143 }
1144
1145 PurpleRequestField * 1066 PurpleRequestField *
1146 purple_request_field_string_new(const char *id, const char *text, 1067 purple_request_field_string_new(const char *id, const char *text,
1147 const char *default_value, gboolean multiline) 1068 const char *default_value, gboolean multiline)
1148 { 1069 {
1149 PurpleRequestField *field; 1070 PurpleRequestField *field;
1178 g_return_if_fail(field != NULL); 1099 g_return_if_fail(field != NULL);
1179 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_STRING); 1100 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_STRING);
1180 1101
1181 g_free(field->u.string.value); 1102 g_free(field->u.string.value);
1182 field->u.string.value = g_strdup(value); 1103 field->u.string.value = g_strdup(value);
1183
1184 purple_request_fields_check_others_sensitivity(field);
1185 } 1104 }
1186 1105
1187 void 1106 void
1188 purple_request_field_string_set_masked(PurpleRequestField *field, gboolean masked) 1107 purple_request_field_string_set_masked(PurpleRequestField *field, gboolean masked)
1189 { 1108 {
1289 purple_debug_error("request", "Int value out of bounds\n"); 1208 purple_debug_error("request", "Int value out of bounds\n");
1290 return; 1209 return;
1291 } 1210 }
1292 1211
1293 field->u.integer.value = value; 1212 field->u.integer.value = value;
1294
1295 purple_request_fields_check_others_sensitivity(field);
1296 } 1213 }
1297 1214
1298 int 1215 int
1299 purple_request_field_int_get_default_value(const PurpleRequestField *field) 1216 purple_request_field_int_get_default_value(const PurpleRequestField *field)
1300 { 1217 {
1363 { 1280 {
1364 g_return_if_fail(field != NULL); 1281 g_return_if_fail(field != NULL);
1365 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_BOOLEAN); 1282 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_BOOLEAN);
1366 1283
1367 field->u.boolean.value = value; 1284 field->u.boolean.value = value;
1368
1369 purple_request_fields_check_others_sensitivity(field);
1370 } 1285 }
1371 1286
1372 gboolean 1287 gboolean
1373 purple_request_field_bool_get_default_value(const PurpleRequestField *field) 1288 purple_request_field_bool_get_default_value(const PurpleRequestField *field)
1374 { 1289 {
1442 { 1357 {
1443 g_return_if_fail(field != NULL); 1358 g_return_if_fail(field != NULL);
1444 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_CHOICE); 1359 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_CHOICE);
1445 1360
1446 field->u.choice.value = value; 1361 field->u.choice.value = value;
1447
1448 purple_request_fields_check_others_sensitivity(field);
1449 } 1362 }
1450 1363
1451 gpointer 1364 gpointer
1452 purple_request_field_choice_get_default_value(const PurpleRequestField *field) 1365 purple_request_field_choice_get_default_value(const PurpleRequestField *field)
1453 { 1366 {
1765 { 1678 {
1766 g_return_if_fail(field != NULL); 1679 g_return_if_fail(field != NULL);
1767 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_ACCOUNT); 1680 g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_ACCOUNT);
1768 1681
1769 field->u.account.account = value; 1682 field->u.account.account = value;
1770
1771 purple_request_fields_check_others_sensitivity(field);
1772 } 1683 }
1773 1684
1774 void 1685 void
1775 purple_request_field_account_set_show_all(PurpleRequestField *field, 1686 purple_request_field_account_set_show_all(PurpleRequestField *field,
1776 gboolean show_all) 1687 gboolean show_all)
2261 !((ops->features & PURPLE_REQUEST_FEATURE_HTML))) 2172 !((ops->features & PURPLE_REQUEST_FEATURE_HTML)))
2262 { 2173 {
2263 purple_request_fields_strip_html(fields); 2174 purple_request_fields_strip_html(fields);
2264 } 2175 }
2265 2176
2266 purple_request_fields_check_sensitivity(fields);
2267
2268 if (ops != NULL && ops->request_fields != NULL) { 2177 if (ops != NULL && ops->request_fields != NULL) {
2269 PurpleRequestInfo *info; 2178 PurpleRequestInfo *info;
2270 gchar **tmp; 2179 gchar **tmp;
2271 2180
2272 tmp = purple_request_strip_html(cpar, &primary, &secondary); 2181 tmp = purple_request_strip_html(cpar, &primary, &secondary);

mercurial