# HG changeset patch # User Sadrul Habib Chowdhury # Date 1201382026 0 # Node ID 2b426862ffbf9b23d0fa36eb41ec16d56402d8d3 # Parent 16ff37f64e2983ca44a598e30c127e321fed8862 Add accessor and update finch to not touch the internals of PurpleConnection. diff -r 16ff37f64e29 -r 2b426862ffbf ChangeLog.API --- a/ChangeLog.API Sat Jan 26 20:45:41 2008 +0000 +++ b/ChangeLog.API Sat Jan 26 21:13:46 2008 +0000 @@ -35,9 +35,11 @@ * purple_blist_node_get_first_child * purple_blist_node_get_sibling_next * purple_blist_node_get_sibling_prev - * purple_chat_get_account * Added last_received to PurpleConnection, the time_t of the last received packet. + * Added some more accessor functions: + * purple_chat_get_account + * purple_connection_get_prpl Pidgin: Added: diff -r 16ff37f64e29 -r 2b426862ffbf finch/gntblist.c --- a/finch/gntblist.c Sat Jan 26 20:45:41 2008 +0000 +++ b/finch/gntblist.c Sat Jan 26 21:13:46 2008 +0000 @@ -629,6 +629,7 @@ GHashTable *hash = NULL; PurpleConnection *gc; gboolean autojoin; + PurplePluginProtocolInfo *info; account = purple_request_fields_get_account(allfields, "account"); name = purple_request_fields_get_string(allfields, "name"); @@ -638,15 +639,15 @@ if (!purple_account_is_connected(account) || !name || !*name) return; - + if (!group || !*group) group = _("Chats"); gc = purple_account_get_connection(account); - - if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) - hash = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, name); - + info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); + if (info->chat_info_defaults != NULL) + hash = info->chat_info_defaults(gc, name); + chat = purple_chat_new(account, name, hash); if (chat != NULL) { @@ -988,7 +989,7 @@ append_proto_menu(GntMenu *menu, PurpleConnection *gc, PurpleBlistNode *node) { GList *list; - PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); if(!prpl_info || !prpl_info->blist_node_menu) return; @@ -1048,7 +1049,7 @@ purple_request_fields_add_group(fields, group); gc = purple_account_get_connection(chat->account); - parts = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); + parts = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc))->chat_info(gc); for (iter = parts; iter; iter = iter->next) { pce = iter->data; @@ -1169,7 +1170,7 @@ PurplePluginProtocolInfo *prpl_info; PurpleConnection *gc = purple_account_get_connection(buddy->account); - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); if (prpl_info && prpl_info->get_info) { add_custom_action(menu, _("Get Info"), @@ -2419,7 +2420,7 @@ if (!gc || !PURPLE_CONNECTION_IS_CONNECTED(gc)) continue; - prpl = gc->prpl; + prpl = purple_connection_get_prpl(gc); if (PURPLE_PLUGIN_HAS_ACTIONS(prpl)) { item = gnt_menuitem_new(purple_account_get_username(account)); @@ -2552,12 +2553,13 @@ if (!purple_account_is_connected(account)) return; - gc = purple_account_get_connection(account); + gc = purple_account_get_connection(account); purple_conversation_new(PURPLE_CONV_TYPE_CHAT, account, name); chat = purple_blist_find_chat(account, name); if (chat == NULL) { - if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) - hash = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, name); + PurplePluginProtocolInfo *info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); + if (info->chat_info_defaults != NULL) + hash = info->chat_info_defaults(gc, name); } else { hash = chat->components; } diff -r 16ff37f64e29 -r 2b426862ffbf finch/gntconn.c --- a/finch/gntconn.c Sat Jan 26 20:45:41 2008 +0000 +++ b/finch/gntconn.c Sat Jan 26 21:13:46 2008 +0000 @@ -101,13 +101,14 @@ } static void -finch_connection_report_disconnect(PurpleConnection *gc, const char *text) +finch_connection_report_disconnect(PurpleConnection *gc, PurpleConnectionError reason, + const char *text) { FinchAutoRecon *info; PurpleAccount *account = purple_connection_get_account(gc); GList *list; - if (!gc->wants_to_die) { + if (!purple_connection_error_is_fatal(reason)) { info = g_hash_table_lookup(hash, account); if (info == NULL) { @@ -179,10 +180,10 @@ NULL, /* connected */ NULL, /* disconnected */ NULL, /* notice */ - finch_connection_report_disconnect, + NULL, NULL, /* network_connected */ NULL, /* network_disconnected */ - NULL, + finch_connection_report_disconnect, NULL, NULL, NULL diff -r 16ff37f64e29 -r 2b426862ffbf finch/gntconv.c --- a/finch/gntconv.c Sat Jan 26 20:45:41 2008 +0000 +++ b/finch/gntconv.c Sat Jan 26 21:13:46 2008 +0000 @@ -332,14 +332,15 @@ GHashTable *comps = NULL; list = list->next; - if (conv->account != gc->account || + if (conv->account != purple_connection_get_account(gc) || !purple_conversation_get_data(conv, "want-to-rejoin")) continue; chat = purple_blist_find_chat(conv->account, conv->name); if (chat == NULL) { - if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) - comps = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, conv->name); + PurplePluginProtocolInfo *info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); + if (info->chat_info_defaults != NULL) + comps = info->chat_info_defaults(gc, conv->name); } else { comps = chat->components; } @@ -532,7 +533,8 @@ if (purple_conversation_get_type(ggc->active_conv) == PURPLE_CONV_TYPE_IM) { PurpleAccount *account = purple_conversation_get_account(ggc->active_conv); PurpleConnection *gc = purple_account_get_connection(account); - PurplePluginProtocolInfo *pinfo = gc ? PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl) : NULL; + PurplePluginProtocolInfo *pinfo = + gc ? PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)) : NULL; if (pinfo && pinfo->get_info) { item = gnt_menuitem_new(_("Get Info")); diff -r 16ff37f64e29 -r 2b426862ffbf finch/gntroomlist.c --- a/finch/gntroomlist.c Sat Jan 26 20:45:41 2008 +0000 +++ b/finch/gntroomlist.c Sat Jan 26 21:13:46 2008 +0000 @@ -116,7 +116,7 @@ if (gc == NULL || room == NULL) return; - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); if(prpl_info != NULL && prpl_info->roomlist_room_serialize) name = prpl_info->roomlist_room_serialize(room); @@ -238,7 +238,7 @@ PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = list->data; - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); if (prpl_info->roomlist_get_list != NULL) { PurpleAccount *account = purple_connection_get_account(gc); char *text = g_strdup_printf("%s (%s)", diff -r 16ff37f64e29 -r 2b426862ffbf libpurple/connection.c --- a/libpurple/connection.c Sat Jan 26 20:45:41 2008 +0000 +++ b/libpurple/connection.c Sat Jan 26 21:13:46 2008 +0000 @@ -424,6 +424,14 @@ return gc->account; } +PurplePlugin * +purple_connection_get_prpl(const PurpleConnection *gc) +{ + g_return_val_if_fail(gc != NULL, NULL); + + return gc->prpl; +} + const char * purple_connection_get_password(const PurpleConnection *gc) { diff -r 16ff37f64e29 -r 2b426862ffbf libpurple/connection.h --- a/libpurple/connection.h Sat Jan 26 20:45:41 2008 +0000 +++ b/libpurple/connection.h Sat Jan 26 21:13:46 2008 +0000 @@ -364,7 +364,7 @@ * @return TRUE if the account is connected, otherwise returns FALSE. */ #define PURPLE_CONNECTION_IS_CONNECTED(gc) \ - (gc->state == PURPLE_CONNECTED) + (purple_connection_get_state(gc) == PURPLE_CONNECTED) /** * Returns the connection's account. @@ -376,6 +376,15 @@ PurpleAccount *purple_connection_get_account(const PurpleConnection *gc); /** + * Returns the protocol plugin managing a connection. + * + * @param gc The connection. + * + * @return The protocol plugin. + */ +PurplePlugin * purple_connection_get_prpl(const PurpleConnection *gc); + +/** * Returns the connection's password. * * @param gc The connection.