# HG changeset patch # User Mikael Berthe # Date 1133565845 -3600 # Node ID 6f490c725999879d88d001668479adced2363174 # Parent 467fec046a9bcc235957c9ef107a47a866e652c4 Handle "/me " in messages diff -r 467fec046a9b -r 6f490c725999 mcabber/src/hooks.c --- a/mcabber/src/hooks.c Fri Dec 02 23:48:01 2005 +0100 +++ b/mcabber/src/hooks.c Sat Dec 03 00:24:05 2005 +0100 @@ -42,7 +42,7 @@ int log_muc_conf = FALSE; int message_flags = 0; guint rtype = ROSTER_TYPE_USER; - char *wmsg = NULL, *bmsg = NULL; + char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL; GSList *roster_usr; if (type && !strcmp(type, "groupchat")) { @@ -54,8 +54,13 @@ resname = ""; } wmsg = bmsg = g_strdup_printf("<%s> %s", resname, msg); + if (!strncmp(msg, "/me ", 4)) + wmsg = mmsg = g_strdup_printf("*%s %s", resname, msg+4); } else { - wmsg = (char*) msg; + if (!strncmp(msg, "/me ", 4)) + wmsg = mmsg = g_strdup_printf("*%s %s", jid, msg+4); + else + wmsg = (char*) msg; } // If this user isn't in the roster, we add it @@ -66,6 +71,7 @@ if (!roster_usr) { // Shouldn't happen... scr_LogPrint(LPRINT_LOGNORM, "ERROR: unable to add buddy!"); if (bmsg) g_free(bmsg); + if (mmsg) g_free(mmsg); return; } } else if (is_groupchat) { @@ -77,8 +83,11 @@ if (!is_groupchat && is_room) { // This is a private message from a room participant - if (!resname) resname = ""; + if (!resname) + resname = ""; wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", resname, msg); + if (!strncmp(msg, "/me ", 4)) + wmsg = mmsg = g_strdup_printf("PRIV#*%s %s", resname, msg+4); } if (type && !strcmp(type, "error")) { @@ -91,6 +100,10 @@ // have the message twice... scr_WriteIncomingMessage(jid, wmsg, timestamp, message_flags); + // We don't log the modified message, but the original one + if (wmsg == mmsg) + wmsg = bmsg; + // - We don't log the message if it is an error message // - We don't log the message if it is a private conf. message // - We don't log the message if it is groupchat message and the log_muc_conf @@ -116,6 +129,7 @@ } if (bmsg) g_free(bmsg); + if (mmsg) g_free(mmsg); } // hk_message_out() @@ -124,10 +138,19 @@ inline void hk_message_out(const char *jid, const char *nick, time_t timestamp, const char *msg) { - char *wmsg = NULL, *bmsg = NULL; + char *wmsg = NULL, *bmsg = NULL, *mmsg = NULL;; - if (nick) wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", nick, msg); - else wmsg = (char*)msg; + if (nick) { + wmsg = bmsg = g_strdup_printf("PRIV#<%s> %s", nick, msg); + } else { + wmsg = (char*)msg; + if (!strncmp(msg, "/me ", 4)) { + const char *myid = settings_opt_get("username"); + if (myid) + wmsg = mmsg = g_strdup_printf("*%s %s", settings_opt_get("username"), + msg+4); + } + } // Note: the hlog_write should not be called first, because in some // cases scr_WriteOutgoingMessage() will load the history and we'd @@ -141,6 +164,7 @@ hk_ext_cmd(jid, 'M', 'S', NULL); if (bmsg) g_free(bmsg); + if (mmsg) g_free(mmsg); } inline void hk_statuschange(const char *jid, const char *resname, gchar prio,