diff libpurple/disco.c @ 26252:535c866b433c

Hide the structs, add accessors, and fix various smaller things: * Make the flags an enum instead of #defines * There were two sets of _in_progress functions, removed one. * Adjusted a few return types to match usage * Move the fetch_count into the prpl's protocol_data (which is no longer the JabberStream but a dedicated struct)
author Paul Aurich <paul@darkrain42.org>
date Mon, 30 Mar 2009 00:42:15 +0000
parents 2efdd76f5dc0
children c619bef09bec
line wrap: on
line diff
--- a/libpurple/disco.c	Sun Mar 29 21:17:34 2009 +0000
+++ b/libpurple/disco.c	Mon Mar 30 00:42:15 2009 +0000
@@ -29,6 +29,37 @@
 
 #include "disco.h"
 
+/**************************************************************************/
+/* Main structures, members and constants                                 */
+/**************************************************************************/
+
+/**
+ * Represents a list of services for a given connection on a given protocol.
+ */
+struct _PurpleDiscoList {
+	PurpleAccount *account; /**< The account this list belongs to. */
+	GList *services; /**< The list of services. */
+
+	gboolean in_progress;
+
+	gpointer ui_data; /**< UI private data. */
+	gpointer proto_data; /** Prpl private data. */
+	guint ref; /**< The reference count. */
+};
+
+/**
+ * Represents a list of services for a given connection on a given protocol.
+ */
+struct _PurpleDiscoService {
+	PurpleDiscoList *list;
+	gchar *name; /**< The name of the service. */
+	gchar *description; /**< The name of the service. */
+
+	PurpleDiscoServiceCategory category; /**< The category of service. */
+	PurpleDiscoServiceType type; /**< The type of service. */
+	PurpleDiscoServiceFlags flags;
+};
+
 static PurpleDiscoUiOps *ops = NULL;
 
 PurpleDiscoList *purple_disco_list_new(PurpleAccount *account, void *ui_data)
@@ -48,12 +79,14 @@
 	return list;
 }
 
-void purple_disco_list_ref(PurpleDiscoList *list)
+PurpleDiscoList *purple_disco_list_ref(PurpleDiscoList *list)
 {
-	g_return_if_fail(list != NULL);
+	g_return_val_if_fail(list != NULL, NULL);
 
 	list->ref++;
 	purple_debug_misc("disco", "reffing list, ref count now %d\n", list->ref);
+
+	return list;
 }
 
 static void purple_disco_list_service_destroy(PurpleDiscoList *list, PurpleDiscoService *r)
@@ -106,11 +139,12 @@
 }
 
 PurpleDiscoService *purple_disco_list_service_new(PurpleDiscoServiceCategory category, const gchar *name,
-		PurpleDiscoServiceType type, const gchar *description, int flags)
+		PurpleDiscoServiceType type, const gchar *description, PurpleDiscoServiceFlags flags)
 {
 	PurpleDiscoService *s;
 
 	g_return_val_if_fail(name != NULL, NULL);
+	g_return_val_if_fail(category != PURPLE_DISCO_SERVICE_CAT_UNSET, NULL);
 
 	s = g_new0(PurpleDiscoService, 1);
 	s->category = category;
@@ -122,20 +156,25 @@
 	return s;
 }
 
-void purple_disco_get_list(PurpleConnection *gc, PurpleDiscoList *list)
+void purple_disco_get_list(PurpleDiscoList *list)
 {
+	PurpleConnection *pc = NULL;
 	PurplePlugin *prpl = NULL;
 	PurplePluginProtocolInfo *prpl_info = NULL;
 
-	g_return_if_fail(gc != NULL);
+	g_return_if_fail(list != NULL);
+
+	pc = purple_account_get_connection(list->account);
 
-	prpl = purple_connection_get_prpl(gc);
+	g_return_if_fail(pc != NULL);
+
+	prpl = purple_connection_get_prpl(pc);
 
 	if (prpl != NULL)
 		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
 
 	if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_get_list))
-		prpl_info->disco_get_list(gc, list);
+		prpl_info->disco_get_list(pc, list);
 }
 
 void purple_disco_cancel_get_list(PurpleDiscoList *list)
@@ -160,25 +199,95 @@
 		prpl_info->disco_cancel(list);
 }
 
-int purple_disco_service_register(PurpleConnection *gc, PurpleDiscoService *service)
+void purple_disco_service_register(PurpleDiscoService *service)
 {
+	PurpleConnection *pc;
 	PurplePlugin *prpl = NULL;
 	PurplePluginProtocolInfo *prpl_info = NULL;
 
-	g_return_val_if_fail(gc != NULL, -EINVAL);
+	g_return_if_fail(service != NULL);
+	
+	pc = purple_account_get_connection(service->list->account);
 
-	prpl = purple_connection_get_prpl(gc);
+	g_return_if_fail(pc != NULL);
+
+	prpl = purple_connection_get_prpl(pc);
 
 	if (prpl != NULL)
 		prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
 
 	if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, disco_service_register))
-		return prpl_info->disco_service_register(gc, service);
+		prpl_info->disco_service_register(pc, service);
+}
+
+const gchar *purple_disco_service_get_name(PurpleDiscoService *service)
+{
+	g_return_val_if_fail(service != NULL, NULL);
+
+	return service->name;
+}
+
+const gchar *purple_disco_service_get_description(PurpleDiscoService *service)
+{
+	g_return_val_if_fail(service != NULL, NULL);
 
-	return -EINVAL;
+	return service->description;
+}
+
+PurpleDiscoServiceCategory
+purple_disco_service_get_category(PurpleDiscoService *service)
+{
+	g_return_val_if_fail(service != NULL, PURPLE_DISCO_SERVICE_CAT_UNSET);
+
+	return service->category;
+}
+
+PurpleDiscoServiceType
+purple_disco_service_get_type(PurpleDiscoService *service)
+{
+	g_return_val_if_fail(service != NULL, PURPLE_DISCO_SERVICE_TYPE_NONE);
+
+	return service->type;
 }
 
-void purple_disco_set_in_progress(PurpleDiscoList *list, gboolean in_progress)
+PurpleDiscoServiceFlags
+purple_disco_service_get_flags(PurpleDiscoService *service)
+{
+	g_return_val_if_fail(service != NULL, PURPLE_DISCO_NONE);
+
+	return service->flags;
+}
+
+PurpleAccount* purple_disco_list_get_account(PurpleDiscoList *list)
+{
+	g_return_val_if_fail(list != NULL, NULL);
+
+	return list->account;
+}
+
+GList* purple_disco_list_get_services(PurpleDiscoList *list)
+{
+	g_return_val_if_fail(list != NULL, NULL);
+
+	return list->services;
+}
+
+void purple_disco_list_set_ui_data(PurpleDiscoList *list, gpointer ui_data)
+{
+	g_return_if_fail(list != NULL);
+
+	list->ui_data = ui_data;
+}
+
+gpointer purple_disco_list_get_ui_data(PurpleDiscoList *list)
+{
+	g_return_val_if_fail(list != NULL, NULL);
+
+	return list->ui_data;
+}
+
+void purple_disco_list_set_in_progress(PurpleDiscoList *list,
+                                       gboolean in_progress)
 {
 	g_return_if_fail(list != NULL);
 
@@ -188,66 +297,25 @@
 		ops->in_progress(list, in_progress);
 }
 
-gboolean purple_disco_get_in_progress(PurpleDiscoList *list)
+gboolean purple_disco_list_get_in_progress(PurpleDiscoList *list) 
 {
 	g_return_val_if_fail(list != NULL, FALSE);
 
 	return list->in_progress;
 }
 
-void purple_disco_list_set_account(PurpleDiscoList *list, PurpleAccount *account)
-{
-	list->account = account;
-}
-
-PurpleAccount* purple_disco_list_get_account(PurpleDiscoList *list)
-{
-	return list->account;
-}
-
-GList* spurple_disco_list_get_services(PurpleDiscoList *dl)
-{
-	return dl->services;
-}
-
-void purple_disco_list_set_ui_data(PurpleDiscoList *list, gpointer ui_data)
-{
-	list->ui_data = ui_data;
-}
-
-gpointer purple_disco_list_get_ui_data(PurpleDiscoList *list)
+void purple_disco_list_set_protocol_data(PurpleDiscoList *list,
+                                         gpointer proto_data)
 {
-	return list->ui_data;
-}
-
-void purple_disco_list_set_in_progress(PurpleDiscoList *list, gboolean in_progress)
-{
-	list->in_progress = in_progress;
-}
-
-gboolean purple_disco_list_get_in_progress(PurpleDiscoList *list) 
-{
-	return list->in_progress;
-}
+	g_return_if_fail(list != NULL);
 
-void purple_disco_list_set_fetch_count(PurpleDiscoList *list, gint fetch_count)
-{
-	list->fetch_count = fetch_count;
-	purple_debug_info("disco", "fetch_count = %d\n", fetch_count);
-}
-
-gint purple_disco_list_get_fetch_count(PurpleDiscoList *list)
-{
-	return list->fetch_count;
-}
-
-void purple_disco_list_set_proto_data(PurpleDiscoList *list, gpointer proto_data)
-{
 	list->proto_data = proto_data;
 }
 
-gpointer purple_disco_list_get_proto_data(PurpleDiscoList *list)
+gpointer purple_disco_list_get_protocol_data(PurpleDiscoList *list)
 {
+	g_return_val_if_fail(list != NULL, NULL);
+
 	return list->proto_data;
 }