/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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.