Mercurial > pidgin
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; }