Split PurpleRequestFields into its own files

Sun, 05 Mar 2023 02:26:17 -0600

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Sun, 05 Mar 2023 02:26:17 -0600
changeset 42122
77a267934abf
parent 42121
b6e38c635deb
child 42123
78bae9d1b69b

Split PurpleRequestFields into its own files

As before, this uses `hg cp`, so it _looks_ like a bunch of deletion.

Again, there's a bit of private API for the cross-struct access, which should go away later.

I also named the file as it will be eventually, even though the class name hasn't been changed.

I did not do any other API changes to make this a simpler review.

Testing Done:
Compiled, and opened Request Fields from Demo.

Reviewed at https://reviews.imfreedom.org/r/2317/

libpurple/meson.build file | annotate | diff | comparison | revisions
libpurple/purplerequestpage.c file | annotate | diff | comparison | revisions
libpurple/purplerequestpage.h file | annotate | diff | comparison | revisions
libpurple/request.c file | annotate | diff | comparison | revisions
libpurple/request.h file | annotate | diff | comparison | revisions
po/POTFILES.in file | annotate | diff | comparison | revisions
--- a/libpurple/meson.build	Sun Mar 05 02:16:11 2023 -0600
+++ b/libpurple/meson.build	Sun Mar 05 02:26:17 2023 -0600
@@ -86,6 +86,7 @@
 	'purpleproxyinfo.c',
 	'purplerequestfield.c',
 	'purplerequestgroup.c',
+	'purplerequestpage.c',
 	'purpleroomlistroom.c',
 	'purplesqlite3.c',
 	'purplesqlitehistoryadapter.c',
@@ -193,6 +194,7 @@
 	'purpleproxyinfo.h',
 	'purplerequestfield.h',
 	'purplerequestgroup.h',
+	'purplerequestpage.h',
 	'purpleroomlistroom.h',
 	'purplesqlite3.h',
 	'purplesqlitehistoryadapter.h',
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purplerequestpage.c	Sun Mar 05 02:26:17 2023 -0600
@@ -0,0 +1,334 @@
+/* purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#include <glib/gi18n-lib.h>
+
+#include "glibcompat.h"
+#include "purplerequestpage.h"
+#include "purpleprivate.h"
+
+struct _PurpleRequestFields
+{
+	GList *groups;
+
+	GHashTable *fields;
+
+	GList *required_fields;
+
+	GList *validated_fields;
+
+	void *ui_data;
+};
+
+PurpleRequestFields *
+purple_request_fields_new(void)
+{
+	PurpleRequestFields *fields;
+
+	fields = g_new0(PurpleRequestFields, 1);
+
+	fields->fields = g_hash_table_new_full(g_str_hash, g_str_equal,
+										   g_free, NULL);
+
+	return fields;
+}
+
+void
+purple_request_fields_destroy(PurpleRequestFields *fields)
+{
+	g_return_if_fail(fields != NULL);
+
+	g_list_free_full(fields->groups,
+	                 (GDestroyNotify)purple_request_field_group_destroy);
+	g_list_free(fields->required_fields);
+	g_list_free(fields->validated_fields);
+	g_hash_table_destroy(fields->fields);
+	g_free(fields);
+}
+
+void
+_purple_request_field_list_set_field_required(PurpleRequestFields *fields,
+                                              PurpleRequestField *field,
+                                              gboolean required)
+{
+	g_return_if_fail(fields != NULL);
+
+	if(required) {
+		fields->required_fields = g_list_append(fields->required_fields, field);
+	} else {
+		fields->required_fields = g_list_remove(fields->required_fields, field);
+	}
+}
+
+void
+_purple_request_field_list_set_field_validator(PurpleRequestFields *fields,
+                                               PurpleRequestField *field,
+                                               gboolean validator)
+{
+	g_return_if_fail(fields != NULL);
+
+	fields->validated_fields = g_list_remove(fields->validated_fields, field);
+	if(validator) {
+		fields->validated_fields = g_list_append(fields->validated_fields,
+		                                         field);
+	}
+}
+
+void
+_purple_request_field_list_add_field(PurpleRequestFields *fields,
+                                     PurpleRequestField *field)
+{
+	g_return_if_fail(fields != NULL);
+
+	g_hash_table_insert(fields->fields,
+	                    g_strdup(purple_request_field_get_id(field)), field);
+
+	if(purple_request_field_is_required(field)) {
+		fields->required_fields = g_list_append(fields->required_fields,
+		                                        field);
+	}
+
+	if(purple_request_field_is_validatable(field)) {
+		fields->validated_fields = g_list_append(fields->validated_fields,
+		                                         field);
+	}
+}
+
+void
+purple_request_fields_add_group(PurpleRequestFields *fields,
+							  PurpleRequestFieldGroup *group)
+{
+	GList *l;
+	PurpleRequestField *field;
+
+	g_return_if_fail(fields != NULL);
+	g_return_if_fail(group  != NULL);
+
+	fields->groups = g_list_append(fields->groups, group);
+
+	_purple_request_field_group_set_field_list(group, fields);
+
+	for (l = purple_request_field_group_get_fields(group);
+		 l != NULL;
+		 l = l->next) {
+
+		field = l->data;
+
+		g_hash_table_insert(fields->fields,
+			g_strdup(purple_request_field_get_id(field)), field);
+
+		if (purple_request_field_is_required(field)) {
+			fields->required_fields =
+				g_list_append(fields->required_fields, field);
+		}
+
+		if (purple_request_field_is_validatable(field)) {
+			fields->validated_fields =
+				g_list_append(fields->validated_fields, field);
+		}
+	}
+}
+
+GList *
+purple_request_fields_get_groups(const PurpleRequestFields *fields)
+{
+	g_return_val_if_fail(fields != NULL, NULL);
+
+	return fields->groups;
+}
+
+gboolean
+purple_request_fields_exists(const PurpleRequestFields *fields, const char *id)
+{
+	g_return_val_if_fail(fields != NULL, FALSE);
+	g_return_val_if_fail(id     != NULL, FALSE);
+
+	return (g_hash_table_lookup(fields->fields, id) != NULL);
+}
+
+const GList *
+purple_request_fields_get_required(const PurpleRequestFields *fields)
+{
+	g_return_val_if_fail(fields != NULL, NULL);
+
+	return fields->required_fields;
+}
+
+const GList *
+purple_request_fields_get_validatable(const PurpleRequestFields *fields)
+{
+	g_return_val_if_fail(fields != NULL, NULL);
+
+	return fields->validated_fields;
+}
+
+gboolean
+purple_request_fields_is_field_required(const PurpleRequestFields *fields,
+									  const char *id)
+{
+	PurpleRequestField *field;
+
+	g_return_val_if_fail(fields != NULL, FALSE);
+	g_return_val_if_fail(id     != NULL, FALSE);
+
+	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+		return FALSE;
+
+	return purple_request_field_is_required(field);
+}
+
+gboolean
+purple_request_fields_all_required_filled(const PurpleRequestFields *fields)
+{
+	GList *l;
+
+	g_return_val_if_fail(fields != NULL, FALSE);
+
+	for (l = fields->required_fields; l != NULL; l = l->next)
+	{
+		PurpleRequestField *field = (PurpleRequestField *)l->data;
+
+		if (!purple_request_field_is_filled(field))
+			return FALSE;
+	}
+
+	return TRUE;
+}
+
+gboolean
+purple_request_fields_all_valid(const PurpleRequestFields *fields)
+{
+	GList *l;
+
+	g_return_val_if_fail(fields != NULL, FALSE);
+
+	for (l = fields->validated_fields; l != NULL; l = l->next)
+	{
+		PurpleRequestField *field = (PurpleRequestField *)l->data;
+
+		if (!purple_request_field_is_valid(field, NULL))
+			return FALSE;
+	}
+
+	return TRUE;
+}
+
+PurpleRequestField *
+purple_request_fields_get_field(const PurpleRequestFields *fields, const char *id)
+{
+	PurpleRequestField *field;
+
+	g_return_val_if_fail(fields != NULL, NULL);
+	g_return_val_if_fail(id     != NULL, NULL);
+
+	field = g_hash_table_lookup(fields->fields, id);
+
+	g_return_val_if_fail(field != NULL, NULL);
+
+	return field;
+}
+
+const char *
+purple_request_fields_get_string(const PurpleRequestFields *fields, const char *id)
+{
+	PurpleRequestField *field;
+
+	g_return_val_if_fail(fields != NULL, NULL);
+	g_return_val_if_fail(id     != NULL, NULL);
+
+	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+		return NULL;
+
+	return purple_request_field_string_get_value(field);
+}
+
+int
+purple_request_fields_get_integer(const PurpleRequestFields *fields,
+								const char *id)
+{
+	PurpleRequestField *field;
+
+	g_return_val_if_fail(fields != NULL, 0);
+	g_return_val_if_fail(id     != NULL, 0);
+
+	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+		return 0;
+
+	return purple_request_field_int_get_value(field);
+}
+
+gboolean
+purple_request_fields_get_bool(const PurpleRequestFields *fields, const char *id)
+{
+	PurpleRequestField *field;
+
+	g_return_val_if_fail(fields != NULL, FALSE);
+	g_return_val_if_fail(id     != NULL, FALSE);
+
+	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+		return FALSE;
+
+	return purple_request_field_bool_get_value(field);
+}
+
+gpointer
+purple_request_fields_get_choice(const PurpleRequestFields *fields,
+	const char *id)
+{
+	PurpleRequestField *field;
+
+	g_return_val_if_fail(fields != NULL, NULL);
+	g_return_val_if_fail(id != NULL, NULL);
+
+	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+		return NULL;
+
+	return purple_request_field_choice_get_value(field);
+}
+
+PurpleAccount *
+purple_request_fields_get_account(const PurpleRequestFields *fields,
+								const char *id)
+{
+	PurpleRequestField *field;
+
+	g_return_val_if_fail(fields != NULL, NULL);
+	g_return_val_if_fail(id     != NULL, NULL);
+
+	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+		return NULL;
+
+	return purple_request_field_account_get_value(field);
+}
+
+gpointer purple_request_fields_get_ui_data(const PurpleRequestFields *fields)
+{
+	g_return_val_if_fail(fields != NULL, NULL);
+
+	return fields->ui_data;
+}
+
+void purple_request_fields_set_ui_data(PurpleRequestFields *fields, gpointer ui_data)
+{
+	g_return_if_fail(fields != NULL);
+
+	fields->ui_data = ui_data;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purplerequestpage.h	Sun Mar 05 02:26:17 2023 -0600
@@ -0,0 +1,248 @@
+/*
+ * Purple - Internet Messaging Library
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
+# error "only <purple.h> may be included directly"
+#endif
+
+#ifndef PURPLE_REQUEST_PAGE_H
+#define PURPLE_REQUEST_PAGE_H
+
+#include <stdlib.h>
+
+#include <glib.h>
+#include <glib-object.h>
+
+/**
+ * PurpleRequestFields:
+ *
+ * Multiple fields request data.
+ */
+typedef struct _PurpleRequestFields PurpleRequestFields;
+
+#include "account.h"
+#include "purplerequestgroup.h"
+#include "purplerequestfield.h"
+
+G_BEGIN_DECLS
+
+/**
+ * purple_request_fields_new:
+ *
+ * Creates a list of fields to pass to purple_request_fields().
+ *
+ * Returns: (transfer full): A PurpleRequestFields structure.
+ */
+PurpleRequestFields *purple_request_fields_new(void);
+
+/**
+ * purple_request_fields_destroy:
+ * @fields: The list of fields to destroy.
+ *
+ * Destroys a list of fields.
+ */
+void purple_request_fields_destroy(PurpleRequestFields *fields);
+
+/**
+ * purple_request_fields_add_group:
+ * @fields: The fields list.
+ * @group:  The group to add.
+ *
+ * Adds a group of fields to the list.
+ */
+void purple_request_fields_add_group(PurpleRequestFields *fields,
+								   PurpleRequestFieldGroup *group);
+
+/**
+ * purple_request_fields_get_groups:
+ * @fields: The fields list.
+ *
+ * Returns a list of all groups in a field list.
+ *
+ * Returns: (element-type PurpleRequestFieldGroup) (transfer none): A list of groups.
+ */
+GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
+
+/**
+ * purple_request_fields_exists:
+ * @fields: The fields list.
+ * @id:     The ID of the field.
+ *
+ * Returns whether or not the field with the specified ID exists.
+ *
+ * Returns: TRUE if the field exists, or FALSE.
+ */
+gboolean purple_request_fields_exists(const PurpleRequestFields *fields,
+									const char *id);
+
+/**
+ * purple_request_fields_get_required:
+ * @fields: The fields list.
+ *
+ * Returns a list of all required fields.
+ *
+ * Returns: (element-type PurpleRequestField) (transfer none): The list of required fields.
+ */
+const GList *purple_request_fields_get_required(
+	const PurpleRequestFields *fields);
+
+/**
+ * purple_request_fields_get_validatable:
+ * @fields: The fields list.
+ *
+ * Returns a list of all validated fields.
+ *
+ * Returns: (element-type PurpleRequestField) (transfer none): The list of validated fields.
+ */
+const GList *purple_request_fields_get_validatable(
+	const PurpleRequestFields *fields);
+
+/**
+ * purple_request_fields_is_field_required:
+ * @fields: The fields list.
+ * @id:     The field ID.
+ *
+ * Returns whether or not a field with the specified ID is required.
+ *
+ * Returns: TRUE if the specified field is required, or FALSE.
+ */
+gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields,
+											   const char *id);
+
+/**
+ * purple_request_fields_all_required_filled:
+ * @fields: The fields list.
+ *
+ * Returns whether or not all required fields have values.
+ *
+ * Returns: TRUE if all required fields have values, or FALSE.
+ */
+gboolean purple_request_fields_all_required_filled(
+	const PurpleRequestFields *fields);
+
+/**
+ * purple_request_fields_all_valid:
+ * @fields: The fields list.
+ *
+ * Returns whether or not all fields are valid.
+ *
+ * Returns: TRUE if all fields are valid, or FALSE.
+ */
+gboolean purple_request_fields_all_valid(const PurpleRequestFields *fields);
+
+/**
+ * purple_request_fields_get_field:
+ * @fields: The fields list.
+ * @id:     The ID of the field.
+ *
+ * Return the field with the specified ID.
+ *
+ * Returns: (transfer none): The field, if found.
+ */
+PurpleRequestField *purple_request_fields_get_field(
+		const PurpleRequestFields *fields, const char *id);
+
+/**
+ * purple_request_fields_get_string:
+ * @fields: The fields list.
+ * @id:     The ID of the field.
+ *
+ * Returns the string value of a field with the specified ID.
+ *
+ * Returns: The string value, if found, or %NULL otherwise.
+ */
+const char *purple_request_fields_get_string(const PurpleRequestFields *fields,
+										   const char *id);
+
+/**
+ * purple_request_fields_get_integer:
+ * @fields: The fields list.
+ * @id:     The ID of the field.
+ *
+ * Returns the integer value of a field with the specified ID.
+ *
+ * Returns: The integer value, if found, or 0 otherwise.
+ */
+int purple_request_fields_get_integer(const PurpleRequestFields *fields,
+									const char *id);
+
+/**
+ * purple_request_fields_get_bool:
+ * @fields: The fields list.
+ * @id:     The ID of the field.
+ *
+ * Returns the boolean value of a field with the specified ID.
+ *
+ * Returns: The boolean value, if found, or %FALSE otherwise.
+ */
+gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields,
+									  const char *id);
+
+/**
+ * purple_request_fields_get_choice:
+ * @fields: The fields list.
+ * @id:     The ID of the field.
+ *
+ * Returns the choice index of a field with the specified ID.
+ *
+ * Returns: The choice value, if found, or NULL otherwise.
+ */
+gpointer
+purple_request_fields_get_choice(const PurpleRequestFields *fields,
+	const char *id);
+
+/**
+ * purple_request_fields_get_account:
+ * @fields: The fields list.
+ * @id:     The ID of the field.
+ *
+ * Returns the account of a field with the specified ID.
+ *
+ * Returns: (transfer none): The account value, if found, or %NULL otherwise.
+ */
+PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields,
+											 const char *id);
+
+/**
+ * purple_request_fields_get_ui_data:
+ * @fields: The fields list.
+ *
+ * Returns the UI data associated with this object.
+ *
+ * Returns: The UI data associated with this object.  This is a
+ *         convenience field provided to the UIs--it is not
+ *         used by the libpurple core.
+ */
+gpointer purple_request_fields_get_ui_data(const PurpleRequestFields *fields);
+
+/**
+ * purple_request_fields_set_ui_data:
+ * @fields: The fields list.
+ * @ui_data: A pointer to associate with this object.
+ *
+ * Set the UI data associated with this object.
+ */
+void purple_request_fields_set_ui_data(PurpleRequestFields *fields, gpointer ui_data);
+
+G_END_DECLS
+
+#endif /* PURPLE_REQUEST_PAGE_H */
--- a/libpurple/request.c	Sun Mar 05 02:16:11 2023 -0600
+++ b/libpurple/request.c	Sun Mar 05 02:26:17 2023 -0600
@@ -46,19 +46,6 @@
 	GSList *notify_on_close;
 } PurpleRequestInfo;
 
-struct _PurpleRequestFields
-{
-	GList *groups;
-
-	GHashTable *fields;
-
-	GList *required_fields;
-
-	GList *validated_fields;
-
-	void *ui_data;
-};
-
 struct _PurpleRequestCommonParameters {
 	PurpleAccount *account;
 	PurpleConversation *conv;
@@ -359,301 +346,6 @@
 	return NULL;
 }
 
-PurpleRequestFields *
-purple_request_fields_new(void)
-{
-	PurpleRequestFields *fields;
-
-	fields = g_new0(PurpleRequestFields, 1);
-
-	fields->fields = g_hash_table_new_full(g_str_hash, g_str_equal,
-										   g_free, NULL);
-
-	return fields;
-}
-
-void
-purple_request_fields_destroy(PurpleRequestFields *fields)
-{
-	g_return_if_fail(fields != NULL);
-
-	g_list_free_full(fields->groups,
-	                 (GDestroyNotify)purple_request_field_group_destroy);
-	g_list_free(fields->required_fields);
-	g_list_free(fields->validated_fields);
-	g_hash_table_destroy(fields->fields);
-	g_free(fields);
-}
-
-void
-_purple_request_field_list_set_field_required(PurpleRequestFields *fields,
-                                              PurpleRequestField *field,
-                                              gboolean required)
-{
-	g_return_if_fail(fields != NULL);
-
-	if(required) {
-		fields->required_fields = g_list_append(fields->required_fields, field);
-	} else {
-		fields->required_fields = g_list_remove(fields->required_fields, field);
-	}
-}
-
-void
-_purple_request_field_list_set_field_validator(PurpleRequestFields *fields,
-                                               PurpleRequestField *field,
-                                               gboolean validator)
-{
-	g_return_if_fail(fields != NULL);
-
-	fields->validated_fields = g_list_remove(fields->validated_fields, field);
-	if(validator) {
-		fields->validated_fields = g_list_append(fields->validated_fields,
-		                                         field);
-	}
-}
-
-void
-_purple_request_field_list_add_field(PurpleRequestFields *fields,
-                                     PurpleRequestField *field)
-{
-	g_return_if_fail(fields != NULL);
-
-	g_hash_table_insert(fields->fields,
-	                    g_strdup(purple_request_field_get_id(field)), field);
-
-	if(purple_request_field_is_required(field)) {
-		fields->required_fields = g_list_append(fields->required_fields,
-		                                        field);
-	}
-
-	if(purple_request_field_is_validatable(field)) {
-		fields->validated_fields = g_list_append(fields->validated_fields,
-		                                         field);
-	}
-}
-
-void
-purple_request_fields_add_group(PurpleRequestFields *fields,
-							  PurpleRequestFieldGroup *group)
-{
-	GList *l;
-	PurpleRequestField *field;
-
-	g_return_if_fail(fields != NULL);
-	g_return_if_fail(group  != NULL);
-
-	fields->groups = g_list_append(fields->groups, group);
-
-	_purple_request_field_group_set_field_list(group, fields);
-
-	for (l = purple_request_field_group_get_fields(group);
-		 l != NULL;
-		 l = l->next) {
-
-		field = l->data;
-
-		g_hash_table_insert(fields->fields,
-			g_strdup(purple_request_field_get_id(field)), field);
-
-		if (purple_request_field_is_required(field)) {
-			fields->required_fields =
-				g_list_append(fields->required_fields, field);
-		}
-
-		if (purple_request_field_is_validatable(field)) {
-			fields->validated_fields =
-				g_list_append(fields->validated_fields, field);
-		}
-	}
-}
-
-GList *
-purple_request_fields_get_groups(const PurpleRequestFields *fields)
-{
-	g_return_val_if_fail(fields != NULL, NULL);
-
-	return fields->groups;
-}
-
-gboolean
-purple_request_fields_exists(const PurpleRequestFields *fields, const char *id)
-{
-	g_return_val_if_fail(fields != NULL, FALSE);
-	g_return_val_if_fail(id     != NULL, FALSE);
-
-	return (g_hash_table_lookup(fields->fields, id) != NULL);
-}
-
-const GList *
-purple_request_fields_get_required(const PurpleRequestFields *fields)
-{
-	g_return_val_if_fail(fields != NULL, NULL);
-
-	return fields->required_fields;
-}
-
-const GList *
-purple_request_fields_get_validatable(const PurpleRequestFields *fields)
-{
-	g_return_val_if_fail(fields != NULL, NULL);
-
-	return fields->validated_fields;
-}
-
-gboolean
-purple_request_fields_is_field_required(const PurpleRequestFields *fields,
-									  const char *id)
-{
-	PurpleRequestField *field;
-
-	g_return_val_if_fail(fields != NULL, FALSE);
-	g_return_val_if_fail(id     != NULL, FALSE);
-
-	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
-		return FALSE;
-
-	return purple_request_field_is_required(field);
-}
-
-gboolean
-purple_request_fields_all_required_filled(const PurpleRequestFields *fields)
-{
-	GList *l;
-
-	g_return_val_if_fail(fields != NULL, FALSE);
-
-	for (l = fields->required_fields; l != NULL; l = l->next)
-	{
-		PurpleRequestField *field = (PurpleRequestField *)l->data;
-
-		if (!purple_request_field_is_filled(field))
-			return FALSE;
-	}
-
-	return TRUE;
-}
-
-gboolean
-purple_request_fields_all_valid(const PurpleRequestFields *fields)
-{
-	GList *l;
-
-	g_return_val_if_fail(fields != NULL, FALSE);
-
-	for (l = fields->validated_fields; l != NULL; l = l->next)
-	{
-		PurpleRequestField *field = (PurpleRequestField *)l->data;
-
-		if (!purple_request_field_is_valid(field, NULL))
-			return FALSE;
-	}
-
-	return TRUE;
-}
-
-PurpleRequestField *
-purple_request_fields_get_field(const PurpleRequestFields *fields, const char *id)
-{
-	PurpleRequestField *field;
-
-	g_return_val_if_fail(fields != NULL, NULL);
-	g_return_val_if_fail(id     != NULL, NULL);
-
-	field = g_hash_table_lookup(fields->fields, id);
-
-	g_return_val_if_fail(field != NULL, NULL);
-
-	return field;
-}
-
-const char *
-purple_request_fields_get_string(const PurpleRequestFields *fields, const char *id)
-{
-	PurpleRequestField *field;
-
-	g_return_val_if_fail(fields != NULL, NULL);
-	g_return_val_if_fail(id     != NULL, NULL);
-
-	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
-		return NULL;
-
-	return purple_request_field_string_get_value(field);
-}
-
-int
-purple_request_fields_get_integer(const PurpleRequestFields *fields,
-								const char *id)
-{
-	PurpleRequestField *field;
-
-	g_return_val_if_fail(fields != NULL, 0);
-	g_return_val_if_fail(id     != NULL, 0);
-
-	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
-		return 0;
-
-	return purple_request_field_int_get_value(field);
-}
-
-gboolean
-purple_request_fields_get_bool(const PurpleRequestFields *fields, const char *id)
-{
-	PurpleRequestField *field;
-
-	g_return_val_if_fail(fields != NULL, FALSE);
-	g_return_val_if_fail(id     != NULL, FALSE);
-
-	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
-		return FALSE;
-
-	return purple_request_field_bool_get_value(field);
-}
-
-gpointer
-purple_request_fields_get_choice(const PurpleRequestFields *fields,
-	const char *id)
-{
-	PurpleRequestField *field;
-
-	g_return_val_if_fail(fields != NULL, NULL);
-	g_return_val_if_fail(id != NULL, NULL);
-
-	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
-		return NULL;
-
-	return purple_request_field_choice_get_value(field);
-}
-
-PurpleAccount *
-purple_request_fields_get_account(const PurpleRequestFields *fields,
-								const char *id)
-{
-	PurpleRequestField *field;
-
-	g_return_val_if_fail(fields != NULL, NULL);
-	g_return_val_if_fail(id     != NULL, NULL);
-
-	if ((field = purple_request_fields_get_field(fields, id)) == NULL)
-		return NULL;
-
-	return purple_request_field_account_get_value(field);
-}
-
-gpointer purple_request_fields_get_ui_data(const PurpleRequestFields *fields)
-{
-	g_return_val_if_fail(fields != NULL, NULL);
-
-	return fields->ui_data;
-}
-
-void purple_request_fields_set_ui_data(PurpleRequestFields *fields, gpointer ui_data)
-{
-	g_return_if_fail(fields != NULL);
-
-	fields->ui_data = ui_data;
-}
-
 /* -- */
 
 static gchar *
@@ -933,7 +625,10 @@
 {
 	GList *itg;
 
-	for (itg = fields->groups; itg != NULL; itg = g_list_next(itg)) {
+	for (itg = purple_request_fields_get_groups(fields);
+	     itg != NULL;
+	     itg = g_list_next(itg))
+	{
 		PurpleRequestFieldGroup *group = itg->data;
 		GList *itf;
 
--- a/libpurple/request.h	Sun Mar 05 02:16:11 2023 -0600
+++ b/libpurple/request.h	Sun Mar 05 02:26:17 2023 -0600
@@ -35,13 +35,6 @@
 #define PURPLE_TYPE_REQUEST_UI_OPS (purple_request_ui_ops_get_type())
 
 /**
- * PurpleRequestFields:
- *
- * Multiple fields request data.
- */
-typedef struct _PurpleRequestFields PurpleRequestFields;
-
-/**
  * PurpleRequestCommonParameters:
  *
  * Common parameters for UI operations.
@@ -52,6 +45,7 @@
 
 #include "account.h"
 #include "purpleconversation.h"
+#include "purplerequestpage.h"
 #include "purplerequestgroup.h"
 #include "purplerequestfield.h"
 #include "request-datasheet.h"
@@ -508,208 +502,6 @@
 purple_request_cpar_get_parent_from(PurpleRequestCommonParameters *cpar);
 
 /**************************************************************************/
-/* Field List API                                                         */
-/**************************************************************************/
-
-/**
- * purple_request_fields_new:
- *
- * Creates a list of fields to pass to purple_request_fields().
- *
- * Returns: (transfer full): A PurpleRequestFields structure.
- */
-PurpleRequestFields *purple_request_fields_new(void);
-
-/**
- * purple_request_fields_destroy:
- * @fields: The list of fields to destroy.
- *
- * Destroys a list of fields.
- */
-void purple_request_fields_destroy(PurpleRequestFields *fields);
-
-/**
- * purple_request_fields_add_group:
- * @fields: The fields list.
- * @group:  The group to add.
- *
- * Adds a group of fields to the list.
- */
-void purple_request_fields_add_group(PurpleRequestFields *fields,
-								   PurpleRequestFieldGroup *group);
-
-/**
- * purple_request_fields_get_groups:
- * @fields: The fields list.
- *
- * Returns a list of all groups in a field list.
- *
- * Returns: (element-type PurpleRequestFieldGroup) (transfer none): A list of groups.
- */
-GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
-
-/**
- * purple_request_fields_exists:
- * @fields: The fields list.
- * @id:     The ID of the field.
- *
- * Returns whether or not the field with the specified ID exists.
- *
- * Returns: TRUE if the field exists, or FALSE.
- */
-gboolean purple_request_fields_exists(const PurpleRequestFields *fields,
-									const char *id);
-
-/**
- * purple_request_fields_get_required:
- * @fields: The fields list.
- *
- * Returns a list of all required fields.
- *
- * Returns: (element-type PurpleRequestField) (transfer none): The list of required fields.
- */
-const GList *purple_request_fields_get_required(
-	const PurpleRequestFields *fields);
-
-/**
- * purple_request_fields_get_validatable:
- * @fields: The fields list.
- *
- * Returns a list of all validated fields.
- *
- * Returns: (element-type PurpleRequestField) (transfer none): The list of validated fields.
- */
-const GList *purple_request_fields_get_validatable(
-	const PurpleRequestFields *fields);
-
-/**
- * purple_request_fields_is_field_required:
- * @fields: The fields list.
- * @id:     The field ID.
- *
- * Returns whether or not a field with the specified ID is required.
- *
- * Returns: TRUE if the specified field is required, or FALSE.
- */
-gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields,
-											   const char *id);
-
-/**
- * purple_request_fields_all_required_filled:
- * @fields: The fields list.
- *
- * Returns whether or not all required fields have values.
- *
- * Returns: TRUE if all required fields have values, or FALSE.
- */
-gboolean purple_request_fields_all_required_filled(
-	const PurpleRequestFields *fields);
-
-/**
- * purple_request_fields_all_valid:
- * @fields: The fields list.
- *
- * Returns whether or not all fields are valid.
- *
- * Returns: TRUE if all fields are valid, or FALSE.
- */
-gboolean purple_request_fields_all_valid(const PurpleRequestFields *fields);
-
-/**
- * purple_request_fields_get_field:
- * @fields: The fields list.
- * @id:     The ID of the field.
- *
- * Return the field with the specified ID.
- *
- * Returns: (transfer none): The field, if found.
- */
-PurpleRequestField *purple_request_fields_get_field(
-		const PurpleRequestFields *fields, const char *id);
-
-/**
- * purple_request_fields_get_string:
- * @fields: The fields list.
- * @id:     The ID of the field.
- *
- * Returns the string value of a field with the specified ID.
- *
- * Returns: The string value, if found, or %NULL otherwise.
- */
-const char *purple_request_fields_get_string(const PurpleRequestFields *fields,
-										   const char *id);
-
-/**
- * purple_request_fields_get_integer:
- * @fields: The fields list.
- * @id:     The ID of the field.
- *
- * Returns the integer value of a field with the specified ID.
- *
- * Returns: The integer value, if found, or 0 otherwise.
- */
-int purple_request_fields_get_integer(const PurpleRequestFields *fields,
-									const char *id);
-
-/**
- * purple_request_fields_get_bool:
- * @fields: The fields list.
- * @id:     The ID of the field.
- *
- * Returns the boolean value of a field with the specified ID.
- *
- * Returns: The boolean value, if found, or %FALSE otherwise.
- */
-gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields,
-									  const char *id);
-
-/**
- * purple_request_fields_get_choice:
- * @fields: The fields list.
- * @id:     The ID of the field.
- *
- * Returns the choice index of a field with the specified ID.
- *
- * Returns: The choice value, if found, or NULL otherwise.
- */
-gpointer
-purple_request_fields_get_choice(const PurpleRequestFields *fields,
-	const char *id);
-
-/**
- * purple_request_fields_get_account:
- * @fields: The fields list.
- * @id:     The ID of the field.
- *
- * Returns the account of a field with the specified ID.
- *
- * Returns: (transfer none): The account value, if found, or %NULL otherwise.
- */
-PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields,
-											 const char *id);
-
-/**
- * purple_request_fields_get_ui_data:
- * @fields: The fields list.
- *
- * Returns the UI data associated with this object.
- *
- * Returns: The UI data associated with this object.  This is a
- *         convenience field provided to the UIs--it is not
- *         used by the libpurple core.
- */
-gpointer purple_request_fields_get_ui_data(const PurpleRequestFields *fields);
-
-/**
- * purple_request_fields_set_ui_data:
- * @fields: The fields list.
- * @ui_data: A pointer to associate with this object.
- *
- * Set the UI data associated with this object.
- */
-void purple_request_fields_set_ui_data(PurpleRequestFields *fields, gpointer ui_data);
-
-/**************************************************************************/
 /* Request API                                                            */
 /**************************************************************************/
 
--- a/po/POTFILES.in	Sun Mar 05 02:16:11 2023 -0600
+++ b/po/POTFILES.in	Sun Mar 05 02:26:17 2023 -0600
@@ -203,6 +203,7 @@
 libpurple/purpleprotocolwhiteboard.c
 libpurple/purplerequestfield.c
 libpurple/purplerequestgroup.c
+libpurple/purplerequestpage.c
 libpurple/purplesqlitehistoryadapter.c
 libpurple/purpleui.c
 libpurple/purplewhiteboard.c

mercurial