[ekg2-commit] r3914 - trunk/ekg: trunk/ekg/protocol.c trunk/ekg/stuff.c trunk/ekg/stuff.h trunk/ekg/themes.c trunk/ekg/vars.c

SVN commit svn w toxygen.net
Śro, 19 Mar 2008, 18:09:03 CET


Author: peres
Date: 2008-03-19 18:09:02 +0100 (Wed, 19 Mar 2008)
New Revision: 3914

Modified:
   trunk/ekg/protocol.c
   trunk/ekg/stuff.c
   trunk/ekg/stuff.h
   trunk/ekg/themes.c
   trunk/ekg/vars.c
Log:

Simple, protocol-independent /me display support.

TODO: some variable to disable/enable? session-defined behavior?



Modified: trunk/ekg/protocol.c
===================================================================
--- trunk/ekg/protocol.c	2008-03-18 00:30:40 UTC (rev 3913)
+++ trunk/ekg/protocol.c	2008-03-19 17:09:02 UTC (rev 3914)
@@ -484,13 +484,13 @@
  */
 char *message_print(const char *session, const char *sender, const char **rcpts, const char *__text, const uint32_t *format, time_t sent, int class, const char *seq, int dobeep, int secure)
 {
-	char *class_str, timestamp[100], *text = xstrdup(__text), *emotted = NULL;
+	char *class_str, timestamp[100], *text = xstrdup(__text);
 	char *securestr = NULL;
 	const char *target = sender, *user;
         time_t now;
 	session_t *s = session_find(session);
         struct conference *c = NULL;
-	int empty_theme = 0;
+	int empty_theme = 0, is_me = 0;
 
 	if (class & EKG_NO_THEMEBIT) {
 		empty_theme = 1;
@@ -500,11 +500,19 @@
 	switch (class) {
 		case EKG_MSGCLASS_SENT:
 		case EKG_MSGCLASS_SENT_CHAT:
-			class_str = "sent";
+			if (/*config_display_me && */ !xstrncmp(text, "/me ", 4)) {
+				class_str = "sent_me";
+				is_me = 1;
+			} else
+				class_str = "sent";
 			target = (rcpts) ? rcpts[0] : NULL;
 			break;
 		case EKG_MSGCLASS_CHAT:
-			class_str = "chat";
+			if (/*config_display_me && */ !xstrncmp(text, "/me ", 4)) {
+				class_str = "chat_me";
+				is_me = 1;
+			} else
+				class_str = "chat";
 			break;
 		case EKG_MSGCLASS_SYSTEM:
 			class_str = "system";
@@ -654,13 +662,16 @@
 	} else if (class == EKG_MSGCLASS_SYSTEM && config_sound_sysmsg_file)
 			play_sound(config_sound_sysmsg_file);
 	
-        if (config_last & 3 && xstrcmp(class_str, "sent")) 
+        if (config_last & 3 && (class < EKG_MSGCLASS_SENT))
 	        last_add(0, sender, now, sent, text);
 	
 	user = (class < EKG_MSGCLASS_SENT) ? format_user(s, sender) : session_format_n(sender);
 
-	if (config_emoticons && text)
-		emotted = emoticon_expand(text);
+	if (config_emoticons && text) {
+		char *tmp = emoticon_expand(text);
+		xfree(text);
+		text = tmp;
+	}
 
 	if (empty_theme)
 		class_str = "empty";
@@ -672,18 +683,19 @@
 		((class == EKG_MSGCLASS_LOG || class == EKG_MSGCLASS_SENT_LOG) ? 2
 		: (class == EKG_MSGCLASS_CHAT || class == EKG_MSGCLASS_SENT_CHAT)
 		|| (!(config_make_window & 4) && (class == EKG_MSGCLASS_MESSAGE || class == EKG_MSGCLASS_SENT))),
-		class_str, 
-		user, 
-		timestamp, 
-		(emotted) ? emotted : text, 
+		class_str,
+		user,
+		timestamp,
+		(is_me ? text+4 : text),
 					/* XXX, get_uid() get_nickname() */
-		(class >= EKG_MSGCLASS_SENT ? session_alias_uid(s) : get_nickname(s, sender)), 
+		(class >= EKG_MSGCLASS_SENT ?
+			(is_me && config_me_nick ? config_me_nick : session_alias_uid(s))
+			: get_nickname(s, sender)),
 		(class >= EKG_MSGCLASS_SENT ? s->uid : get_uid(s, sender)), 
 		(secure ? securestr : ""));
 
 	xfree(text);
 	xfree(securestr);
-	xfree(emotted);
 	return xstrdup(target);
 }
 

Modified: trunk/ekg/stuff.c
===================================================================
--- trunk/ekg/stuff.c	2008-03-18 00:30:40 UTC (rev 3913)
+++ trunk/ekg/stuff.c	2008-03-19 17:09:02 UTC (rev 3914)
@@ -168,6 +168,7 @@
 int config_version = 0;
 char *config_exit_exec = NULL;
 int config_session_locks = 0;
+char *config_me_nick = NULL;
 
 char *last_search_first_name = NULL;
 char *last_search_last_name = NULL;

Modified: trunk/ekg/stuff.h
===================================================================
--- trunk/ekg/stuff.h	2008-03-18 00:30:40 UTC (rev 3913)
+++ trunk/ekg/stuff.h	2008-03-19 17:09:02 UTC (rev 3914)
@@ -260,6 +260,7 @@
 extern int config_version;
 extern char *config_exit_exec;
 extern int config_session_locks;
+extern char *config_me_nick;
 
 extern char *home_dir;
 extern char *config_dir;

Modified: trunk/ekg/themes.c
===================================================================
--- trunk/ekg/themes.c	2008-03-18 00:30:40 UTC (rev 3913)
+++ trunk/ekg/themes.c	2008-03-19 17:09:02 UTC (rev 3914)
@@ -1449,12 +1449,14 @@
 	format_add("confrence,speech", _("message from %1: %3."), 1);
 
 	format_add("chat", "%c.-- %n%1 %c%2%n%6%n%c--- -- -%n\n%c|%n %|%3%n\n%|%c`----- ---- --- -- -%n\n", 1);
+	format_add("chat_me", "%) %|%C%4%n %3\n", 1);
 	format_add("chat_timestamp", "(%Y-%m-%d %H:%M) ", 1);
 	format_add("chat_timestamp_today", "(%H:%M) ", 1);
 	format_add("chat_timestamp_now", "", 1);
 	format_add("chat,speech", _("message from %1: %3."), 1);
 
 	format_add("sent", "%b.-- %n%1 %c%2%n%6%n%b--- -- -%n\n%b|%n %|%3%n\n%|%b`----- ---- --- -- -%n\n", 1);
+	format_add("sent_me", "%> %|%G%4%n %3\n", 1);
 	format_add("sent_timestamp", "(%Y-%m-%d %H:%M) ", 1);
 	format_add("sent_timestamp_today", "(%H:%M) ", 1);
 	format_add("sent_timestamp_now", "", 1);

Modified: trunk/ekg/vars.c
===================================================================
--- trunk/ekg/vars.c	2008-03-18 00:30:40 UTC (rev 3913)
+++ trunk/ekg/vars.c	2008-03-19 17:09:02 UTC (rev 3914)
@@ -113,6 +113,7 @@
 			2, 1, "all windows + configured"), NULL);
 	variable_add(NULL, ("lastlog_matchcase"), VAR_BOOL, 1, &config_lastlog_case, NULL, NULL, NULL);
 	variable_add(NULL, ("lastlog_noitems"), VAR_BOOL, 1, &config_lastlog_noitems, NULL, NULL, NULL);
+	variable_add(NULL, ("me_nickname"), VAR_STR, 1, &config_me_nick, NULL, NULL, NULL);
 	variable_add(NULL, ("make_window"), VAR_MAP, 1, &config_make_window, changed_make_window, variable_map(4, 0, 0, "none", 1, 2, "usefree", 2, 1, "always", 4, 0, "chatonly"), NULL);
 	variable_add(NULL, ("mesg"), VAR_INT, 1, &config_mesg, changed_mesg, variable_map(3, 0, 0, "no", 1, 2, "yes", 2, 1, "default"), NULL);
 	variable_add(NULL, ("query_commands"), VAR_BOOL, 1, &config_query_commands, NULL, NULL, NULL);



Więcej informacji o liście dyskusyjnej ekg2-commit