pidgin/pidgin

3a973a9c5a64
Parents d92defc9ba95
Children 2032d26a8d6b
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);
}