Thu, 22 Jul 2021 22:34:48 -0500
migrate libpurple to the ConversationManager API
Testing Done:
Compile only
Reviewed at https://reviews.imfreedom.org/r/791/
--- a/libpurple/account.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/account.c Thu Jul 22 22:34:48 2021 -0500 @@ -30,6 +30,7 @@ #include "notify.h" #include "prefs.h" #include "purpleaccountpresence.h" +#include "purpleconversationmanager.h" #include "purplecredentialmanager.h" #include "purpleprivate.h" #include "purpleprotocolclient.h" @@ -1051,17 +1052,22 @@ GList *l; PurpleAccount *account = PURPLE_ACCOUNT(object); PurpleAccountPrivate *priv = purple_account_get_instance_private(account); + PurpleConversationManager *manager = NULL; purple_debug_info("account", "Destroying account %p\n", account); purple_signal_emit(purple_accounts_get_handle(), "account-destroying", account); - for (l = purple_conversations_get_all(); l != NULL; l = l->next) - { - PurpleConversation *conv = (PurpleConversation *)l->data; - - if (purple_conversation_get_account(conv) == account) + manager = purple_conversation_manager_get_default(); + l = purple_conversation_manager_get_all(manager); + while(l != NULL) { + PurpleConversation *conv = PURPLE_CONVERSATION(l->data); + + if (purple_conversation_get_account(conv) == account) { purple_conversation_set_account(conv, NULL); + } + + l = g_list_delete_link(l, l); } purple_account_set_status_types(account, NULL);
--- a/libpurple/accounts.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/accounts.c Thu Jul 22 22:34:48 2021 -0500 @@ -27,6 +27,7 @@ #include "debug.h" #include "enums.h" #include "network.h" +#include "purpleconversationmanager.h" #include "purplecredentialmanager.h" #include "purpleprivate.h" @@ -584,7 +585,8 @@ purple_accounts_delete(PurpleAccount *account) { PurpleBlistNode *gnode, *cnode, *bnode; - PurpleCredentialManager *manager = NULL; + PurpleConversationManager *conv_manager = NULL; + PurpleCredentialManager *cred_manager = NULL; GList *iter; g_return_if_fail(account != NULL); @@ -636,11 +638,16 @@ } /* Remove any open conversation for this account */ - for (iter = purple_conversations_get_all(); iter; ) { + conv_manager = purple_conversation_manager_get_default(); + iter = purple_conversation_manager_get_all(conv_manager); + while(iter != NULL) { PurpleConversation *conv = iter->data; - iter = iter->next; - if (purple_conversation_get_account(conv) == account) + + if(purple_conversation_get_account(conv) == account) { g_object_unref(conv); + } + + iter = g_list_delete_link(iter, iter); } /* This will cause the deletion of an old buddy icon. */ @@ -649,8 +656,8 @@ /* This is async because we do not want the * account being overwritten before we are done. */ - manager = purple_credential_manager_get_default(); - purple_credential_manager_clear_password_async(manager, account, NULL, + cred_manager = purple_credential_manager_get_default(); + purple_credential_manager_clear_password_async(cred_manager, account, NULL, purple_accounts_delete_set, NULL); }
--- a/libpurple/buddy.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/buddy.c Thu Jul 22 22:34:48 2021 -0500 @@ -25,6 +25,7 @@ #include "debug.h" #include "internal.h" #include "purplebuddypresence.h" +#include "purpleconversationmanager.h" #include "purpleprotocolclient.h" #include "util.h" @@ -437,6 +438,7 @@ PurpleBuddyList *blist = NULL; PurpleBuddyPrivate *priv = NULL; PurpleConversation *im = NULL; + PurpleConversationManager *manager = NULL; gchar *old_alias = NULL, *new_alias = NULL; g_return_if_fail(PURPLE_IS_BUDDY(buddy)); @@ -467,7 +469,9 @@ purple_blist_save_node(blist, PURPLE_BLIST_NODE(buddy)); purple_blist_update_node(blist, PURPLE_BLIST_NODE(buddy)); - im = purple_conversations_find_im_with_account(priv->name, priv->account); + manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, priv->account, + priv->name); if(PURPLE_IS_IM_CONVERSATION(im)) { purple_conversation_autoset_title(im); } @@ -493,6 +497,7 @@ PurpleBuddyList *blist = NULL; PurpleBuddyPrivate *priv = NULL; PurpleConversation *im = NULL; + PurpleConversationManager *manager = NULL; gchar *old_alias = NULL, *new_alias = NULL; g_return_if_fail(PURPLE_IS_BUDDY(buddy)); @@ -525,7 +530,9 @@ purple_blist_save_node(blist, PURPLE_BLIST_NODE(buddy)); purple_blist_update_node(blist, PURPLE_BLIST_NODE(buddy)); - im = purple_conversations_find_im_with_account(priv->name, priv->account); + manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, priv->account, + priv->name); if(PURPLE_IS_IM_CONVERSATION(im)) { purple_conversation_autoset_title(im); }
--- a/libpurple/buddyicon.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/buddyicon.c Thu Jul 22 22:34:48 2021 -0500 @@ -24,6 +24,7 @@ #include "debug.h" #include "image.h" #include "purpleconversation.h" +#include "purpleconversationmanager.h" #include "purpleprivate.h" #include "purpleprotocolserver.h" #include "util.h" @@ -379,6 +380,7 @@ purple_buddy_icon_update(PurpleBuddyIcon *icon) { PurpleConversation *im; + PurpleConversationManager *manager; PurpleAccount *account; const char *username; PurpleBuddyIcon *icon_to_set; @@ -440,7 +442,8 @@ buddies = g_slist_delete_link(buddies, buddies); } - im = purple_conversations_find_im_with_account(username, account); + manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, account, username); if(PURPLE_IS_IM_CONVERSATION(im)) { purple_im_conversation_set_icon(PURPLE_IM_CONVERSATION(im), icon_to_set); @@ -873,6 +876,7 @@ guchar *icon_data, size_t icon_len) { char *old_icon; + PurpleConversationManager *manager = NULL; PurpleImage *old_img; PurpleImage *img = NULL; @@ -908,6 +912,8 @@ else g_hash_table_remove(pointer_icon_cache, node); + manager = purple_conversation_manager_get_default(); + if (PURPLE_IS_CONTACT(node)) { PurpleBlistNode *child; for (child = purple_blist_node_get_first_child(node); @@ -917,26 +923,31 @@ PurpleBuddy *buddy; PurpleConversation *im; - if (!PURPLE_IS_BUDDY(child)) + if(!PURPLE_IS_BUDDY(child)) { continue; + } + + buddy = PURPLE_BUDDY(child); - buddy = (PurpleBuddy *)child; - - im = purple_conversations_find_im_with_account(purple_buddy_get_name(buddy), purple_buddy_get_account(buddy)); - if (im) + im = purple_conversation_manager_find_im(manager, + purple_buddy_get_account(buddy), + purple_buddy_get_name(buddy)); + if(PURPLE_IS_IM_CONVERSATION(im)) { purple_conversation_update(im, PURPLE_CONVERSATION_UPDATE_ICON); + } /* Is this call necessary anymore? Can the buddies * themselves need updating when the custom buddy * icon changes? */ - purple_blist_update_node(purple_blist_get_default(), - PURPLE_BLIST_NODE(buddy)); + purple_blist_update_node(purple_blist_get_default(), child); } } else if (PURPLE_IS_CHAT(node)) { + PurpleAccount *account = purple_chat_get_account(PURPLE_CHAT(node)); PurpleConversation *chat = NULL; + const gchar *name = purple_chat_get_name(PURPLE_CHAT(node)); - chat = purple_conversations_find_chat_with_account(purple_chat_get_name((PurpleChat*)node), purple_chat_get_account((PurpleChat*)node)); - if (chat) { + chat = purple_conversation_manager_find_chat(manager, account, name); + if(PURPLE_IS_CHAT_CONVERSATION(chat)) { purple_conversation_update(chat, PURPLE_CONVERSATION_UPDATE_ICON); } }
--- a/libpurple/contact.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/contact.c Thu Jul 22 22:34:48 2021 -0500 @@ -24,6 +24,7 @@ #include "contact.h" #include "internal.h" /* TODO: this needs to die */ #include "purplebuddypresence.h" +#include "purpleconversationmanager.h" #include "purpleprivate.h" #include "util.h" @@ -113,7 +114,7 @@ purple_contact_set_alias(PurpleContact *contact, const char *alias) { PurpleContactPrivate *priv = NULL; - PurpleConversation *im; + PurpleConversationManager *manager = NULL; PurpleBlistNode *bnode; char *old_alias; char *new_alias = NULL; @@ -131,33 +132,37 @@ old_alias = priv->alias; - if ((new_alias != NULL) && (*new_alias != '\0')) + if ((new_alias != NULL) && (*new_alias != '\0')) { priv->alias = new_alias; - else { + } else { priv->alias = NULL; g_free(new_alias); /* could be "\0" */ } - g_object_notify_by_pspec(G_OBJECT(contact), - properties[PROP_ALIAS]); + g_object_notify_by_pspec(G_OBJECT(contact), properties[PROP_ALIAS]); purple_blist_save_node(purple_blist_get_default(), PURPLE_BLIST_NODE(contact)); purple_blist_update_node(purple_blist_get_default(), PURPLE_BLIST_NODE(contact)); + manager = purple_conversation_manager_get_default(); + for(bnode = PURPLE_BLIST_NODE(contact)->child; bnode != NULL; bnode = bnode->next) { PurpleBuddy *buddy = PURPLE_BUDDY(bnode); + PurpleConversation *im; - im = purple_conversations_find_im_with_account(purple_buddy_get_name(buddy), - purple_buddy_get_account(buddy)); - if (im) + im = purple_conversation_manager_find_im(manager, + purple_buddy_get_account(buddy), + purple_buddy_get_name(buddy)); + if(PURPLE_IS_IM_CONVERSATION(im)) { purple_conversation_autoset_title(im); + } } purple_signal_emit(purple_blist_get_handle(), "blist-node-aliased", - contact, old_alias); + contact, old_alias); g_free(old_alias); }
--- a/libpurple/protocols.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/protocols.c Thu Jul 22 22:34:48 2021 -0500 @@ -30,6 +30,7 @@ #include "protocol.h" #include "purpleaccountoption.h" #include "purpleconversation.h" +#include "purpleconversationmanager.h" #include "purplecredentialmanager.h" #include "purpleprotocolattention.h" #include "purpleprotocolmanager.h" @@ -452,14 +453,17 @@ purple_protocol_got_attention(PurpleConnection *gc, const char *who, guint type_code) { PurpleConversation *conv = NULL; + PurpleConversationManager *manager = NULL; PurpleAccount *account = purple_connection_get_account(gc); got_attention(gc, -1, who, type_code); - conv = - purple_conversations_find_with_account(who, account); - if (conv) + + manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find(manager, account, who); + if(PURPLE_IS_CONVERSATION(conv)) { purple_protocol_attention(conv, who, type_code, PURPLE_MESSAGE_RECV, - time(NULL)); + time(NULL)); + } } void
--- a/libpurple/purplechatconversation.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/purplechatconversation.c Thu Jul 22 22:34:48 2021 -0500 @@ -25,6 +25,7 @@ #include "internal.h" #include "debug.h" #include "enums.h" +#include "purpleconversationmanager.h" #include "purplechatconversation.h" #include "purpleprivate.h" @@ -341,13 +342,15 @@ PurpleConversation * purple_chat_conversation_new(PurpleAccount *account, const gchar *name) { PurpleConversation *chat = NULL; + PurpleConversationManager *manager = NULL; PurpleConnection *connection = NULL; g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL); g_return_val_if_fail(name != NULL, NULL); /* Check if this conversation already exists. */ - chat = purple_conversations_find_chat_with_account(name, account); + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, account, name); if(PURPLE_IS_CHAT_CONVERSATION(chat)) { if(!purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(chat))) { purple_debug_warning("chat-conversation", "A chat named %s "
--- a/libpurple/purpleconversation.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/purpleconversation.c Thu Jul 22 22:34:48 2021 -0500 @@ -32,6 +32,7 @@ #include "prefs.h" #include "protocol.h" #include "purpleconversation.h" +#include "purpleconversationmanager.h" #include "purplemarkup.h" #include "purpleprivate.h" #include "purpleprotocolclient.h" @@ -288,6 +289,7 @@ PurpleConversation *conv = PURPLE_CONVERSATION(object); PurpleAccount *account; PurpleConnection *gc; + PurpleConversationManager *manager; PurpleConversationUiOps *ops; G_OBJECT_CLASS(purple_conversation_parent_class)->constructed(object); @@ -299,7 +301,8 @@ purple_conversation_set_features(conv, purple_connection_get_flags(gc)); /* add the conversation to the appropriate lists */ - purple_conversations_add(conv); + manager = purple_conversation_manager_get_default(); + purple_conversation_manager_register(manager, conv); /* Auto-set the title. */ purple_conversation_autoset_title(conv); @@ -328,6 +331,7 @@ static void purple_conversation_finalize(GObject *object) { PurpleConversation *conv = PURPLE_CONVERSATION(object); + PurpleConversationManager *manager; PurpleConversationPrivate *priv = purple_conversation_get_instance_private(conv); PurpleConversationUiOps *ops = purple_conversation_get_ui_ops(conv); @@ -335,7 +339,8 @@ purple_request_close_with_handle(conv); /* remove from conversations and im/chats lists prior to emit */ - purple_conversations_remove(conv); + manager = purple_conversation_manager_get_default(); + purple_conversation_manager_unregister(manager, conv); purple_signal_emit(purple_conversations_get_handle(), "deleting-conversation", conv); @@ -682,7 +687,10 @@ return; } } else if(PURPLE_IS_IM_CONVERSATION(conv)) { - if(!g_list_find(purple_conversations_get_all(), conv)) { + PurpleConversationManager *manager = NULL; + + manager = purple_conversation_manager_get_default(); + if(!purple_conversation_manager_is_registered(manager, conv)) { return; } } @@ -852,14 +860,17 @@ const gchar *what) { PurpleConversation *conv; + PurpleConversationManager *manager; g_return_val_if_fail(who != NULL, FALSE); g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), FALSE); g_return_val_if_fail(what != NULL, FALSE); - conv = purple_conversations_find_with_account(who, account); - if(conv != NULL) { - purple_conversation_write_system_message(conv, what, PURPLE_MESSAGE_ERROR); + manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find(manager, account, who); + if(PURPLE_IS_CONVERSATION(conv)) { + purple_conversation_write_system_message(conv, what, + PURPLE_MESSAGE_ERROR); return TRUE; }
--- a/libpurple/purpleimconversation.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/purpleimconversation.c Thu Jul 22 22:34:48 2021 -0500 @@ -23,6 +23,7 @@ #include <libpurple/debug.h> #include <libpurple/enums.h> +#include <libpurple/purpleconversationmanager.h> #include <libpurple/purpleprivate.h> #include <libpurple/purpleprotocolclient.h> @@ -252,12 +253,15 @@ purple_im_conversation_new(PurpleAccount *account, const char *name) { PurpleConversation *im = NULL; + PurpleConversationManager *manager = NULL; g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL); g_return_val_if_fail(name != NULL, NULL); /* Check if this conversation already exists. */ - if((im = purple_conversations_find_im_with_account(name, account)) != NULL) { + manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, account, name); + if(PURPLE_IS_IM_CONVERSATION(im)) { return g_object_ref(im); }
--- a/libpurple/server.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/server.c Thu Jul 22 22:34:48 2021 -0500 @@ -33,6 +33,7 @@ #include "prefs.h" #include "protocol.h" #include "purpleconversation.h" +#include "purpleconversationmanager.h" #include "purpleprivate.h" #include "purpleprotocolattention.h" #include "purpleprotocolchat.h" @@ -123,8 +124,9 @@ int purple_serv_send_im(PurpleConnection *gc, PurpleMessage *msg) { + PurpleAccount *account = NULL; PurpleConversation *im = NULL; - PurpleAccount *account = NULL; + PurpleConversationManager *manager = NULL; PurplePresence *presence = NULL; PurpleProtocol *protocol = NULL; int val = -EINVAL; @@ -143,7 +145,8 @@ presence = purple_account_get_presence(account); recipient = purple_message_get_recipient(msg); - im = purple_conversations_find_im_with_account(recipient, account); + manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, account, recipient); /* we probably shouldn't be here if the protocol doesn't know how to send * im's... but there was a similar check here before so I just reproduced @@ -239,13 +242,16 @@ purple_serv_got_alias(PurpleConnection *gc, const char *who, const char *alias) { PurpleAccount *account; - GSList *buddies; PurpleBuddy *b; PurpleConversation *im; + PurpleConversationManager *manager; + GSList *buddies; account = purple_connection_get_account(gc); buddies = purple_blist_find_buddies(account, who); + manager = purple_conversation_manager_get_default(); + while (buddies != NULL) { const char *server_alias; @@ -260,7 +266,8 @@ purple_buddy_set_server_alias(b, alias); - im = purple_conversations_find_im_with_account(purple_buddy_get_name(b), account); + im = purple_conversation_manager_find_im(manager, account, + purple_buddy_get_name(b)); if (im != NULL && alias != NULL && !purple_strequal(alias, who)) { char *escaped = g_markup_escape_text(who, -1); @@ -439,11 +446,15 @@ void purple_serv_chat_invite(PurpleConnection *gc, int id, const char *message, const char *name) { + PurpleAccount *account; + PurpleConversation *chat; + PurpleConversationManager *manager; PurpleProtocol *protocol = NULL; - PurpleConversation *chat; char *buffy; - chat = purple_conversations_find_chat(gc, id); + account = purple_connection_get_account(gc); + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, account, id); if(chat == NULL) return; @@ -503,6 +514,7 @@ { PurpleAccount *account; PurpleConversation *im; + PurpleConversationManager *manager; char *message, *name; char *angel, *buffy; int plugin_return; @@ -510,7 +522,7 @@ g_return_if_fail(msg != NULL); - account = purple_connection_get_account(gc); + account = purple_connection_get_account(gc); if (mtime < 0) { purple_debug_error("server", @@ -531,11 +543,13 @@ return; } + manager = purple_conversation_manager_get_default(); + /* * We should update the conversation window buttons and menu, * if it exists. */ - im = purple_conversations_find_im_with_account(who, purple_connection_get_account(gc)); + im = purple_conversation_manager_find_im(manager, account, who); /* * Make copies of the message and the sender in case plugins want @@ -546,7 +560,7 @@ plugin_return = GPOINTER_TO_INT( purple_signal_emit_return_1(purple_conversations_get_handle(), - "receiving-im-msg", purple_connection_get_account(gc), + "receiving-im-msg", account, &angel, &buffy, im, &flags)); if (!buffy || !angel || plugin_return) { @@ -558,15 +572,17 @@ name = angel; message = buffy; - purple_signal_emit(purple_conversations_get_handle(), "received-im-msg", purple_connection_get_account(gc), - name, message, im, flags); + purple_signal_emit(purple_conversations_get_handle(), "received-im-msg", + account, name, message, im, flags); /* search for conversation again in case it was created by received-im-msg handler */ - if (im == NULL) - im = purple_conversations_find_im_with_account(name, purple_connection_get_account(gc)); + if(im == NULL) { + im = purple_conversation_manager_find_im(manager, account, name); + } - if (im == NULL) + if(im == NULL) { im = purple_im_conversation_new(account, name); + } pmsg = purple_message_new_incoming(name, message, flags, mtime); purple_conversation_write_message(im, pmsg); @@ -655,11 +671,18 @@ g_free(name); } -void purple_serv_got_typing(PurpleConnection *gc, const char *name, int timeout, - PurpleIMTypingState state) { +void +purple_serv_got_typing(PurpleConnection *gc, const char *name, int timeout, + PurpleIMTypingState state) +{ + PurpleAccount *account; PurpleConversation *conv; + PurpleConversationManager *manager; - conv = purple_conversations_find_im_with_account(name, purple_connection_get_account(gc)); + account = purple_connection_get_account(gc); + + manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find_im(manager, account, name); if(PURPLE_IS_IM_CONVERSATION(conv)) { PurpleIMConversation *im = PURPLE_IM_CONVERSATION(conv); @@ -673,30 +696,35 @@ { case PURPLE_IM_TYPING: purple_signal_emit(purple_conversations_get_handle(), - "buddy-typing", purple_connection_get_account(gc), name); + "buddy-typing", account, name); break; case PURPLE_IM_TYPED: purple_signal_emit(purple_conversations_get_handle(), - "buddy-typed", purple_connection_get_account(gc), name); + "buddy-typed", account, name); break; case PURPLE_IM_NOT_TYPING: purple_signal_emit(purple_conversations_get_handle(), - "buddy-typing-stopped", purple_connection_get_account(gc), name); + "buddy-typing-stopped", account, name); break; } } } -void purple_serv_got_typing_stopped(PurpleConnection *gc, const char *name) { +void +purple_serv_got_typing_stopped(PurpleConnection *gc, const char *name) { + PurpleAccount *account; + PurpleConversation *conv; + PurpleConversationManager *manager; - PurpleConversation *conv; + account = purple_connection_get_account(gc); - conv = purple_conversations_find_im_with_account(name, purple_connection_get_account(gc)); - if (conv != NULL) - { + manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find_im(manager, account, name); + if(conv != NULL) { PurpleIMConversation *im = PURPLE_IM_CONVERSATION(conv); - if (purple_im_conversation_get_typing_state(im) == PURPLE_IM_NOT_TYPING) + if(purple_im_conversation_get_typing_state(im) == PURPLE_IM_NOT_TYPING) { return; + } purple_im_conversation_stop_typing_timeout(im); purple_im_conversation_set_typing_state(im, PURPLE_IM_NOT_TYPING); @@ -704,7 +732,7 @@ else { purple_signal_emit(purple_conversations_get_handle(), - "buddy-typing-stopped", purple_connection_get_account(gc), name); + "buddy-typing-stopped", account, name); } }
--- a/libpurple/xfer.c Thu Jul 22 22:33:54 2021 -0500 +++ b/libpurple/xfer.c Thu Jul 22 22:34:48 2021 -0500 @@ -36,6 +36,7 @@ #include "prefs.h" #include "proxy.h" #include "purple-gio.h" +#include "purpleconversationmanager.h" #include "request.h" #include "util.h" #include "xfer.h" @@ -212,6 +213,7 @@ const char *message, gboolean is_error, gboolean print_thumbnail) { PurpleConversation *im = NULL; + PurpleConversationManager *manager = NULL; PurpleMessageFlags flags = PURPLE_MESSAGE_SYSTEM; char *escaped; gconstpointer thumbnail_data; @@ -220,11 +222,13 @@ thumbnail_data = purple_xfer_get_thumbnail(xfer, &size); - im = purple_conversations_find_im_with_account(priv->who, - purple_xfer_get_account(xfer)); - - if (im == NULL) + manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, + purple_xfer_get_account(xfer), + priv->who); + if(PURPLE_IS_IM_CONVERSATION(im)) { return; + } escaped = g_markup_escape_text(message, -1); @@ -956,11 +960,11 @@ if (completed == TRUE) { char *msg = NULL; PurpleConversation *im; + PurpleConversationManager *manager; purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_DONE); - if (purple_xfer_get_filename(xfer) != NULL) - { + if(purple_xfer_get_filename(xfer) != NULL) { char *filename = g_markup_escape_text(purple_xfer_get_filename(xfer), -1); if (purple_xfer_get_local_filename(xfer) && purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_RECEIVE) @@ -974,16 +978,15 @@ msg = g_strdup_printf(_("Transfer of file %s complete"), filename); g_free(filename); - } - else + } else { msg = g_strdup(_("File transfer complete")); - - im = purple_conversations_find_im_with_account(priv->who, - purple_xfer_get_account(xfer)); - - if (im != NULL) { - purple_conversation_write_system_message( - im, msg, 0); + } + + manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, priv->account, + priv->who); + if(PURPLE_IS_IM_CONVERSATION(im)) { + purple_conversation_write_system_message(im, msg, 0); } g_free(msg); }