/soc/2015/koosha/main: cc6d6c1ffe6b: XEP-0280: do not auto reply...

Koosha Khajehmoogahi <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: cc6d6c1ffe6be77151224b3cd9cdd8652e94670d
Author:	 Koosha Khajehmoogahi <[email protected]>
Date:	 2015-08-04 19:09 +0200
Branch:	 default
URL: https://hg.pidgin.im/soc/2015/koosha/main/rev/cc6d6c1ffe6b

Description:

XEP-0280: do not auto reply on receiving forwarded messages

diffstat:

 libpurple/conversation.h             |  2 +-
 libpurple/protocols/jabber/message.c |  7 ++++++-
 libpurple/protocols/jabber/message.h |  3 ++-
 libpurple/server.c                   |  2 ++
 4 files changed, 11 insertions(+), 3 deletions(-)

diffs (85 lines):

diff --git a/libpurple/conversation.h b/libpurple/conversation.h
--- a/libpurple/conversation.h
+++ b/libpurple/conversation.h
@@ -130,7 +130,7 @@ typedef enum /*< flags >*/
 	PURPLE_MESSAGE_NICK         = 1 << 5,
 	PURPLE_MESSAGE_NO_LOG       = 1 << 6,
 	PURPLE_MESSAGE_REPLACE_LAST = 1 << 7,
-	/* The gap here is for backward compatibility with the old code */
+	PURPLE_MESSAGE_FORWARDED    = 1 << 8,
 	PURPLE_MESSAGE_ERROR        = 1 << 9,
 	PURPLE_MESSAGE_DELAYED      = 1 << 10,
 	PURPLE_MESSAGE_RAW          = 1 << 11,
diff --git a/libpurple/protocols/jabber/message.c b/libpurple/protocols/jabber/message.c
--- a/libpurple/protocols/jabber/message.c
+++ b/libpurple/protocols/jabber/message.c
@@ -231,6 +231,9 @@ static void handle_chat(JabberMessage *j
 			g_free(tmp);
 		}
 
+		if (jm->forwarded)
+			flags |= PURPLE_MESSAGE_FORWARDED;
+
 		flags |= jm->outgoing ? PURPLE_MESSAGE_SEND : PURPLE_MESSAGE_RECV;
 		purple_serv_got_im(gc, contact, jm->xhtml ? jm->xhtml : jm->body, flags, jm->sent);
 	}
@@ -628,7 +631,7 @@ void jabber_message_parse(JabberStream *
 	JabberMessage *jm;
 	const char *id, *from, *to, *type;
 	PurpleXmlNode *child;
-	gboolean signal_return, is_outgoing = FALSE;
+	gboolean signal_return, is_outgoing = FALSE, is_forwarded = FALSE;
 	time_t message_timestamp = time(NULL);
 	gboolean delayed = FALSE;
 
@@ -650,6 +653,7 @@ void jabber_message_parse(JabberStream *
 					received : sent, "forwarded", NS_FORWARD);
 
 			if (forwarded) {
+				is_forwarded = TRUE;
 				PurpleXmlNode *message = purple_xmlnode_get_child_with_namespace(forwarded, "message", NS_XMPP_CLIENT);
 				PurpleXmlNode *delay = purple_xmlnode_get_child_with_namespace(forwarded, "delay", NS_DELAYED_DELIVERY);
 
@@ -686,6 +690,7 @@ void jabber_message_parse(JabberStream *
 	jm->delayed = delayed;
 	jm->receipt = FALSE;
 	jm->chat_state = JM_STATE_NONE;
+	jm->forwarded = is_forwarded;
 	jm->outgoing = is_outgoing;
 
 	if(type) {
diff --git a/libpurple/protocols/jabber/message.h b/libpurple/protocols/jabber/message.h
--- a/libpurple/protocols/jabber/message.h
+++ b/libpurple/protocols/jabber/message.h
@@ -42,10 +42,11 @@ typedef struct _JabberMessage {
 	} type;
 	time_t sent;
 	gboolean delayed;
+	gboolean forwarded;
 	gboolean hasBuzz;
+	gboolean outgoing;
 	gboolean receipt;
 	gboolean replace_last;
-	gboolean outgoing;
 	char *id;
 	char *from;
 	char *to;
diff --git a/libpurple/server.c b/libpurple/server.c
--- a/libpurple/server.c
+++ b/libpurple/server.c
@@ -545,6 +545,7 @@ void purple_serv_got_im(PurpleConnection
 	 *  - it's not supported on this connection
 	 *  - we are available
 	 *  - or it's disabled
+	 *  - or the received message is a forwarded one that was originally sent to another client
 	 *  - or we're not idle and the 'only auto respond if idle' pref
 	 *    is set
 	 */
@@ -569,6 +570,7 @@ void purple_serv_got_im(PurpleConnection
 			(primitive == PURPLE_STATUS_INVISIBLE) ||
 			mobile ||
 		    purple_strequal(auto_reply_pref, "never") ||
+		    (flags & PURPLE_MESSAGE_FORWARDED) ||
 		    (!purple_presence_is_idle(presence) && purple_strequal(auto_reply_pref, "awayidle")))
 		{
 			g_free(name);

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
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.