diff -r f4023e6ebd5d -r f2f397659f30 finch/gntconv.c --- 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) {