pidgin.2.x.y: 132d9cb6: changelog WHO fix

elb at pidgin.im elb at pidgin.im
Thu May 3 09:24:17 EDT 2012


----------------------------------------------------------------------
Revision: 132d9cb629620d7653e479a7b0cea75f35b2abdf
Parent:   b9fd37553a90f47c560be425179d044468a21f96
Author:   elb at pidgin.im
Date:     05/03/12 09:14:51
Branch:   im.pidgin.pidgin.2.x.y
URL: http://d.pidgin.im/viewmtn/revision/info/132d9cb629620d7653e479a7b0cea75f35b2abdf

Changelog: 

changelog WHO fix

Changes against parent b9fd37553a90f47c560be425179d044468a21f96

  patched  ChangeLog
  patched  libpurple/protocols/irc/msgs.c

-------------- next part --------------
============================================================
--- ChangeLog	2b793a94c12e0dfc03a8125d862702380d56b730
+++ ChangeLog	d5a35afc538d75ad049329bd2c993ee0232c0a7a
@@ -1,7 +1,10 @@ version 2.10.4:
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
 version 2.10.4:
-	TODO
+	IRC:
+	* Disable periodic WHO timer.  IRC channel user lists will no
+	  longer automatically display away status, but libpurple will be
+	  much kinder to the network.
 
 version 2.10.3 (03/26/2012):
 	MSN:
============================================================
--- libpurple/protocols/irc/msgs.c	1a8b5b3acaa301d0e3fefb1fbd8e9abe5dc81253
+++ libpurple/protocols/irc/msgs.c	ad656d776f172c9d3cdd0c733f0a5c62e7b2152c
@@ -112,13 +112,64 @@ static void irc_connected(struct irc_con
 		irc->timer = purple_timeout_add_seconds(45, (GSourceFunc)irc_blist_timeout, (gpointer)irc);
 }
 
+/* This function is ugly, but it's really an error handler. */
 void irc_msg_default(struct irc_conn *irc, const char *name, const char *from, char **args)
 {
-	char *clean;
+	int i, directed_magic = TRUE;
+	char *convname, *end, *tmp, *cur;
+	PurpleConversation *convo;
+
+	for (cur = args[0], i = 0; i < 4; i++) {
+		end = strchr(cur, ' ');
+		if (cur == NULL) {
+			goto undirected;
+		}
+		/* Check for 3-digit numeric in second position */
+		if (i == 1 && (end - cur != 3
+			       || !isdigit(cur[0]) || !isdigit(cur[1])
+			       || !isdigit(cur[2]))) {
+			goto undirected;
+		}
+		/* Hack! */
+		if (i != 3) {
+			cur = end + 1;
+		}
+	}
+
+	/* At this point, cur is the beginning of the fourth position,
+	 * end is the following space, and there are remaining
+	 * arguments.  We'll check to see if this argument is a
+	 * currently active conversation (private message or channel,
+	 * either one), and print the numeric to that conversation if it
+	 * is. */
+
+	tmp = g_strndup(cur, end - cur);
+	convname = purple_utf8_salvage(tmp);
+	g_free(tmp);
+
+	/* Check for an existing conversation */
+	convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY,
+						      convname,
+						      irc->account);
+	g_free(convname);
+
+	if (convo == NULL) {
+		goto undirected;
+	}
+
+	tmp = purple_utf8_salvage(args[0]);
+	purple_conversation_write(convo, "", tmp,
+				  PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG
+				  |PURPLE_MESSAGE_RAW|PURPLE_MESSAGE_NO_LINKIFY,
+				  time(NULL));
+	g_free(tmp);
+	return;
+
+  undirected:
 	/* This, too, should be escaped somehow (smarter) */
-	clean = purple_utf8_salvage(args[0]);
-	purple_debug(PURPLE_DEBUG_INFO, "irc", "Unrecognized message: %s\n", clean);
-	g_free(clean);
+	tmp = purple_utf8_salvage(args[0]);
+	purple_debug(PURPLE_DEBUG_INFO, "irc", "Unrecognized message: %s\n", tmp);
+	g_free(tmp);
 }
 
 void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args)


More information about the Commits mailing list