pidgin/pidgin

Use GListModel API for request fields in XMPP

13 months ago, Elliott Sales de Andrade
c1327ee3d0c0
Parents bce9e3254fe6
Children a4b3376be353
Use GListModel API for request fields in XMPP

Instead of the `GList`-based one.

Testing Done:
Compiled only.

Reviewed at https://reviews.imfreedom.org/r/2354/
--- a/libpurple/protocols/jabber/xdata.c Fri Mar 17 00:52:55 2023 -0500
+++ b/libpurple/protocols/jabber/xdata.c Fri Mar 17 01:20:18 2023 -0500
@@ -53,33 +53,56 @@
GCallback cb = data->cb;
gpointer user_data = data->user_data;
JabberStream *js = data->js;
- GList *groups, *flds;
char *actionhandle = NULL;
gboolean hasActions = (data->actions != NULL);
+ guint n_groups;
purple_xmlnode_set_namespace(result, "jabber:x:data");
purple_xmlnode_set_attrib(result, "type", "submit");
- for(groups = purple_request_page_get_groups(page); groups; groups = groups->next) {
- if(groups->data == data->actiongroup) {
- for(flds = purple_request_group_get_fields(groups->data); flds; flds = flds->next) {
- PurpleRequestField *field = flds->data;
- PurpleRequestFieldChoice *choice = PURPLE_REQUEST_FIELD_CHOICE(field);
- const char *id = purple_request_field_get_id(field);
+ n_groups = g_list_model_get_n_items(G_LIST_MODEL(page));
+ for(guint group_index = 0; group_index < n_groups; group_index++) {
+ PurpleRequestGroup *group = NULL;
+ guint n_fields;
+
+ group = g_list_model_get_item(G_LIST_MODEL(page), group_index);
+ n_fields = g_list_model_get_n_items(G_LIST_MODEL(group));
+
+ if(group == data->actiongroup) {
+ for(guint field_index = 0; field_index < n_fields; field_index++) {
+ PurpleRequestField *field = NULL;
+ PurpleRequestFieldChoice *choice = NULL;
+ const char *id = NULL;
int handleindex;
- if(!purple_strequal(id, "libpurple:jabber:xdata:actions"))
+
+ field = g_list_model_get_item(G_LIST_MODEL(group), field_index);
+ choice = PURPLE_REQUEST_FIELD_CHOICE(field);
+ id = purple_request_field_get_id(field);
+
+ if(!purple_strequal(id, "libpurple:jabber:xdata:actions")) {
+ g_object_unref(field);
continue;
+ }
+
handleindex = GPOINTER_TO_INT(purple_request_field_choice_get_value(choice));
actionhandle = g_strdup(g_list_nth_data(data->actions, handleindex));
+ g_object_unref(field);
break;
}
+
+ g_object_unref(group);
continue;
}
- for(flds = purple_request_group_get_fields(groups->data); flds; flds = flds->next) {
+
+ for(guint field_index = 0; field_index < n_fields; field_index++) {
PurpleXmlNode *fieldnode, *valuenode;
- PurpleRequestField *field = flds->data;
- const char *id = purple_request_field_get_id(field);
- jabber_x_data_field_type type = GPOINTER_TO_INT(g_hash_table_lookup(data->fields, id));
+ PurpleRequestField *field = NULL;
+ const char *id = NULL;
+ jabber_x_data_field_type type;
+
+ field = g_list_model_get_item(G_LIST_MODEL(group), field_index);
+ id = purple_request_field_get_id(field);
+ type = GPOINTER_TO_INT(g_hash_table_lookup(data->fields, id));
switch(type) {
case JABBER_X_DATA_TEXT_SINGLE:
@@ -147,7 +170,11 @@
case JABBER_X_DATA_IGNORE:
break;
}
+
+ g_object_unref(field);
}
+
+ g_object_unref(group);
}
g_hash_table_destroy(data->fields);