/pidgin/main: 69b4fce85ffa: Switch _purple_conversation_write_co...
Tomasz Wasilczyk <[email protected]>
| Newsgroups | gmane.comp.gnome.gaim.cvs |
|---|---|
| Message-ID | <[email protected]> |
Changeset: 69b4fce85ffa00d737d5293df7660c351c3bffce Author: Tomasz Wasilczyk <[email protected]> Date: 2014-06-12 18:45 +0200 Branch: default URL: https://hg.pidgin.im/pidgin/main/rev/69b4fce85ffa Description: Switch _purple_conversation_write_common and (writing|wrote)-(chat|im)-msg to PurpleMessage diffstat: finch/plugins/gnttinyurl.c | 9 ++- libpurple/conversation.c | 88 ++++++++++++++++++++--------------- libpurple/conversations.c | 22 +++----- libpurple/conversationtypes.c | 27 ++++------ libpurple/internal.h | 11 +--- libpurple/message.c | 3 + libpurple/plugins/signals-test.c | 14 ++-- libpurple/protocols/jabber/message.c | 2 +- libpurple/server.c | 7 ++- pidgin/gtkblist.c | 16 ++++-- pidgin/gtkconv.c | 11 +++- 11 files changed, 113 insertions(+), 97 deletions(-) diffs (truncated from 467 to 300 lines): diff --git a/finch/plugins/gnttinyurl.c b/finch/plugins/gnttinyurl.c --- a/finch/plugins/gnttinyurl.c +++ b/finch/plugins/gnttinyurl.c @@ -297,13 +297,16 @@ static gboolean writing_msg(PurpleAccoun return FALSE; } -static void wrote_msg(PurpleAccount *account, char *sender, char *message, - PurpleConversation *conv, PurpleMessageFlags flags) +static void wrote_msg(PurpleConversation *conv, PurpleMessage *pmsg, + gpointer _unused) { GList *urls; + if (purple_message_get_flags(pmsg) & PURPLE_MESSAGE_SEND) + return; + urls = g_object_get_data(G_OBJECT(conv), "TinyURLs"); - if ((flags & PURPLE_MESSAGE_SEND) || urls == NULL) + if (urls == NULL) return; process_urls(conv, urls); diff --git a/libpurple/conversation.c b/libpurple/conversation.c --- a/libpurple/conversation.c +++ b/libpurple/conversation.c @@ -578,23 +578,19 @@ purple_conversation_close_logs(PurpleCon } void -_purple_conversation_write_common(PurpleConversation *conv, const char *who, - const char *message, PurpleMessageFlags flags, - time_t mtime) +_purple_conversation_write_common(PurpleConversation *conv, PurpleMessage *pmsg) { PurplePluginProtocolInfo *prpl_info = NULL; PurpleConnection *gc = NULL; PurpleAccount *account; PurpleConversationUiOps *ops; - const char *alias; - char *displayed = NULL; PurpleBuddy *b; int plugin_return; PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv); /* int logging_font_options = 0; */ - g_return_if_fail(priv != NULL); - g_return_if_fail(message != NULL); + g_return_if_fail(priv != NULL); + g_return_if_fail(pmsg != NULL); ops = purple_conversation_get_ui_ops(conv); @@ -611,25 +607,16 @@ void !g_list_find(purple_conversations_get_all(), conv)) return; - displayed = g_strdup(message); + plugin_return = GPOINTER_TO_INT(purple_signal_emit_return_1( + purple_conversations_get_handle(), + (PURPLE_IS_IM_CONVERSATION(conv) ? "writing-im-msg" : "writing-chat-msg"), + conv, pmsg)); - if (who == NULL || *who == '\0') - who = purple_conversation_get_name(conv); - alias = who; - - plugin_return = - GPOINTER_TO_INT(purple_signal_emit_return_1( - purple_conversations_get_handle(), - (PURPLE_IS_IM_CONVERSATION(conv) ? "writing-im-msg" : "writing-chat-msg"), - account, who, &displayed, conv, flags)); - - if (displayed == NULL) + if (purple_message_is_empty(pmsg)) return; - if (plugin_return) { - g_free(displayed); + if (plugin_return) return; - } if (account != NULL) { prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(account))); @@ -637,49 +624,72 @@ void if (PURPLE_IS_IM_CONVERSATION(conv) || !(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { - if (flags & PURPLE_MESSAGE_SEND) { + if (purple_message_get_flags(pmsg) & PURPLE_MESSAGE_SEND) { + const gchar *alias; + b = purple_blist_find_buddy(account, - purple_account_get_username(account)); + purple_account_get_username(account)); if (purple_account_get_private_alias(account) != NULL) alias = purple_account_get_private_alias(account); - else if (b != NULL && !purple_strequal(purple_buddy_get_name(b), purple_buddy_get_contact_alias(b))) + else if (b != NULL && !purple_strequal(purple_buddy_get_name(b), + purple_buddy_get_contact_alias(b))) + { alias = purple_buddy_get_contact_alias(b); - else if (purple_connection_get_display_name(gc) != NULL) + } else if (purple_connection_get_display_name(gc) != NULL) alias = purple_connection_get_display_name(gc); else alias = purple_account_get_username(account); + + purple_message_set_author_alias(pmsg, alias); } else { - b = purple_blist_find_buddy(account, who); + /* TODO: PurpleDude - folks not on the buddy list */ + b = purple_blist_find_buddy(account, + purple_message_get_author(pmsg)); - if (b != NULL) - alias = purple_buddy_get_contact_alias(b); + if (b != NULL) { + purple_message_set_author_alias(pmsg, + purple_buddy_get_contact_alias(b)); + } } } } - if (!(flags & PURPLE_MESSAGE_NO_LOG) && purple_conversation_is_logging(conv)) { + if (!(purple_message_get_flags(pmsg) & PURPLE_MESSAGE_NO_LOG) && purple_conversation_is_logging(conv)) { GList *log; log = priv->logs; while (log != NULL) { - purple_log_write((PurpleLog *)log->data, flags, alias, mtime, displayed); + purple_log_write((PurpleLog *)log->data, + purple_message_get_flags(pmsg), + purple_message_get_author_alias(pmsg), + purple_message_get_time(pmsg), + purple_message_get_contents(pmsg)); log = log->next; } } - if (ops && ops->write_conv) - ops->write_conv(conv, who, alias, displayed, flags, mtime); + if (ops && ops->write_conv) { + ops->write_conv(conv, + (purple_message_get_flags(pmsg) & PURPLE_MESSAGE_SEND) ? purple_message_get_recipient(pmsg) : purple_message_get_author(pmsg), + purple_message_get_author_alias(pmsg), + purple_message_get_contents(pmsg), + purple_message_get_flags(pmsg), + purple_message_get_time(pmsg)); + } - add_message_to_history(conv, who, alias, message, flags, mtime); + add_message_to_history(conv, + (purple_message_get_flags(pmsg) & PURPLE_MESSAGE_SEND) ? purple_message_get_recipient(pmsg) : purple_message_get_author(pmsg), + purple_message_get_author_alias(pmsg), + purple_message_get_contents(pmsg), + purple_message_get_flags(pmsg), + purple_message_get_time(pmsg)); purple_signal_emit(purple_conversations_get_handle(), (PURPLE_IS_IM_CONVERSATION(conv) ? "wrote-im-msg" : "wrote-chat-msg"), - account, who, displayed, conv, flags); - - g_free(displayed); + conv, pmsg); } void @@ -698,8 +708,8 @@ purple_conversation_write_message(Purple void purple_conversation_write_system_message(PurpleConversation *conv, const gchar *message, PurpleMessageFlags flags) { - _purple_conversation_write_common(conv, NULL, message, - flags | PURPLE_MESSAGE_SYSTEM, time(NULL)); + _purple_conversation_write_common(conv, + purple_message_new_system(message, flags)); } void diff --git a/libpurple/conversations.c b/libpurple/conversations.c --- a/libpurple/conversations.c +++ b/libpurple/conversations.c @@ -284,15 +284,12 @@ purple_conversations_init(void) * Register signals **********************************************************************/ purple_signal_register(handle, "writing-im-msg", - purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_UINT, - G_TYPE_BOOLEAN, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING, - G_TYPE_POINTER, /* pointer to a string */ - PURPLE_TYPE_IM_CONVERSATION, G_TYPE_UINT); + purple_marshal_BOOLEAN__POINTER_POINTER, G_TYPE_BOOLEAN, 2, + PURPLE_TYPE_IM_CONVERSATION, PURPLE_TYPE_MESSAGE); purple_signal_register(handle, "wrote-im-msg", - purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT, - G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING, - G_TYPE_STRING, PURPLE_TYPE_IM_CONVERSATION, G_TYPE_UINT); + purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, + PURPLE_TYPE_IM_CONVERSATION, PURPLE_TYPE_MESSAGE); purple_signal_register(handle, "sent-attention", purple_marshal_VOID__POINTER_POINTER_POINTER_UINT, @@ -331,15 +328,12 @@ purple_conversations_init(void) G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT); purple_signal_register(handle, "writing-chat-msg", - purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_UINT, - G_TYPE_BOOLEAN, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING, - G_TYPE_POINTER, /* pointer to a string */ - PURPLE_TYPE_CHAT_CONVERSATION, G_TYPE_UINT); + purple_marshal_BOOLEAN__POINTER_POINTER, G_TYPE_BOOLEAN, 2, + PURPLE_TYPE_IM_CONVERSATION, PURPLE_TYPE_MESSAGE); purple_signal_register(handle, "wrote-chat-msg", - purple_marshal_VOID__POINTER_POINTER_POINTER_POINTER_UINT, - G_TYPE_NONE, 5, PURPLE_TYPE_ACCOUNT, G_TYPE_STRING, - G_TYPE_STRING, PURPLE_TYPE_CHAT_CONVERSATION, G_TYPE_UINT); + purple_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, + PURPLE_TYPE_IM_CONVERSATION, PURPLE_TYPE_MESSAGE); purple_signal_register(handle, "sending-chat-msg", purple_marshal_VOID__POINTER_POINTER_UINT, G_TYPE_NONE, diff --git a/libpurple/conversationtypes.c b/libpurple/conversationtypes.c --- a/libpurple/conversationtypes.c +++ b/libpurple/conversationtypes.c @@ -55,6 +55,8 @@ struct _PurpleChatConversationPrivate char *nick; /* Your nick in this chat. */ gboolean left; /* We left the chat and kept the window open */ GHashTable *users; /* Hash table of the users in the room. */ + + gboolean is_finalizing; /* The object is being destroyed. */ }; /* Chat Property enums */ @@ -371,13 +373,8 @@ im_conversation_write_message(PurpleConv /* Pass this on to either the ops structure or the default write func. */ if (ops != NULL && ops->write_im != NULL) ops->write_im(im, msg); - else { - _purple_conversation_write_common(conv, - purple_message_get_author(msg), - purple_message_get_contents(msg), - purple_message_get_flags(msg), - purple_message_get_time(msg)); - } + else + _purple_conversation_write_common(conv, msg); } /************************************************************************** @@ -813,7 +810,7 @@ chat_conversation_write_message(PurpleCo g_return_if_fail(msg != NULL); /* Don't display this if the person who wrote it is ignored. */ - if (purple_chat_conversation_is_ignored_user( + if (purple_message_get_author(msg) && purple_chat_conversation_is_ignored_user( PURPLE_CHAT_CONVERSATION(conv), purple_message_get_author(msg))) { return; @@ -840,13 +837,8 @@ chat_conversation_write_message(PurpleCo /* Pass this on to either the ops structure or the default write func. */ if (ops != NULL && ops->write_chat != NULL) ops->write_chat(PURPLE_CHAT_CONVERSATION(conv), msg); - else { - _purple_conversation_write_common(conv, - purple_message_get_author(msg), - purple_message_get_contents(msg), - purple_message_get_flags(msg), - purple_message_get_time(msg)); - } + else + _purple_conversation_write_common(conv, msg); } void @@ -1299,7 +1291,8 @@ purple_chat_conversation_leave(PurpleCha priv->left = TRUE; - g_object_notify_by_pspec(G_OBJECT(chat), chat_properties[CHAT_PROP_LEFT]); + if (!priv->is_finalizing) + g_object_notify_by_pspec(G_OBJECT(chat), chat_properties[CHAT_PROP_LEFT]); purple_conversation_update(PURPLE_CONVERSATION(chat), PURPLE_CONVERSATION_UPDATE_CHATLEFT); } @@ -1474,6 +1467,8 @@ purple_chat_conversation_finalize(GObjec PurpleConnection *gc = purple_conversation_get_connection(PURPLE_CONVERSATION(chat)); PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat); + priv->is_finalizing = TRUE; + if (gc != NULL) { /* Still connected */ diff --git a/libpurple/internal.h b/libpurple/internal.h