Index: src/fe-common/irc/fe-events.c =================================================================== --- src/fe-common/irc/fe-events.c (revision 4310) +++ src/fe-common/irc/fe-events.c (working copy) @@ -46,69 +46,76 @@ const char *nick, const char *addr) { char *params, *target, *msg, *recoded; + char *recoded_nick; g_return_if_fail(data != NULL); params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg); if (nick == NULL) nick = server->real_address; if (addr == NULL) addr = ""; + recoded_nick = recode_in(SERVER(server), nick, target); if (*target == '@' && ischannel(target[1])) { /* Hybrid 6 feature, send msg to all ops in channel */ recoded = recode_in(SERVER(server), msg, target+1); signal_emit("message irc op_public", 5, - server, recoded, nick, addr, + server, recoded, recoded_nick, addr, get_visible_target(server, target+1)); } else { recoded = recode_in(SERVER(server), msg, ischannel(*target) ? target : nick); signal_emit(ischannel(*target) ? "message public" : "message private", 5, - server, recoded, nick, addr, + server, recoded, recoded_nick, addr, get_visible_target(server, target)); } g_free(params); g_free(recoded); + g_free(recoded_nick); } static void ctcp_action(IRC_SERVER_REC *server, const char *data, const char *nick, const char *addr, const char *target) { - char *recoded; + char *recoded, *recoded_nick; g_return_if_fail(data != NULL); recoded = recode_in(SERVER(server), data, target); + recoded_nick = recode_in(SERVER(server), nick, target); signal_emit("message irc action", 5, - server, recoded, nick, addr, + server, recoded, recoded_nick, addr, get_visible_target(server, target)); g_free(recoded); + g_free(recoded_nick); } static void event_notice(IRC_SERVER_REC *server, const char *data, const char *nick, const char *addr) { - char *params, *target, *msg, *recoded; + char *params, *target, *msg, *recoded, *recoded_nick; g_return_if_fail(data != NULL); params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg); recoded = recode_in(SERVER(server), msg, target); + recoded_nick = recode_in(SERVER(server), nick, target); if (nick == NULL) { nick = server->real_address == NULL ? server->connrec->address : server->real_address; } - signal_emit("message irc notice", 5, server, recoded, nick, addr, + signal_emit("message irc notice", 5, server, recoded, recoded_nick, addr, get_visible_target(server, target)); g_free(params); g_free(recoded); + g_free(recoded_nick); } static void event_join(IRC_SERVER_REC *server, const char *data, const char *nick, const char *addr) { - char *params, *channel, *tmp; + char *params, *channel, *tmp, *recoded_nick; g_return_if_fail(data != NULL); @@ -116,25 +123,29 @@ tmp = strchr(channel, 7); /* ^G does something weird.. */ if (tmp != NULL) *tmp = '\0'; + recoded_nick = recode_in(SERVER(server), nick, channel); signal_emit("message join", 4, server, - get_visible_target(server, channel), nick, addr); + get_visible_target(server, channel), recoded_nick, addr); g_free(params); + g_free(recoded_nick); } static void event_part(IRC_SERVER_REC *server, const char *data, const char *nick, const char *addr) { - char *params, *channel, *reason, *recoded; + char *params, *channel, *reason, *recoded, *recoded_nick; g_return_if_fail(data != NULL); params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &channel, &reason); recoded = recode_in(SERVER(server), reason, channel); + recoded_nick = recode_in(SERVER(server), nick, channel); signal_emit("message part", 5, server, - get_visible_target(server, channel), nick, addr, recoded); + get_visible_target(server, channel), recoded_nick, addr, recoded); g_free(params); g_free(recoded); + g_free(recoded_nick); } static void event_quit(IRC_SERVER_REC *server, const char *data, @@ -149,18 +160,20 @@ static void event_kick(IRC_SERVER_REC *server, const char *data, const char *kicker, const char *addr) { - char *params, *channel, *nick, *reason, *recoded; + char *params, *channel, *nick, *reason, *recoded, *recoded_nick; g_return_if_fail(data != NULL); params = event_get_params(data, 3 | PARAM_FLAG_GETREST, &channel, &nick, &reason); recoded = recode_in(SERVER(server), reason, channel); + recoded_nick = recode_in(SERVER(server), nick, channel); signal_emit("message kick", 6, server, get_visible_target(server, channel), - nick, kicker, addr, recoded); + recoded_nick, kicker, addr, recoded); g_free(params); g_free(recoded); + g_free(recoded_nick); } static void event_kill(IRC_SERVER_REC *server, const char *data, Index: src/core/nicklist.c =================================================================== --- src/core/nicklist.c (revision 4310) +++ src/core/nicklist.c (working copy) @@ -21,6 +21,7 @@ #include "module.h" #include "signals.h" #include "misc.h" +#include "recode.h" #include "servers.h" #include "channels.h" @@ -129,6 +130,7 @@ CHANNEL_REC *channel; NICK_REC *nickrec; GSList *tmp; + char *recoded_nick; for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) { channel = tmp->data; @@ -141,7 +143,8 @@ nickrec->unique_id = new_nick_id; g_free(nickrec->nick); - nickrec->nick = g_strdup(new_nick); + /*nickrec->nick = g_strdup(new_nick);*/ + nickrec->nick = recode_in(server, new_nick, channel->name); /* add new nick to hash table */ nick_hash_add(channel, nickrec); Index: src/irc/core/massjoin.c =================================================================== --- src/irc/core/massjoin.c (revision 4310) +++ src/irc/core/massjoin.c (working copy) @@ -21,6 +21,7 @@ #include "module.h" #include "signals.h" #include "settings.h" +#include "recode.h" #include "irc-servers.h" #include "irc-channels.h" @@ -39,6 +40,7 @@ IRC_CHANNEL_REC *chanrec; NICK_REC *nickrec; GSList *nicks, *tmp; + char *recoded_nick; g_return_if_fail(data != NULL); @@ -56,16 +58,17 @@ g_free(params); if (chanrec == NULL) return; + recoded_nick = recode_in(server, nick, channel); /* check that the nick isn't already in nicklist. seems to happen sometimes (server desyncs or something?) */ - nickrec = nicklist_find(CHANNEL(chanrec), nick); + nickrec = nicklist_find(CHANNEL(chanrec), recoded_nick); if (nickrec != NULL) { /* destroy the old record */ nicklist_remove(CHANNEL(chanrec), nickrec); } /* add user to nicklist */ - nickrec = irc_nicklist_insert(chanrec, nick, FALSE, FALSE, FALSE, TRUE); + nickrec = irc_nicklist_insert(chanrec, recoded_nick, FALSE, FALSE, FALSE, TRUE); nicklist_set_host(CHANNEL(chanrec), nickrec, address); if (chanrec->massjoins == 0) { @@ -77,7 +80,7 @@ if (nickrec->realname == NULL) { /* Check if user is already in some other channel, get the realname and other stuff from there */ - nicks = nicklist_get_same(SERVER(server), nick); + nicks = nicklist_get_same(SERVER(server), recoded_nick); for (tmp = nicks; tmp != NULL; tmp = tmp->next->next) { NICK_REC *rec = tmp->next->data; @@ -90,6 +93,7 @@ } g_slist_free(nicks); } + g_free(recoded_nick); chanrec->massjoins++; } Index: src/irc/core/irc-nicklist.c =================================================================== --- src/irc/core/irc-nicklist.c (revision 4310) +++ src/irc/core/irc-nicklist.c (working copy) @@ -21,6 +21,8 @@ #include "module.h" #include "signals.h" #include "misc.h" +#include "recode.h" +#include "recode.h" #include "irc-servers.h" #include "irc-channels.h" @@ -98,6 +100,7 @@ { IRC_CHANNEL_REC *chanrec; NICK_REC *rec; + char *recoded; char *params, *type, *channel, *names, *ptr; int op, halfop, voice, other; @@ -156,12 +159,14 @@ ptr++; } - if (nicklist_find((CHANNEL_REC *) chanrec, ptr) == NULL) { - rec = irc_nicklist_insert(chanrec, ptr, op, halfop, + recoded = recode_in(server, ptr, channel); + if (nicklist_find((CHANNEL_REC *) chanrec, recoded) == NULL) { + rec = irc_nicklist_insert(chanrec, recoded, op, halfop, voice, FALSE); if (other) rec->other = other; } + g_free(recoded); } g_free(params);