diff options
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/bee.h | 4 | ||||
| -rw-r--r-- | protocols/bee_chat.c | 25 | ||||
| -rw-r--r-- | protocols/jabber/conference.c | 3 | ||||
| -rw-r--r-- | protocols/purple/bpurple.h | 6 | ||||
| -rw-r--r-- | protocols/purple/purple.c | 47 | 
5 files changed, 54 insertions, 31 deletions
diff --git a/protocols/bee.h b/protocols/bee.h index 5f47e464..56c34210 100644 --- a/protocols/bee.h +++ b/protocols/bee.h @@ -189,6 +189,8 @@ G_MODULE_EXPORT int bee_chat_msg(bee_t *bee, struct groupchat *c, const char *ms  G_MODULE_EXPORT struct groupchat *bee_chat_by_title(bee_t *bee, struct im_connection *ic, const char *title);  G_MODULE_EXPORT void imcb_chat_invite(struct im_connection *ic, const char *name, const char *who, const char *msg); -G_MODULE_EXPORT void bee_chat_list_finish(struct im_connection *ic); +G_GNUC_DEPRECATED G_MODULE_EXPORT void bee_chat_list_finish(struct im_connection *ic); +G_MODULE_EXPORT void imcb_chat_list_finish(struct im_connection *ic); +G_MODULE_EXPORT void imcb_chat_list_free(struct im_connection *ic);  #endif /* __BEE_H__ */ diff --git a/protocols/bee_chat.c b/protocols/bee_chat.c index 76ed7f85..31b37737 100644 --- a/protocols/bee_chat.c +++ b/protocols/bee_chat.c @@ -274,7 +274,30 @@ void imcb_chat_invite(struct im_connection *ic, const char *name, const char *wh  	}  } -void bee_chat_list_finish(struct im_connection *ic) +void imcb_chat_list_finish(struct im_connection *ic)  {  	cmd_chat_list_finish(ic);  } + +void bee_chat_list_finish(struct im_connection *ic) +{ +	imcb_log(ic, "Warning: using deprecated bee_chat_list_finish. This will be removed in the stable release."); +	imcb_chat_list_finish(ic); +} + +void imcb_chat_list_free(struct im_connection *ic) +{ +	bee_chat_info_t *ci; +	GSList *l = ic->chatlist; + +	while (l) { +		ci = l->data; +		l = g_slist_delete_link(l, l); + +		g_free(ci->title); +		g_free(ci->topic); +		g_free(ci); +	} + +	ic->chatlist = NULL; +} diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c index 3a6cff7c..593e4233 100644 --- a/protocols/jabber/conference.c +++ b/protocols/jabber/conference.c @@ -465,7 +465,8 @@ void jabber_chat_pkt_message(struct im_connection *ic, struct jabber_buddy *bud,  	}  	if (subject && chat) { -		char *subject_text = subject->text_len > 0 ? subject->text : ""; +		char empty[1] = ""; +		char *subject_text = subject->text_len > 0 ? subject->text : empty;  		if (g_strcmp0(chat->topic, subject_text) != 0) {  			bare_jid = (bud) ? jabber_get_bare_jid(bud->ext_jid) : NULL;  			imcb_chat_topic(chat, bare_jid, subject_text, diff --git a/protocols/purple/bpurple.h b/protocols/purple/bpurple.h index ca7cf70e..39677b86 100644 --- a/protocols/purple/bpurple.h +++ b/protocols/purple/bpurple.h @@ -14,10 +14,4 @@ struct purple_data      guint next_request_id;  }; -struct purple_roomlist_data -{ -    GSList *chats; -    gint topic; -}; -  #endif /* !BPURPLE_H */ diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c index f71cade2..db523ada 100644 --- a/protocols/purple/purple.c +++ b/protocols/purple/purple.c @@ -53,6 +53,13 @@ struct request_input_data {  	guint id;  }; +struct purple_roomlist_data { +	GSList *chats; +	gint topic; +	gboolean initialized; +}; + +  struct im_connection *purple_ic_by_pa(PurpleAccount *pa)  {  	GSList *i; @@ -365,21 +372,6 @@ static void purple_login(account_t *acc)  	}  } -static void purple_chatlist_free(struct im_connection *ic) -{ -	bee_chat_info_t *ci; -	GSList *l = ic->chatlist; - -	while (l) { -		ci = l->data; -		l = g_slist_delete_link(l, l); - -		g_free(ci->title); -		g_free(ci->topic); -		g_free(ci); -	} -} -  static void purple_logout(struct im_connection *ic)  {  	struct purple_data *pd = ic->proto_data; @@ -397,7 +389,7 @@ static void purple_logout(struct im_connection *ic)  	purple_account_set_enabled(pd->account, "BitlBee", FALSE);  	purple_connections = g_slist_remove(purple_connections, ic);  	purple_accounts_remove(pd->account); -	purple_chatlist_free(ic); +	imcb_chat_list_free(ic);  	g_hash_table_destroy(pd->input_requests);  	g_free(pd);  } @@ -784,13 +776,21 @@ void purple_chat_list(struct im_connection *ic, const char *server)  {  	PurpleRoomlist *list;  	struct purple_data *pd = ic->proto_data; +	PurplePlugin *prpl = purple_plugins_find_with_id(pd->account->protocol_id); +	PurplePluginProtocolInfo *pi = prpl->info->extra_info; + +	if (!pi || !pi->roomlist_get_list) { +		imcb_log(ic, "Room listing unsupported by this purple plugin"); +		return; +	}  	list = purple_roomlist_get_list(pd->account->gc);  	if (list) { +		struct purple_roomlist_data *rld = list->ui_data; +		rld->initialized = TRUE; +  		purple_roomlist_ref(list); -	} else { -		imcb_log(ic, "Room listing unsupported by this purple plugin");  	}  } @@ -1395,18 +1395,21 @@ static void prplcb_roomlist_in_progress(PurpleRoomlist *list, gboolean in_progre  	struct im_connection *ic;  	struct purple_roomlist_data *rld = list->ui_data; -	if (in_progress) { +	if (in_progress || !rld) {  		return;  	}  	ic = purple_ic_by_pa(list->account); -	purple_chatlist_free(ic); +	imcb_chat_list_free(ic);  	ic->chatlist = g_slist_reverse(rld->chats);  	rld->chats = NULL; -	bee_chat_list_finish(ic); -	purple_roomlist_unref(list); +	imcb_chat_list_finish(ic); + +	if (rld->initialized) { +		purple_roomlist_unref(list); +	}  }  static void prplcb_roomlist_destroy(PurpleRoomlist *list)  | 
