diff src/buddy_chat.c @ 2374:9e9385cddcc6

[gaim-migrate @ 2387] i need to go to class. but just because i need to do something doesn't mean i will, especially when what i need to do is related to school. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Thu, 27 Sep 2001 20:32:59 +0000
parents 2927c2c26fe6
children 05034cd0402b
line wrap: on
line diff
--- a/src/buddy_chat.c	Thu Sep 27 19:27:52 2001 +0000
+++ b/src/buddy_chat.c	Thu Sep 27 20:32:59 2001 +0000
@@ -25,6 +25,7 @@
 #include <string.h>
 #include <sys/time.h>
 #include <unistd.h>
+#include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <gtk/gtk.h>
@@ -469,6 +470,46 @@
 		return FALSE;
 }
 
+static gboolean find_nick(struct gaim_connection *gc, char *message)
+{
+	char *msg = g_strdup(message), *who, *p;
+	int n;
+	g_strdown(msg);
+
+	who = g_strdup(gc->username);
+	n = strlen(who);
+	g_strdown(who);
+
+	if ((p = strstr(msg, who)) != NULL) {
+		if ((p == msg) || (!isalnum(*(p - 1)) && !isalnum(*(p + n)))) {
+			g_free(who);
+			g_free(msg);
+			return TRUE;
+		}
+	}
+	g_free(who);
+
+	if (g_strcasecmp(gc->username, gc->displayname)) {
+		g_free(msg);
+		return FALSE;
+	}
+
+	who = g_strdup(gc->displayname);
+	n = strlen(who);
+	g_strdown(who);
+
+	if ((p = strstr(msg, who)) != NULL) {
+		if ((p == msg) || (!isalnum(*(p - 1)) && !isalnum(*(p + n)))) {
+			g_free(who);
+			g_free(msg);
+			return TRUE;
+		}
+	}
+	g_free(who);
+	g_free(msg);
+	return FALSE;
+}
+
 void chat_write(struct conversation *b, char *who, int flag, char *message, time_t mtime)
 {
 	GList *ignore = b->ignored;
@@ -488,11 +529,11 @@
 
 	if (!(flag & WFLAG_WHISPER)) {
 		str = g_strdup(normalize (who));
-		if (!g_strcasecmp(str, normalize (b->gc->username))) {
+		if (!g_strcasecmp(str, normalize(b->gc->username))) {
 			if (b->makesound && (sound_options & OPT_SOUND_CHAT_YOU_SAY))
 				play_sound(CHAT_YOU_SAY);
 			flag |= WFLAG_SEND;
-		} else if (!g_strcasecmp(str, normalize (b->gc->displayname))) {
+		} else if (!g_strcasecmp(str, normalize(b->gc->displayname))) {
 			if (b->makesound && (sound_options & OPT_SOUND_CHAT_YOU_SAY))
 				play_sound(CHAT_YOU_SAY);
 			flag |= WFLAG_SEND;
@@ -504,6 +545,9 @@
 		g_free(str);
 	}
 
+	if ((flag & WFLAG_RECV) && find_nick(b->gc, message))
+		flag |= WFLAG_NICK;
+
 	write_to_conv(b, message, flag, who, mtime);
 }