pidgin/pidgin

53fa03701534
Parents c83bf354d142
Children 0d2cd3af6983
Port Pidgin to the new PurpleConversationManager API

Testing Done:
Joined and chat and sent a message as well as a im.

Reviewed at https://reviews.imfreedom.org/r/750/
--- a/pidgin/gtkblist.c Mon Jun 14 22:18:20 2021 -0500
+++ b/pidgin/gtkblist.c Mon Jun 14 23:00:10 2021 -0500
@@ -354,20 +354,24 @@
static PurpleConversation *
find_conversation_with_buddy(PurpleBuddy *buddy)
{
+ PurpleConversationManager *manager;
PidginBlistNode *ui = g_object_get_data(G_OBJECT(buddy), UI_DATA);
if(ui) {
return ui->conv.conv;
}
- return PURPLE_CONVERSATION(purple_conversations_find_im_with_account(
- purple_buddy_get_name(buddy), purple_buddy_get_account(buddy)));
+ manager = purple_conversation_manager_get_default();
+ return purple_conversation_manager_find_im(manager,
+ purple_buddy_get_account(buddy),
+ purple_buddy_get_name(buddy));
}
static void gtk_blist_join_chat(PurpleChat *chat)
{
PurpleAccount *account;
PurpleConversation *conv;
+ PurpleConversationManager *manager;
PurpleProtocol *protocol;
GHashTable *components;
const char *name;
@@ -378,20 +382,21 @@
components = purple_chat_get_components(chat);
- if(protocol) {
+ if(PURPLE_IS_PROTOCOL_CHAT(protocol)) {
chat_name = purple_protocol_chat_get_name(PURPLE_PROTOCOL_CHAT(protocol),
components);
}
- if (chat_name)
+ if(chat_name != NULL) {
name = chat_name;
- else
+ } else {
name = purple_chat_get_name(chat);
-
- conv = PURPLE_CONVERSATION(purple_conversations_find_chat_with_account(name,
- account));
-
- if (conv != NULL) {
+ }
+
+ manager = purple_conversation_manager_get_default();
+ conv = purple_conversation_manager_find(manager, account, name);
+
+ if(PURPLE_IS_CONVERSATION(conv)) {
pidgin_conv_attach_to_conversation(conv);
purple_conversation_present(conv);
}
@@ -3275,7 +3280,9 @@
conv = PURPLE_CHAT_CONVERSATION(bnode->conv.conv);
} else {
PurpleConversation *chat_conv;
+ PurpleConversationManager *manager;
char *chat_name;
+
if (protocol && PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, get_name)) {
chat_name = purple_protocol_chat_get_name(PURPLE_PROTOCOL_CHAT(protocol),
purple_chat_get_components(chat));
@@ -3283,8 +3290,9 @@
chat_name = g_strdup(purple_chat_get_name(chat));
}
- chat_conv = purple_conversations_find_chat_with_account(chat_name,
- account);
+ manager = purple_conversation_manager_get_default();
+ chat_conv = purple_conversation_manager_find_chat(manager, account,
+ chat_name);
g_free(chat_name);
if(PURPLE_IS_CHAT_CONVERSATION(chat_conv)) {
@@ -6005,6 +6013,8 @@
if (resp == GTK_RESPONSE_OK)
{
+ PurpleConversationManager *manager;
+
who = gtk_entry_get_text(GTK_ENTRY(data->entry));
grp = pidgin_text_combo_box_entry_get_text(data->combo);
whoalias = gtk_entry_get_text(GTK_ENTRY(data->entry_for_alias));
@@ -6059,11 +6069,14 @@
* Or something. --Mark
*/
- im = purple_conversations_find_im_with_account(who, data->rq_data.account);
- if (im != NULL) {
+ manager = purple_conversation_manager_get_default();
+ im = purple_conversation_manager_find_im(manager, data->rq_data.account,
+ who);
+ if(PURPLE_IS_IM_CONVERSATION(im)) {
icon = purple_im_conversation_get_icon(PURPLE_IM_CONVERSATION(im));
- if (icon != NULL)
+ if(icon != NULL) {
purple_buddy_icon_update(icon);
+ }
}
}
--- a/pidgin/gtkconv.c Mon Jun 14 22:18:20 2021 -0500
+++ b/pidgin/gtkconv.c Mon Jun 14 23:00:10 2021 -0500
@@ -1732,8 +1732,17 @@
gboolean hidden_only,
guint max_count)
{
- return pidgin_conversations_get_unseen(purple_conversations_get_all(),
- min_state, hidden_only, max_count);
+ PurpleConversationManager *manager;
+ GList *list, *ret = NULL;
+
+ manager = purple_conversation_manager_get_default();
+ list = purple_conversation_manager_get_all(manager);
+
+ ret = pidgin_conversations_get_unseen(list, min_state, hidden_only,
+ max_count);
+ g_list_free(list);
+
+ return ret;
}
static void
@@ -3215,9 +3224,15 @@
for (bn = purple_blist_node_get_first_child(cn); bn; bn = purple_blist_node_get_sibling_next(bn)) {
PurpleBuddy *b = PURPLE_BUDDY(bn);
PurpleConversation *im;
- if ((im = purple_conversations_find_im_with_account(purple_buddy_get_name(b), purple_buddy_get_account(b)))) {
- if (PIDGIN_CONVERSATION(im))
- return PIDGIN_CONVERSATION(im);
+ PurpleConversationManager *manager;
+
+ manager = purple_conversation_manager_get_default();
+ im = purple_conversation_manager_find_im(manager,
+ purple_buddy_get_account(b),
+ purple_buddy_get_name(b));
+
+ if(PIDGIN_CONVERSATION(im)) {
+ return PIDGIN_CONVERSATION(im);
}
}
@@ -4280,22 +4295,31 @@
close_on_tabs_pref_cb(const char *name, PurplePrefType type,
gconstpointer value, gpointer data)
{
- GList *l;
+ GList *list;
PurpleConversation *conv;
+ PurpleConversationManager *manager;
PidginConversation *gtkconv;
- for (l = purple_conversations_get_all(); l != NULL; l = l->next) {
- conv = (PurpleConversation *)l->data;
-
- if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv))
+ manager = purple_conversation_manager_get_default();
+ list = purple_conversation_manager_get_all(manager);
+ while(list != NULL) {
+ conv = PURPLE_CONVERSATION(list->data);
+
+ if(!PIDGIN_IS_PIDGIN_CONVERSATION(conv)) {
+ list = g_list_delete_link(list, list);
+
continue;
+ }
gtkconv = PIDGIN_CONVERSATION(conv);
- if (value)
+ if(value) {
gtk_widget_show(gtkconv->close);
- else
+ } else {
gtk_widget_hide(gtkconv->close);
+ }
+
+ list = g_list_delete_link(list, list);
}
}
@@ -4322,18 +4346,23 @@
show_formatting_toolbar_pref_cb(const char *name, PurplePrefType type,
gconstpointer value, gpointer data)
{
- GList *l;
+ GList *list;
PurpleConversation *conv;
+ PurpleConversationManager *manager;
PidginConversation *gtkconv;
PidginConvWindow *win;
gboolean visible = (gboolean)GPOINTER_TO_INT(value);
- for (l = purple_conversations_get_all(); l != NULL; l = l->next)
- {
- conv = (PurpleConversation *)l->data;
-
- if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv))
+ manager = purple_conversation_manager_get_default();
+ list = purple_conversation_manager_get_all(manager);
+ while(list != NULL) {
+ conv = PURPLE_CONVERSATION(list->data);
+
+ if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv)) {
+ list = g_list_delete_link(list, list);
+
continue;
+ }
gtkconv = PIDGIN_CONVERSATION(conv);
win = gtkconv->win;
@@ -4344,6 +4373,8 @@
);
talkatu_editor_set_toolbar_visible(TALKATU_EDITOR(gtkconv->editor), visible);
+
+ list = g_list_delete_link(list, list);
}
}
@@ -4426,9 +4457,15 @@
{
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)
+ 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)) {
return PIDGIN_CONVERSATION(im);
+ }
}
return NULL;
}
@@ -4436,11 +4473,14 @@
static void
account_signed_off_cb(PurpleConnection *gc, gpointer event)
{
- GList *iter;
-
- for (iter = purple_conversations_get_all(); iter; iter = iter->next)
- {
- PurpleConversation *conv = iter->data;
+ PurpleConversationManager *manager;
+ GList *list;
+
+ manager = purple_conversation_manager_get_default();
+ list = purple_conversation_manager_get_all(manager);
+
+ while(list != NULL) {
+ PurpleConversation *conv = PURPLE_CONVERSATION(list->data);
/* This seems fine in theory, but we also need to cover the
* case of this account matching one of the other buddies in
@@ -4466,15 +4506,21 @@
if (chat == NULL && comps != NULL)
g_hash_table_destroy(comps);
}
+
+ list = g_list_delete_link(list, list);
}
}
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) {
@@ -4534,20 +4580,31 @@
update_buddy_idle_changed(PurpleBuddy *buddy, gboolean old, gboolean newidle)
{
PurpleConversation *im;
-
- im = purple_conversations_find_im_with_account(purple_buddy_get_name(buddy), purple_buddy_get_account(buddy));
- if (im)
+ 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)) {
pidgin_conv_update_fields(im, PIDGIN_CONV_TAB_ICON);
+ }
}
static void
update_buddy_icon(PurpleBuddy *buddy)
{
PurpleConversation *im;
-
- im = purple_conversations_find_im_with_account(purple_buddy_get_name(buddy), purple_buddy_get_account(buddy));
- if (im)
+ 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)) {
pidgin_conv_update_fields(im, PIDGIN_CONV_BUDDY_ICON);
+ }
}
static void
@@ -4580,15 +4637,19 @@
update_buddy_typing(PurpleAccount *account, const char *who)
{
PurpleConversation *conv;
+ PurpleConversationManager *manager;
PidginConversation *gtkconv;
- conv = PURPLE_CONVERSATION(purple_conversations_find_im_with_account(who, account));
- if (!conv)
+ manager = purple_conversation_manager_get_default();
+ conv = purple_conversation_manager_find_im(manager, account, who);
+ if(!PURPLE_IS_CONVERSATION(conv)) {
return;
+ }
gtkconv = PIDGIN_CONVERSATION(conv);
- if (gtkconv && gtkconv->active_conv == conv)
+ if(gtkconv && gtkconv->active_conv == conv) {
pidgin_conv_update_fields(conv, PIDGIN_CONV_COLORIZE_TITLE);
+ }
}
static void
@@ -4724,10 +4785,17 @@
GDateTime *dt = NULL;
if (PURPLE_IS_IM_CONVERSATION(conv)) {
+ PurpleConversationManager *manager;
GList *convs;
+
list = g_list_copy(list);
- for (convs = purple_conversations_get_all(); convs; convs = convs->next) {
+ manager = purple_conversation_manager_get_default();
+ convs = purple_conversation_manager_get_all(manager);
+
+ while(convs != NULL) {
if(!PURPLE_IS_IM_CONVERSATION(convs->data)) {
+ convs = g_list_delete_link(convs, convs);
+
continue;
}
if (convs->data != conv &&
@@ -4735,6 +4803,8 @@
pidgin_conv_attach(convs->data);
list = g_list_concat(list, g_list_copy(purple_conversation_get_message_history(convs->data)));
}
+
+ convs = g_list_delete_link(convs, convs);
}
list = g_list_sort(list, (GCompareFunc)message_compare);
gtkconv->attach_current = list;
--- a/pidgin/gtkdialogs.c Mon Jun 14 22:18:20 2021 -0500
+++ b/pidgin/gtkdialogs.c Mon Jun 14 23:00:10 2021 -0500
@@ -322,14 +322,17 @@
pidgin_dialogs_im_with_user(PurpleAccount *account, const char *username)
{
PurpleConversation *im;
+ PurpleConversationManager *manager;
g_return_if_fail(account != NULL);
g_return_if_fail(username != NULL);
- 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 (im == NULL)
+ if(!PURPLE_IS_IM_CONVERSATION(im)) {
im = purple_im_conversation_new(account, username);
+ }
pidgin_conv_attach_to_conversation(im);
purple_conversation_present(im);
--- a/pidgin/gtkmedia.c Mon Jun 14 22:18:20 2021 -0500
+++ b/pidgin/gtkmedia.c Mon Jun 14 23:00:10 2021 -0500
@@ -511,32 +511,46 @@
static void
pidgin_media_emit_message(PidginMedia *gtkmedia, const char *msg)
{
- PurpleAccount *account = purple_media_get_account(
- gtkmedia->priv->media);
- PurpleConversation *conv = purple_conversations_find_with_account(
- gtkmedia->priv->screenname, account);
- if (conv != NULL)
+ PurpleConversation *conv;
+ PurpleConversationManager *manager;
+ PurpleAccount *account;
+
+ account = purple_media_get_account(gtkmedia->priv->media);
+ manager = purple_conversation_manager_get_default();
+ conv = purple_conversation_manager_find(manager, account,
+ gtkmedia->priv->screenname);
+
+ if(PURPLE_IS_CONVERSATION(conv)) {
purple_conversation_write_system_message(conv, msg, 0);
+ }
+
g_object_unref(account);
}
static void
-pidgin_media_error_cb(PidginMedia *media, const char *error, PidginMedia *gtkmedia)
+pidgin_media_error_cb(PidginMedia *media, const gchar *error,
+ PidginMedia *gtkmedia)
{
- PurpleAccount *account = purple_media_get_account(
- gtkmedia->priv->media);
- PurpleConversation *conv = purple_conversations_find_with_account(
- gtkmedia->priv->screenname, account);
- if (conv != NULL) {
- purple_conversation_write_system_message(
- conv, error, PURPLE_MESSAGE_ERROR);
+ PurpleConversation *conv;
+ PurpleConversationManager *manager;
+ PurpleAccount *account;
+
+ account = purple_media_get_account(gtkmedia->priv->media);
+ manager = purple_conversation_manager_get_default();
+ conv = purple_conversation_manager_find(manager, account,
+ gtkmedia->priv->screenname);
+
+ if(PURPLE_IS_CONVERSATION(conv)) {
+ purple_conversation_write_system_message(conv, error,
+ PURPLE_MESSAGE_ERROR);
} else {
purple_notify_error(NULL, NULL, _("Media error"), error,
- purple_request_cpar_from_conversation(conv));
+ purple_request_cpar_from_conversation(conv));
}
gtk_statusbar_push(GTK_STATUSBAR(gtkmedia->priv->statusbar),
- 0, error);
+ 0, error);
+
g_object_unref(account);
}
--- a/pidgin/pidgincommands.c Mon Jun 14 22:18:20 2021 -0500
+++ b/pidgin/pidgincommands.c Mon Jun 14 23:00:10 2021 -0500
@@ -137,9 +137,19 @@
clearall_command_cb(PurpleConversation *conv,
const char *cmd, char **args, char **error, void *data)
{
- GList *l;
- for (l = purple_conversations_get_all(); l != NULL; l = l->next)
- purple_conversation_clear_message_history(PURPLE_CONVERSATION(l->data));
+ PurpleConversationManager *manager;
+ GList *list;
+
+ manager = purple_conversation_manager_get_default();
+ list = purple_conversation_manager_get_all(manager);
+
+ while(list != NULL) {
+ PurpleConversation *conv = PURPLE_CONVERSATION(list->data);
+
+ purple_conversation_clear_message_history(conv);
+
+ list = g_list_delete_link(list, list);
+ }
return PURPLE_CMD_RET_OK;
}
--- a/pidgin/plugins/gestures/gestures.c Mon Jun 14 22:18:20 2021 -0500
+++ b/pidgin/plugins/gestures/gestures.c Mon Jun 14 23:00:10 2021 -0500
@@ -243,7 +243,8 @@
gestures_load(GPluginPlugin *plugin, GError **error)
{
PurpleConversation *conv;
- GList *l;
+ PurpleConversationManager *manager;
+ GList *list;
purple_prefs_add_none("/plugins/gtk");
purple_prefs_add_none("/plugins/gtk/X11");
@@ -255,13 +256,20 @@
gstroke_set_draw_strokes(purple_prefs_get_bool(
"/plugins/gtk/X11/gestures/visual"));
- for (l = purple_conversations_get_all(); l != NULL; l = l->next) {
- conv = (PurpleConversation *)l->data;
+ manager = purple_conversation_manager_get_default();
+ list = purple_conversation_manager_get_all(manager);
+ while(list != NULL) {
+ conv = PURPLE_CONVERSATION(list->data);
- if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv))
+ if(!PIDGIN_IS_PIDGIN_CONVERSATION(conv)) {
+ list = g_list_delete_link(list, list);
+
continue;
+ }
attach_signals(conv);
+
+ list = g_list_delete_link(list, list);
}
purple_signal_connect(purple_conversations_get_handle(),
@@ -275,19 +283,28 @@
gestures_unload(GPluginPlugin *plugin, GError **error)
{
PurpleConversation *conv;
+ PurpleConversationManager *manager;
PidginConversation *gtkconv;
- GList *l;
+ GList *list;
+
+ manager = purple_conversation_manager_get_default();
+ list = purple_conversation_manager_get_all(manager);
- for (l = purple_conversations_get_all(); l != NULL; l = l->next) {
- conv = (PurpleConversation *)l->data;
+ while(list != NULL) {
+ conv = PURPLE_CONVERSATION(list->data);
- if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv))
+ if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv)) {
+ list = g_list_delete_link(list, list);
+
continue;
+ }
gtkconv = PIDGIN_CONVERSATION(conv);
gstroke_cleanup(gtkconv->history);
gstroke_disable(gtkconv->history);
+
+ list = g_list_delete_link(list, list);
}
return TRUE;