--- a/libpurple/protocols/bonjour/xmpp.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/bonjour/xmpp.c Mon Jul 26 04:13:19 2021 -0500
@@ -268,8 +268,11 @@
+ PurpleAccount *account = NULL; PurpleConversation *conv = NULL;
- PurpleAccount *account = NULL;
+ PurpleConversationManager *manager = NULL; + manager = purple_conversation_manager_get_default(); @@ -279,11 +282,12 @@
account = purple_buddy_get_account(pb);
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(bb->name, account));
+ conv = purple_conversation_manager_find_im(manager, account, bb->name); purple_conversation_write_system_message(conv,
_("Unable to send message."),
bonjour_xmpp_close_conversation(bb->conversation);
@@ -321,8 +325,11 @@
+ PurpleAccount *account; PurpleConversation *conv;
- PurpleAccount *account;
+ PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); @@ -332,11 +339,12 @@
account = purple_buddy_get_account(pb);
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(bb->name, account));
+ conv = purple_conversation_manager_find_im(manager, account, bb->name); purple_conversation_write_system_message(conv,
_("Unable to send message."),
bonjour_xmpp_close_conversation(bb->conversation);
@@ -470,8 +478,11 @@
PurpleConversation *conv;
+ PurpleConversationManager *manager; + BonjourBuddy *bb = NULL; const char *bname = bconv->buddy_name;
- BonjourBuddy *bb = NULL;
+ manager = purple_conversation_manager_get_default(); bb = purple_buddy_get_protocol_data(bconv->pb);
@@ -484,15 +495,18 @@
bname ? bname : "(unknown)", bconv->ip,
error ? error->message : "(null)");
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(bname, bconv->account));
+ conv = purple_conversation_manager_find_im(manager, bconv->account, purple_conversation_write_system_message(conv,
_("Unable to send the message, the conversation couldn't be started."),
bonjour_xmpp_close_conversation(bconv);
@@ -558,11 +572,17 @@
PurpleConversation *conv;
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(bname, bconv->account));
+ PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find_im(manager, bconv->account, purple_conversation_write_system_message(conv,
_("Unable to send the message, the conversation couldn't be started."),
purple_gio_graceful_close(G_IO_STREAM(bconv->socket),
@@ -621,11 +641,17 @@
PurpleConversation *conv;
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(bname, bconv->account));
+ PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find_im(manager, bconv->account, purple_conversation_write_system_message(conv,
_("Unable to send the message, the conversation couldn't be started."),
/* We don't want to recieve anything else */
@@ -780,8 +806,9 @@
+ PurpleAccount *account = NULL; PurpleConversation *conv = NULL;
- PurpleAccount *account = NULL;
+ PurpleConversationManager *manager = NULL; if (error && error->code == G_IO_ERROR_CANCELLED) {
@@ -833,11 +860,14 @@
purple_debug_error("bonjour", "No more addresses for buddy %s. Aborting", purple_buddy_get_name(pb));
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(bb->name, account));
+ manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find_im(manager, account, bb->name); purple_conversation_write_system_message(conv,
_("Unable to send the message, the conversation couldn't be started."),
bonjour_xmpp_close_conversation(bb->conversation);
@@ -851,8 +881,9 @@
g_object_ref(g_io_stream_get_output_stream(G_IO_STREAM(conn)));
if (!bonjour_xmpp_send_stream_init(bb->conversation, &error)) {
+ PurpleAccount *account = NULL; PurpleConversation *conv = NULL;
- PurpleAccount *account = NULL;
+ PurpleConversationManager *manager = NULL; purple_debug_error("bonjour",
"Error starting stream with buddy %s at "
@@ -863,11 +894,14 @@
account = purple_buddy_get_account(pb);
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(bb->name, account));
+ manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find_im(manager, account, bb->name); purple_conversation_write_system_message(conv,
_("Unable to send the message, the conversation couldn't be started."),
bonjour_xmpp_close_conversation(bb->conversation);
--- a/libpurple/protocols/facebook/facebook.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/facebook/facebook.c Mon Jul 26 04:13:19 2021 -0500
@@ -395,17 +395,20 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; gc = fb_data_get_connection(fata);
acct = purple_connection_get_account(gc);
fetch = g_hash_table_new(fb_id_hash, fb_id_equal);
+ manager = purple_conversation_manager_get_default(); for (l = events; l != NULL; l = l->next) {
FB_ID_TO_STR(event->tid, tid);
- chat = purple_conversations_find_chat_with_account(tid, acct);
+ chat = purple_conversation_manager_find_chat(manager, acct, tid); @@ -511,6 +514,7 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; PurpleMessageFlags flags;
@@ -520,6 +524,8 @@
open = purple_account_get_bool(acct, "group-chat-open", TRUE);
self = purple_account_get_bool(acct, "show-self", TRUE);
+ manager = purple_conversation_manager_get_default(); for (l = msgs; l != NULL; l = l->next) {
FB_ID_TO_STR(msg->uid, uid);
@@ -569,7 +575,7 @@
FB_ID_TO_STR(msg->tid, tid);
- chat = purple_conversations_find_chat_with_account(tid, acct);
+ chat = purple_conversation_manager_find_chat(manager, acct, tid); @@ -636,6 +642,7 @@
PurpleConversation *conv;
+ PurpleConversationManager *manager; PurpleChatConversation *chat;
@@ -644,7 +651,8 @@
id = fb_id_hash(&thrd->tid);
FB_ID_TO_STR(thrd->tid, tid);
- conv = purple_conversations_find_chat_with_account(tid, acct);
+ manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find_chat(manager, acct, tid); if((conv == NULL) || purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(conv))) {
conv = purple_serv_got_joined_chat(gc, id, tid);
chat = PURPLE_CHAT_CONVERSATION(conv);
@@ -707,12 +715,15 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; FB_ID_TO_STR(thrd->tid, tid);
gc = fb_data_get_connection(fata);
acct = purple_connection_get_account(gc);
- chat = purple_conversations_find_chat_with_account(tid, acct);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, acct, tid); PurpleRequestCommonParameters *cpar;
@@ -1312,6 +1323,7 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; PurpleRequestCommonParameters *cpar;
name = g_hash_table_lookup(data, "name");
@@ -1329,7 +1341,11 @@
tid = FB_ID_FROM_STR(name);
- chat = purple_conversations_find_chat(gc, id);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, + purple_connection_get_account(gc), if ((chat != NULL) && !purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(chat))) {
purple_conversation_present(chat);
@@ -1362,6 +1378,7 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; PurpleRequestCommonParameters *cpar;
if (!FB_ID_IS_STR(who)) {
@@ -1376,7 +1393,11 @@
fata = purple_connection_get_protocol_data(gc);
api = fb_data_get_api(fata);
- chat = purple_conversations_find_chat(gc, id);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, + purple_connection_get_account(gc), name = purple_conversation_get_name(chat);
tid = FB_ID_FROM_STR(name);
@@ -1397,11 +1418,14 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; acct = purple_connection_get_account(gc);
fata = purple_connection_get_protocol_data(gc);
api = fb_data_get_api(fata);
- chat = purple_conversations_find_chat(gc, id);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, acct, id); name = purple_conversation_get_name(chat);
tid = FB_ID_FROM_STR(name);
@@ -1428,10 +1452,15 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; fata = purple_connection_get_protocol_data(gc);
api = fb_data_get_api(fata);
- chat = purple_conversations_find_chat(gc, id);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, + purple_connection_get_account(gc), name = purple_conversation_get_name(chat);
tid = FB_ID_FROM_STR(name);
--- a/libpurple/protocols/irc/cmds.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/irc/cmds.c Mon Jul 26 04:13:19 2021 -0500
@@ -29,11 +29,16 @@
int irc_cmd_default(struct irc_conn *irc, const char *cmd, const char *target, const char **args)
- PurpleConversation *convo = purple_conversations_find_with_account(target, irc->account);
+ PurpleConversation *convo; + PurpleConversationManager *manager;
+ manager = purple_conversation_manager_get_default(); + convo = purple_conversation_manager_find(manager, irc->account, target); buf = g_strdup_printf(_("Unknown command: %s"), cmd);
purple_conversation_write_system_message(convo, buf, PURPLE_MESSAGE_NO_LOG);
@@ -92,12 +97,15 @@
PurpleConversation *convo;
+ PurpleConversationManager *manager; - if (!args || !args[0] || !gc)
+ if (!args || !args[0] || !gc) { - convo = purple_conversations_find_with_account(target, irc->account);
+ manager = purple_conversation_manager_get_default(); + convo = purple_conversation_manager_find(manager, irc->account, target); me = purple_account_get_name_for_display(irc->account);
msg = g_strdup_printf("/me %s", args[0]);
@@ -257,18 +265,23 @@
int irc_cmd_kick(struct irc_conn *irc, const char *cmd, const char *target, const char **args)
+ PurpleConversationManager *manager;
+ if(!args || !args[0]) { - if (!purple_conversations_find_chat_with_account(target, irc->account))
+ manager = purple_conversation_manager_get_default(); + if(!purple_conversation_manager_find_chat(manager, irc->account, target)) {
buf = irc_format(irc, "vcn:", "KICK", target, args[0], args[1]);
buf = irc_format(irc, "vcn", "KICK", target, args[0]);
@@ -599,16 +612,20 @@
int irc_cmd_topic(struct irc_conn *irc, const char *cmd, const char *target, const char **args)
+ PurpleConversation *chat; + PurpleConversationManager *manager; - PurpleConversation *chat;
- chat = purple_conversations_find_chat_with_account(target, irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, target); topic = purple_chat_conversation_get_topic (PURPLE_CHAT_CONVERSATION(chat));
--- a/libpurple/protocols/irc/msgs.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/irc/msgs.c Mon Jul 26 04:13:19 2021 -0500
@@ -130,6 +130,7 @@
const char *end, *cur, *numeric = NULL;
char *clean, *tmp, *convname;
PurpleConversation *convo;
+ PurpleConversationManager *manager; for (cur = args[0], i = 0; i < 4; i++) {
@@ -164,7 +165,8 @@
/* Check for an existing conversation */
- convo = purple_conversations_find_with_account(convname, irc->account);
+ manager = purple_conversation_manager_get_default(); + convo = purple_conversation_manager_find(manager, irc->account, convname); @@ -259,8 +261,11 @@
void irc_msg_ban(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConversation *chat;
+ PurpleConversationManager *manager; - chat = purple_conversations_find_chat_with_account(args[1], irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, if (purple_strequal(name, "367")) {
@@ -308,28 +313,35 @@
void irc_msg_banfull(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConversation *chat;
+ PurpleConversationManager *manager; - chat = purple_conversations_find_chat_with_account(args[1], irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, nick = g_markup_escape_text(args[2], -1);
buf = g_strdup_printf(_("Cannot ban %s: banlist is full"), nick);
- purple_conversation_write_system_message(chat,
- buf, PURPLE_MESSAGE_NO_LOG);
+ purple_conversation_write_system_message(chat, buf, PURPLE_MESSAGE_NO_LOG); void irc_msg_chanmode(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConversation *chat;
+ PurpleConversationManager *manager; - chat = purple_conversations_find_chat_with_account(args[1], irc->account);
- if (!chat) /* XXX punt on channels we are not in for now */
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, + if (!chat) { /* XXX punt on channels we are not in for now */ escaped = (args[3] != NULL) ? g_markup_escape_text(args[3], -1) : NULL;
buf = g_strdup_printf("mode for %s: %s %s", args[1], args[2], escaped ? escaped : "");
@@ -466,13 +478,16 @@
if (purple_strequal(name, "352")) {
PurpleConversation *chat;
+ PurpleConversationManager *manager; char *cur, *userhost, *realname;
PurpleChatUserFlags flags;
- chat = purple_conversations_find_chat_with_account(args[1], irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, purple_debug_error("irc", "Got a WHO response for %s, which doesn't exist", args[1]);
@@ -483,7 +498,7 @@
purple_debug_error("irc", "Got a WHO response for %s who isn't a buddy.", args[5]);
userhost = g_strdup_printf("%s@%s", args[2], args[3]);
/* The final argument is a :-argument, but annoyingly
@@ -553,6 +568,7 @@
char *chan, *topic, *msg, *nick, *tmp, *tmp2;
PurpleConversation *chat;
+ PurpleConversationManager *manager; if (purple_strequal(name, "topic")) {
@@ -562,7 +578,8 @@
topic = irc_mirc2txt (args[2]);
- chat = purple_conversations_find_chat_with_account(chan, irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, chan); purple_debug_error("irc", "Got a topic for %s, which doesn't exist", chan);
@@ -606,11 +623,14 @@
void irc_msg_topicinfo(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConversation *chat;
+ PurpleConversationManager *manager; char *msg, *timestamp, *datestamp;
- chat = purple_conversations_find_chat_with_account(args[1], irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, purple_debug_error("irc", "Got topic info for %s, which doesn't exist", args[1]);
@@ -659,10 +679,14 @@
void irc_msg_names(struct irc_conn *irc, const char *name, const char *from, char **args)
char *names, *cur, *end, *tmp, *msg;
- PurpleConversation *convo;
if (purple_strequal(name, "366")) {
- convo = purple_conversations_find_with_account(args[1], irc->account);
+ PurpleConversation *convo; + PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); + convo = purple_conversation_manager_find(manager, irc->account, purple_debug_error("irc", "Got a NAMES list for %s, which doesn't exist", args[1]);
g_string_free(irc->names, TRUE);
@@ -798,8 +822,10 @@
PurpleConversation *convo;
+ PurpleConversationManager *manager; - convo = purple_conversations_find_with_account(args[1], irc->account);
+ manager = purple_conversation_manager_get_default(); + convo = purple_conversation_manager_find(manager, irc->account, args[1]); purple_conversation_write_system_message(convo,
PURPLE_IS_IM_CONVERSATION(convo) ? _("User is not logged in") : _("no such channel"),
@@ -822,8 +848,11 @@
PurpleConversation *chat;
+ PurpleConversationManager *manager; - chat = purple_conversations_find_chat_with_account(args[1], irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, purple_conversation_write_system_message(chat, args[2],
@@ -837,7 +866,12 @@
void irc_msg_notinchan(struct irc_conn *irc, const char *name, const char *from, char **args)
- PurpleConversation *chat = purple_conversations_find_chat_with_account(args[1], irc->account);
+ PurpleConversation *chat; + PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, purple_debug_info("irc", "We're apparently not in %s, but tried to use it", args[1]);
@@ -851,10 +885,14 @@
void irc_msg_notop(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConversation *chat;
+ PurpleConversationManager *manager; - chat = purple_conversations_find_chat_with_account(args[1], irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, purple_conversation_write_system_message(chat, args[2], 0);
@@ -932,6 +970,7 @@
PurpleConnection *gc = purple_account_get_connection(irc->account);
PurpleConversation *chat;
+ PurpleConversationManager *manager; char *nick, *userhost, *buf;
@@ -942,11 +981,14 @@
nick = irc_mask_nick(from);
+ manager = purple_conversation_manager_get_default(); if (!purple_utf8_strcasecmp(nick, purple_connection_get_display_name(gc))) {
/* We are joining a channel for the first time */
purple_serv_got_joined_chat(gc, id++, args[0]);
- chat = purple_conversations_find_chat_with_account(args[0], irc->account);
+ chat = purple_conversation_manager_find_chat(manager, irc->account, purple_debug_error("irc", "tried to join %s but couldn't\n", args[0]);
@@ -967,7 +1009,8 @@
- chat = purple_conversations_find_chat_with_account(args[0], irc->account);
+ chat = purple_conversation_manager_find_chat(manager, irc->account, purple_debug_error("irc", "JOIN for %s failed", args[0]);
@@ -995,11 +1038,16 @@
void irc_msg_kick(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConnection *gc = purple_account_get_connection(irc->account);
- PurpleConversation *chat = purple_conversations_find_chat_with_account(args[0], irc->account);
+ PurpleConversation *chat; + PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, nick = irc_mask_nick(from);
@@ -1024,12 +1072,16 @@
void irc_msg_mode(struct irc_conn *irc, const char *name, const char *from, char **args)
- PurpleConversation *chat;
char *nick = irc_mask_nick(from), *buf;
if (*args[0] == '#' || *args[0] == '&') { /* Channel */
+ PurpleConversation *chat; + PurpleConversationManager *manager; - chat = purple_conversations_find_chat_with_account(args[0], irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, purple_debug_error("irc", "MODE received for %s, which we are not in", args[0]);
@@ -1093,6 +1145,7 @@
PurpleConnection *gc = purple_account_get_connection(irc->account);
+ PurpleConversationManager *manager; char *nick = irc_mask_nick(from);
@@ -1116,10 +1169,11 @@
- im = purple_conversations_find_im_with_account(nick,
+ manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, irc->account, nick); purple_conversation_set_name(im, args[0]);
@@ -1202,6 +1256,7 @@
PurpleConnection *gc = purple_account_get_connection(irc->account);
PurpleConversation *chat;
+ PurpleConversationManager *manager; char *nick, *msg, *channel;
@@ -1210,7 +1265,9 @@
* that I can see. This catches that. */
channel = (args[0][0] == ':') ? &args[0][1] : args[0];
- chat = purple_conversations_find_chat_with_account(channel, irc->account);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, purple_debug_info("irc", "Got a PART on %s, which doesn't exist -- probably closed", channel);
@@ -1246,6 +1303,7 @@
void irc_msg_pong(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConversation *convo;
+ PurpleConversationManager *manager; @@ -1265,7 +1323,8 @@
(gdouble)G_USEC_PER_SEC);
- convo = purple_conversations_find_with_account(parts[0], irc->account);
+ manager = purple_conversation_manager_get_default(); + convo = purple_conversation_manager_find(manager, irc->account, parts[0]); purple_conversation_write_system_message(convo, msg, PURPLE_MESSAGE_NO_LOG);
@@ -1319,7 +1378,11 @@
if (!purple_utf8_strcasecmp(to, purple_connection_get_display_name(gc))) {
purple_serv_got_im(gc, nick, msg, 0, time(NULL));
- chat = purple_conversations_find_chat_with_account(irc_nick_skip_mode(irc, to), irc->account);
+ PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat(manager, irc->account, + irc_nick_skip_mode(irc, to)); purple_serv_got_chat_in(gc, purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(chat)),
nick, PURPLE_MESSAGE_RECV, msg, time(NULL));
@@ -1334,11 +1397,14 @@
void irc_msg_regonly(struct irc_conn *irc, const char *name, const char *from, char **args)
PurpleConnection *gc = purple_account_get_connection(irc->account);
+ PurpleConversationManager *manager; - if (purple_conversations_find_chat_with_account(args[1], irc->account)) {
+ manager = purple_conversation_manager_get_default(); + if(purple_conversation_manager_find_chat(manager, irc->account, args[1])) { /* This is a channel we're already in; for some reason,
* freenode feels the need to notify us that in some
* hypothetical other situation this might not have
--- a/libpurple/protocols/jabber/message.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/jabber/message.c Mon Jul 26 04:13:19 2021 -0500
@@ -104,6 +104,7 @@
JabberID *jid = jabber_id_new(contact);
+ PurpleConversationManager *manager; PurpleMessageFlags flags = 0;
@@ -113,6 +114,8 @@
+ manager = purple_conversation_manager_get_default(); account = purple_connection_get_account(gc);
@@ -130,8 +133,10 @@
purple_serv_got_typing(gc, contact, 0, PURPLE_IM_TYPED);
- PurpleConversation *im = purple_conversations_find_im_with_account(
+ PurpleConversation *im = NULL; + im = purple_conversation_manager_find_im(manager, account, contact); if (im && jid->node && jid->domain) {
@@ -177,7 +182,7 @@
- im = purple_conversations_find_im_with_account(contact, account);
+ im = purple_conversation_manager_find_im(manager, account, contact); if (im && !purple_strequal(contact,
purple_conversation_get_name(im))) {
purple_debug_info("jabber", "Binding conversation to %s\n",
@@ -752,9 +757,14 @@
} else if (jm->type == JABBER_MESSAGE_NORMAL ||
- jm->type == JABBER_MESSAGE_CHAT) {
- purple_conversations_find_with_account(from, account);
+ jm->type == JABBER_MESSAGE_CHAT) + PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find(manager, /* we need to create the conversation here */
conv = PURPLE_CONVERSATION(
@@ -975,10 +985,12 @@
PurpleAccount *account = purple_connection_get_account(jm->js->gc);
GList *found_smileys, *it, *it_next;
PurpleConversation *conv;
+ PurpleConversationManager *manager; gboolean has_too_large_smiley = FALSE;
gchar *smileyfied_xhtml = NULL;
- conv = purple_conversations_find_with_account(jm->to, account);
+ manager = purple_conversation_manager_get_default(); + conv = purple_conversation_manager_find(manager, account, jm->to); if (!jabber_conv_support_custom_smileys(jm->js, conv, jm->to))
--- a/libpurple/protocols/null/nullprpl.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/null/nullprpl.c Mon Jul 26 04:13:19 2021 -0500
@@ -130,24 +130,38 @@
static void call_chat_func(gpointer data, gpointer userdata) {
PurpleConnection *to = (PurpleConnection *)data;
+ PurpleConversation *chat; + PurpleConversationManager *manager; ChatFuncData *cfdata = (ChatFuncData *)userdata;
int id = purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(cfdata->from_chat));
- PurpleConversation *chat = purple_conversations_find_chat(to, id);
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, + purple_connection_get_account(to), cfdata->fn(cfdata->from_chat, chat, id,
purple_conversation_get_name(chat), cfdata->userdata);
static void foreach_gc_in_chat(ChatFunc fn, PurpleConnection *from,
int id, gpointer userdata) {
- PurpleConversation *chat = purple_conversations_find_chat(from, id);
- ChatFuncData cfdata = { fn,
+ PurpleConversation *chat; + PurpleConversationManager *manager; + ChatFuncData cfdata = { - g_list_foreach(purple_connections_get_all(), call_chat_func,
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, + purple_connection_get_account(from), + cfdata.from_chat = chat; + g_list_foreach(purple_connections_get_all(), call_chat_func, &cfdata); @@ -748,12 +762,17 @@
null_join_chat(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
- const char *username = purple_account_get_username(purple_connection_get_account(gc));
+ PurpleAccount *account = purple_connection_get_account(gc); + PurpleConversationManager *manager; + const char *username = purple_account_get_username(account); const char *room = g_hash_table_lookup(components, "room");
int chat_id = g_str_hash(room);
purple_debug_info("nullprpl", "%s is joining chat room %s\n", username, room);
- if (!purple_conversations_find_chat(gc, chat_id)) {
+ manager = purple_conversation_manager_get_default(); + if(!purple_conversation_manager_find_chat_by_id(manager, account, chat_id)) { purple_serv_got_joined_chat(gc, chat_id, room);
/* tell everyone that we joined, and add them if they're already there */
@@ -807,16 +826,24 @@
null_chat_invite(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
gint id, const gchar *message, const gchar *who)
- const char *username = purple_account_get_username(purple_connection_get_account(gc));
- PurpleConversation *chat = purple_conversations_find_chat(gc, id);
- const char *room = purple_conversation_get_name(chat);
+ PurpleAccount *account = purple_connection_get_account(gc); PurpleAccount *to_acct = purple_accounts_find(who, "null");
+ PurpleConversation *chat; + PurpleConversationManager *manager; + const char *username = purple_account_get_username(account); + const char *room = NULL; + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, account, id); + room = purple_conversation_get_name(chat); purple_debug_info("nullprpl", "%s is inviting %s to join chat room %s\n",
- PurpleConversation *to_conv = purple_conversations_find_chat(purple_account_get_connection(to_acct), id);
+ PurpleConversation *to_conv; + to_conv = purple_conversation_manager_find_chat_by_id(manager, to_acct, id); char *tmp = g_strdup_printf("%s is already in chat room %s.", who, room);
purple_debug_info("nullprpl",
@@ -852,7 +879,13 @@
null_chat_leave(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
- PurpleConversation *chat = purple_conversations_find_chat(gc, id);
+ PurpleConversationManager *manager; + PurpleConversation *chat; + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, + purple_connection_get_account(gc), purple_debug_info("nullprpl", "%s is leaving chat room %s\n",
purple_account_get_username(purple_connection_get_account(gc)),
purple_conversation_get_name(chat));
@@ -877,10 +910,14 @@
null_chat_send(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
gint id, PurpleMessage *msg)
- const char *username = purple_account_get_username(purple_connection_get_account(gc));
- PurpleConversation *chat = purple_conversations_find_chat(gc, id);
+ PurpleAccount *account = purple_connection_get_account(gc); + PurpleConversation *chat; + PurpleConversationManager *manager; const gchar *message = purple_message_get_contents(msg);
+ const gchar *username = purple_account_get_username(account); + manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, account, id); purple_debug_info("nullprpl",
"%s is sending message to chat room %s: %s\n", username,
@@ -990,11 +1027,17 @@
null_set_chat_topic(PurpleProtocolChat *protocol_chat, PurpleConnection *gc,
gint id, const gchar *topic)
- PurpleConversation *chat = purple_conversations_find_chat(gc, id);
+ PurpleConversation *chat = NULL; + PurpleConversationManager *manager = NULL;
+ manager = purple_conversation_manager_get_default(); + chat = purple_conversation_manager_find_chat_by_id(manager, + purple_connection_get_account(gc), purple_debug_info("nullprpl", "%s sets topic of chat room '%s' to '%s'\n",
purple_account_get_username(purple_connection_get_account(gc)),
@@ -1016,6 +1059,7 @@
static PurpleRoomlist *null_roomlist_get_list(PurpleConnection *gc) {
const char *username = purple_account_get_username(purple_connection_get_account(gc));
+ PurpleConversationManager *manager; PurpleRoomlist *roomlist = purple_roomlist_new(purple_connection_get_account(gc));
PurpleRoomlistField *field;
@@ -1034,9 +1078,11 @@
purple_roomlist_set_fields(roomlist, fields);
+ manager = purple_conversation_manager_get_default(); /* add each chat room. the chat ids are cached in seen_ids so that each room
* is only returned once, even if multiple users are in it. */
- for (chats = purple_conversations_get_all(); chats; chats = g_list_next(chats)) {
+ for (chats = purple_conversation_manager_get_all(manager); chats; chats = g_list_next(chats)) { PurpleChatConversation *chat = NULL;
PurpleRoomlistRoom *room = NULL;
const gchar *name = NULL;
--- a/libpurple/protocols/sametime/sametime.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/sametime/sametime.c Mon Jul 26 04:13:19 2021 -0500
@@ -1776,14 +1776,19 @@
struct mwPurpleProtocolData *pd;
+ PurpleConversationManager *manager; char *who = from->user_id;
pd = mwSession_getClientData(s);
acct = purple_connection_get_account(pd->gc);
- im = purple_conversations_find_im_with_account(who, acct);
- if(! im) im = purple_im_conversation_new(acct, who);
+ manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, acct, who); + if(!PURPLE_IS_IM_CONVERSATION(im)) { + im = purple_im_conversation_new(acct, who); buddy = purple_blist_find_buddy(acct, who);
if(buddy) who = (char *) purple_buddy_get_contact_alias(buddy);
@@ -1888,13 +1893,9 @@
#define CONF_TO_ID(conf) (GPOINTER_TO_INT(conf))
#define ID_TO_CONF(pd, id) (conf_find_by_id((pd), (id)))
-#define CHAT_TO_ID(chat) (purple_chat_conversation_get_id(chat))
-#define ID_TO_CHAT(id) (purple_conversations_find_chat(id))
#define CHAT_TO_CONF(pd, chat) (ID_TO_CONF((pd), CHAT_TO_ID(chat)))
#define CONF_TO_CHAT(conf) (ID_TO_CHAT(CONF_TO_ID(conf)))
static struct mwConference *
conf_find_by_id(struct mwPurpleProtocolData *pd, int id) {
@@ -1907,7 +1908,7 @@
struct mwConference *c = l->data;
PurpleChatConversation *h = mwConference_getClientData(c);
- if(CHAT_TO_ID(h) == id) {
+ if(purple_chat_conversation_get_id(h) == id) { @@ -2461,6 +2462,7 @@
struct mwSession *session;
struct mwPurpleProtocolData *pd;
+ PurpleConversationManager *manager; @@ -2473,7 +2475,9 @@
idb = mwConversation_getTarget(conv);
- return purple_conversations_find_im_with_account(idb->user, acct);
+ manager = purple_conversation_manager_get_default(); + return purple_conversation_manager_find_im(manager, acct, idb->user); @@ -2859,7 +2863,7 @@
struct mwPlace *p = l->data;
PurpleChatConversation *h = mwPlace_getClientData(p);
- if(CHAT_TO_ID(h) == id) {
+ if(purple_chat_conversation_get_id(h) == id) { @@ -4042,12 +4046,17 @@
static void notify_im(PurpleConnection *gc, GList *row, void *user_data) {
+ PurpleConversationManager *manager; acct = purple_connection_get_account(gc);
id = g_list_nth_data(row, 1);
- im = purple_conversations_find_im_with_account(id, acct);
- if(! im) im = purple_im_conversation_new(acct, id);
+ manager = purple_conversation_manager_get_default(); + im = purple_conversation_manager_find_im(manager, acct, id); + if(!PURPLE_IS_IM_CONVERSATION(im)) { + im = purple_im_conversation_new(acct, id); purple_conversation_present(im);
--- a/libpurple/protocols/silc/ops.c Mon Jul 26 03:56:06 2021 -0500
+++ b/libpurple/protocols/silc/ops.c Mon Jul 26 04:13:19 2021 -0500
@@ -95,6 +95,7 @@
PurpleMessageFlags cflags = 0;
PurpleConversation *chat = NULL;
+ PurpleConversationManager *manager = NULL; @@ -180,6 +181,8 @@
+ manager = purple_conversation_manager_get_default(); if (g_str_has_prefix(type, "image/")) {
@@ -194,16 +197,20 @@
for (l = sg->grps; l; l = l->next)
if (((SilcPurplePrvgrp)l->data)->key == key) {
- chat = purple_conversations_find_chat_with_account(
- prv->channel, sg->account);
+ chat = purple_conversation_manager_find_chat(manager,
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ if (channel && !chat) { + chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); + if (channel && !chat) { img = purple_image_new_from_data(data, data_len);
@@ -268,11 +275,14 @@
PurpleConnection *gc = client->application;
SilcPurple sg = purple_connection_get_protocol_data(gc);
PurpleConversation *chat = NULL;
+ PurpleConversationManager *manager = NULL; + manager = purple_conversation_manager_get_default(); @@ -280,16 +290,19 @@
for (l = sg->grps; l; l = l->next)
if (((SilcPurplePrvgrp)l->data)->key == key) {
- chat = purple_conversations_find_chat_with_account(
- prv->channel, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account,
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); if (flags & SILC_MESSAGE_FLAG_SIGNED &&
purple_account_get_bool(sg->account, "sign-verify", FALSE)) {
@@ -365,14 +378,17 @@
PurpleConnection *gc = client->application;
SilcPurple sg = purple_connection_get_protocol_data(gc);
PurpleConversation *convo;
+ PurpleConversationManager *manager = NULL;
+ manager = purple_conversation_manager_get_default(); /* XXX - Should this be PURPLE_CONV_TYPE_IM? */
- convo = purple_conversations_find_with_account(
- sender->nickname, sg->account);
+ convo = purple_conversation_manager_find(manager, sg->account, if (flags & SILC_MESSAGE_FLAG_SIGNED &&
purple_account_get_bool(sg->account, "sign-verify", FALSE)) {
@@ -445,6 +461,7 @@
PurpleConnection *gc = client->application;
+ PurpleConversationManager *manager; SilcPurple sg = purple_connection_get_protocol_data(gc);
PurpleAccount *account = purple_connection_get_account(gc);
PurpleConversation *chat;
@@ -464,6 +481,8 @@
memset(buf, 0, sizeof(buf));
+ manager = purple_conversation_manager_get_default(); case SILC_NOTIFY_TYPE_NONE:
@@ -490,10 +509,11 @@
if (client_entry == conn->local_entry)
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); /* Join user to channel */
g_snprintf(buf, sizeof(buf), "%s@%s",
@@ -507,10 +527,11 @@
client_entry = va_arg(va, SilcClientEntry);
channel = va_arg(va, SilcChannelEntry);
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); /* Remove user from channel */
purple_chat_conversation_remove_user(PURPLE_CHAT_CONVERSATION(chat),
@@ -525,10 +546,11 @@
/* Remove from all channels */
silc_hash_table_list(client_entry->channels, &htl);
while (silc_hash_table_get(&htl, NULL, (void *)&chu)) {
- chat = purple_conversations_find_chat_with_account(
- chu->channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + chu->channel->channel_name); purple_chat_conversation_remove_user(PURPLE_CHAT_CONVERSATION(chat),
@@ -545,13 +567,15 @@
tmp = va_arg(va, char *);
channel = va_arg(va, SilcChannelEntry);
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name);
esc = g_markup_escape_text(tmp, -1);
tmp2 = purple_markup_linkify(esc);
@@ -604,13 +628,15 @@
/* Change nick on all channels */
silc_hash_table_list(client_entry->channels, &htl);
while (silc_hash_table_get(&htl, NULL, (void *)&chu)) {
- chat = purple_conversations_find_chat_with_account(
- chu->channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + chu->channel->channel_name); - if (purple_chat_conversation_has_user(PURPLE_CHAT_CONVERSATION(chat), client_entry->nickname))
+ if (purple_chat_conversation_has_user(PURPLE_CHAT_CONVERSATION(chat), client_entry->nickname)) { purple_chat_conversation_rename_user(PURPLE_CHAT_CONVERSATION(chat),
silc_hash_table_list_reset(&htl);
@@ -627,19 +653,23 @@
(void)va_arg(va, SilcDList);
channel = va_arg(va, SilcChannelEntry);
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); - if (idtype == SILC_ID_CLIENT)
+ if (idtype == SILC_ID_CLIENT) { name = ((SilcClientEntry)entry)->nickname;
- else if (idtype == SILC_ID_SERVER)
+ } else if (idtype == SILC_ID_SERVER) { name = ((SilcServerEntry)entry)->server_name;
name = ((SilcChannelEntry)entry)->channel_name;
silcpurple_get_chmode_string(mode, buf2, sizeof(buf2));
@@ -663,19 +693,23 @@
client_entry2 = va_arg(va, SilcClientEntry);
channel = va_arg(va, SilcChannelEntry);
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); - if (idtype == SILC_ID_CLIENT)
+ if (idtype == SILC_ID_CLIENT) { name = ((SilcClientEntry)entry)->nickname;
- else if (idtype == SILC_ID_SERVER)
+ } else if (idtype == SILC_ID_SERVER) { name = ((SilcServerEntry)entry)->server_name;
name = ((SilcChannelEntry)entry)->channel_name;
silcpurple_get_chumode_string(mode, buf2, sizeof(buf2));
@@ -709,10 +743,11 @@
client_entry2 = va_arg(va, SilcClientEntry);
channel = va_arg(va, SilcChannelEntry);
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); if (client_entry == conn->local_entry) {
/* Remove us from channel */
@@ -760,10 +795,11 @@
/* Remove us from all channels */
silc_hash_table_list(client_entry->channels, &htl);
while (silc_hash_table_get(&htl, NULL, (void *)&chu)) {
- chat = purple_conversations_find_chat_with_account(
- chu->channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + chu->channel->channel_name); purple_conversation_write_system_message(chat, buf, 0);
purple_serv_got_chat_left(gc, purple_chat_conversation_get_id(PURPLE_CHAT_CONVERSATION(chat)));
@@ -790,10 +826,11 @@
/* Remove user from all channels */
silc_hash_table_list(client_entry->channels, &htl);
while (silc_hash_table_get(&htl, NULL, (void *)&chu)) {
- chat = purple_conversations_find_chat_with_account(
- chu->channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + chu->channel->channel_name); purple_chat_conversation_remove_user(PURPLE_CHAT_CONVERSATION(chat),
client_entry->nickname, tmp);
@@ -814,10 +851,11 @@
/* Remove from all channels */
silc_hash_table_list(client_entry->channels, &htl);
while (silc_hash_table_get(&htl, NULL, (void *)&chu)) {
- chat = purple_conversations_find_chat_with_account(
- chu->channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + chu->channel->channel_name); purple_chat_conversation_remove_user(PURPLE_CHAT_CONVERSATION(chat),
@@ -990,6 +1028,9 @@
PurpleConnection *gc = client->application;
SilcPurple sg = purple_connection_get_protocol_data(gc);
PurpleConversation *chat;
+ PurpleConversationManager *manager; + manager = purple_conversation_manager_get_default(); @@ -1016,10 +1057,11 @@
/* Add channel to Purple */
channel->context = SILC_32_TO_PTR(++sg->channel_ids);
purple_serv_got_joined_chat(gc, sg->channel_ids, channel->channel_name);
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); /* Add all users to channel */
while (silc_hash_table_get(user_list, NULL, (void *)&chu)) {
@@ -1310,8 +1352,8 @@
channel = va_arg(ap, SilcChannelEntry);
- chat = purple_conversations_find_chat_with_account(
- channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + channel->channel_name); purple_debug_error("silc", "Got a topic for %s, which doesn't exist\n",
@@ -1346,14 +1388,16 @@
/* Change nick on all channels */
silc_hash_table_list(local_entry->channels, &htl);
while (silc_hash_table_get(&htl, NULL, (void *)&chu)) {
- chat = purple_conversations_find_chat_with_account(
- chu->channel->channel_name, sg->account);
+ chat = purple_conversation_manager_find_chat(manager, sg->account, + chu->channel->channel_name); oldnick = purple_chat_conversation_get_nick(PURPLE_CHAT_CONVERSATION(chat));
if (!purple_strequal(oldnick,
purple_normalize(purple_conversation_get_account(chat),
purple_chat_conversation_rename_user(PURPLE_CHAT_CONVERSATION(chat),