Convert Finch to the PurpleConversationManager API

Thu, 17 Jun 2021 23:40:07 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 17 Jun 2021 23:40:07 -0500
changeset 40961
f2f397659f30
parent 40960
f4023e6ebd5d
child 40962
19e53c9cab73

Convert Finch to the PurpleConversationManager API

Testing Done:
Compiled

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

finch/gntblist.c file | annotate | diff | comparison | revisions
finch/gntconv.c file | annotate | diff | comparison | revisions
finch/plugins/gnttinyurl.c file | annotate | diff | comparison | revisions
--- a/finch/gntblist.c	Thu Jun 17 23:39:39 2021 -0500
+++ b/finch/gntblist.c	Thu Jun 17 23:40:07 2021 -0500
@@ -613,11 +613,13 @@
 join_chat(PurpleChat *chat)
 {
 	PurpleAccount *account = purple_chat_get_account(chat);
+	PurpleConversationManager *manager;
 	const char *name;
 	PurpleConversation *conv;
 
 	name = purple_chat_get_name_only(chat);
-	conv = purple_conversations_find_chat_with_account(name, account);
+	manager = purple_conversation_manager_get_default();
+	conv = purple_conversation_manager_find_chat(manager, account, name);
 
 	if (!conv || purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(conv))) {
 		purple_serv_join_chat(purple_account_get_connection(account),
@@ -919,11 +921,16 @@
 	{
 		PurpleBuddy *buddy = (PurpleBuddy *)node;
 		PurpleConversation *im;
-		im = purple_conversations_find_im_with_account(purple_buddy_get_name(buddy),
-					purple_buddy_get_account(buddy));
-		if (!im) {
-			im =  purple_im_conversation_new(purple_buddy_get_account(buddy),
-						purple_buddy_get_name(buddy));
+		PurpleConversationManager *manager;
+
+		manager = purple_conversation_manager_get_default();
+		im = purple_conversation_manager_find_im(manager,
+		                                         purple_buddy_get_account(buddy),
+		                                         purple_buddy_get_name(buddy));
+
+		if(!PURPLE_IS_IM_CONVERSATION(im)) {
+			im = purple_im_conversation_new(purple_buddy_get_account(buddy),
+			                                purple_buddy_get_name(buddy));
 		} else {
 			FinchConv *ggconv = FINCH_CONV(im);
 			gnt_window_present(ggconv->window);
@@ -2659,6 +2666,7 @@
 	PurpleAccount *account;
 	const char *name;
 	PurpleConnection *gc;
+	PurpleConversationManager *manager;
 	PurpleChat *chat;
 	GHashTable *hash = NULL;
 	PurpleConversation *conv;
@@ -2670,10 +2678,13 @@
 		return;
 
 	gc = purple_account_get_connection(account);
+	manager = purple_conversation_manager_get_default();
+
 	/* Create a new conversation now. This will give focus to the new window.
 	 * But it's necessary to pretend that we left the chat, because otherwise
 	 * a new conversation window will pop up when we finally join the chat. */
-	if (!(conv = purple_conversations_find_chat_with_account(name, account))) {
+	conv = purple_conversation_manager_find_chat(manager, account, name);
+	if(!PURPLE_IS_CHAT_CONVERSATION(conv)) {
 		conv = purple_chat_conversation_new(account, name);
 		purple_chat_conversation_leave(PURPLE_CHAT_CONVERSATION(conv));
 	} else {
--- a/finch/gntconv.c	Thu Jun 17 23:39:39 2021 -0500
+++ b/finch/gntconv.c	Thu Jun 17 23:40:07 2021 -0500
@@ -197,19 +197,39 @@
 {
 	PurpleBlistNode *node;
 	PurpleBuddy *buddy = purple_blist_find_buddy(account, name);
+	PurpleContact *contact;
 	PurpleConversation *im = NULL;
 
-	if (!buddy)
+	if(!PURPLE_IS_BUDDY(buddy)) {
 		return NULL;
+	}
+
+	contact = purple_buddy_get_contact(buddy);
+
+	node = purple_blist_node_get_first_child(PURPLE_BLIST_NODE(contact));
+	while(node != NULL) {
+		PurpleBuddy *cbuddy;
+		PurpleConversationManager *manager;
+
+		if(node == PURPLE_BLIST_NODE(buddy)) {
+			node = node->next;
 
-	for (node = purple_blist_node_get_first_child(purple_blist_node_get_parent((PurpleBlistNode*)buddy));
-				node; node = purple_blist_node_get_sibling_next(node)) {
-		if (node == (PurpleBlistNode*)buddy)
 			continue;
-		if ((im = purple_conversations_find_im_with_account(
-				purple_buddy_get_name((PurpleBuddy*)node), purple_buddy_get_account((PurpleBuddy*)node))) != NULL)
+		}
+
+		cbuddy = PURPLE_BUDDY(node);
+		manager = purple_conversation_manager_get_default();
+		im = purple_conversation_manager_find_im(manager,
+		                                         purple_buddy_get_account(cbuddy),
+		                                         purple_buddy_get_name(cbuddy));
+
+		if(PURPLE_IS_IM_CONVERSATION(im)) {
 			break;
+		}
+
+		node = node->next;
 	}
+
 	return im;
 }
 
@@ -227,13 +247,16 @@
 {
 	FinchConv *ggc;
 	PurpleConversation *conv;
+	PurpleConversationManager *manager;
 	PurpleIMConversation *im;
 	char *title, *str;
 
-	conv = purple_conversations_find_im_with_account(who, account);
+	manager = purple_conversation_manager_get_default();
+	conv = purple_conversation_manager_find_im(manager, account, who);
 
-	if (!conv)
+	if(!conv) {
 		return;
+	}
 
 	im = PURPLE_IM_CONVERSATION(conv);
 	ggc = FINCH_CONV(conv);
@@ -281,9 +304,11 @@
 static void
 account_signed_on_off(PurpleConnection *gc, gpointer null)
 {
+	PurpleConversationManager *manager;
 	GList *list, *l;
 
-	list = purple_conversations_get_all();
+	manager = purple_conversation_manager_get_default();
+	list = purple_conversation_manager_get_all(manager);
 
 	for(l = list; l != NULL; l = l->next) {
 		PurpleConversation *conv = NULL;
@@ -349,9 +374,13 @@
 static void
 account_signing_off(PurpleConnection *gc)
 {
-	GList *list = purple_conversations_get_all();
+	PurpleConversationManager *manager;
+	GList *list;
 	PurpleAccount *account = purple_connection_get_account(gc);
 
+	manager = purple_conversation_manager_get_default();
+	list = purple_conversation_manager_get_all(manager);
+
 	/* We are about to sign off. See which chats we are currently in, and mark
 	 * them for rejoin on reconnect. */
 	while(list != NULL) {
--- a/finch/plugins/gnttinyurl.c	Thu Jun 17 23:39:39 2021 -0500
+++ b/finch/plugins/gnttinyurl.c	Thu Jun 17 23:40:07 2021 -0500
@@ -199,9 +199,13 @@
 {
 	CbInfo *data = (CbInfo *)_data;
 	PurpleConversation *conv = data->conv;
-	GList *convs = purple_conversations_get_all();
+	PurpleConversationManager *manager;
+	GList *convs;
 	const gchar *url;
 
+	manager = purple_conversation_manager_get_default();
+	convs = purple_conversation_manager_get_all(manager);
+
 	if (SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) {
 		url = msg->response_body->data;
 		g_hash_table_insert(tinyurl_cache, data->original_url, g_strdup(url));

mercurial