Thu, 17 Jun 2021 23:40:07 -0500
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));