From 9d3e31e165c48f7dc9dafdb4d8ed890932103e31 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Wed, 1 Aug 2007 10:44:51 +0000 Subject: [PATCH] Fixed nick prefix display on servers that doesn't support all prefixes (bug #20025) --- ChangeLog | 2 ++ src/irc/irc-mode.c | 28 +++++++++++++++++----------- src/irc/irc-recv.c | 4 ++-- src/irc/irc.h | 2 +- weechat/ChangeLog | 2 ++ weechat/src/irc/irc-mode.c | 28 +++++++++++++++++----------- weechat/src/irc/irc-recv.c | 4 ++-- weechat/src/irc/irc.h | 2 +- 8 files changed, 44 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index c166a7afa..0e9b4e9b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,8 @@ ChangeLog - 2007-08-01 Version 0.2.6 (under dev!): + * fixed nick prefix display on servers that doesn't support all prefixes + (bug #20025) * fixed terminal encoding detection when NLS is disabled (bug #20646) * fixed crash when sending data to channel or pv on disconnected server (bug #20524) diff --git a/src/irc/irc-mode.c b/src/irc/irc-mode.c index 56d6bcc3e..cfdb2fa8d 100644 --- a/src/irc/irc-mode.c +++ b/src/irc/irc-mode.c @@ -81,7 +81,8 @@ irc_mode_channel_get_flag (char *str, char *pos) */ void -irc_mode_channel_set (t_irc_channel *channel, char *modes) +irc_mode_channel_set (t_irc_server *server, t_irc_channel *channel, + char *modes) { char *pos_args, set_flag, **argv, *pos, *ptr_arg; int argc, current_arg; @@ -121,14 +122,16 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes) case 'a': /* unrealircd specific flag */ ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_CHANADMIN); + if (irc_mode_nick_prefix_allowed (server, '~')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_CHANADMIN); break; case 'h': ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_HALFOP); + if (irc_mode_nick_prefix_allowed (server, '%')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_HALFOP); break; case 'k': if (channel->key) @@ -158,20 +161,23 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes) case 'o': ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_OP); + if (irc_mode_nick_prefix_allowed (server, '@')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_OP); break; case 'q': /* unrealircd specific flag */ ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_CHANOWNER); + if (irc_mode_nick_prefix_allowed (server, '~')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_CHANOWNER); break; case 'v': ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_VOICE); + if (irc_mode_nick_prefix_allowed (server, '+')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_VOICE); break; } break; diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c index 193bb05f5..dc720b3e8 100644 --- a/src/irc/irc-recv.c +++ b/src/irc/irc-recv.c @@ -742,7 +742,7 @@ irc_recv_cmd_mode (t_irc_server *server, char *host, char *nick, char *arguments GUI_COLOR(COLOR_WIN_CHAT_NICK), nick); } - irc_mode_channel_set (ptr_channel, pos_modes); + irc_mode_channel_set (server, ptr_channel, pos_modes); irc_server_sendf (server, "MODE %s", ptr_channel->name); } else @@ -3474,7 +3474,7 @@ irc_recv_cmd_324 (t_irc_server *server, char *host, char *nick, char *arguments) else ptr_channel->modes = (char *) malloc (strlen (pos_modes) + 1); strcpy (ptr_channel->modes, pos_modes); - irc_mode_channel_set (ptr_channel, pos_modes); + irc_mode_channel_set (server, ptr_channel, pos_modes); } else { diff --git a/src/irc/irc.h b/src/irc/irc.h index 3b1b00c31..eb86246b7 100644 --- a/src/irc/irc.h +++ b/src/irc/irc.h @@ -443,7 +443,7 @@ extern void irc_nick_print_log (t_irc_nick *); /* mode functions (irc-mode.c) */ -extern void irc_mode_channel_set (t_irc_channel *, char *); +extern void irc_mode_channel_set (t_irc_server *, t_irc_channel *, char *); extern void irc_mode_user_set (t_irc_server *, char *); extern int irc_mode_nick_prefix_allowed (t_irc_server *, char); diff --git a/weechat/ChangeLog b/weechat/ChangeLog index c166a7afa..0e9b4e9b7 100644 --- a/weechat/ChangeLog +++ b/weechat/ChangeLog @@ -5,6 +5,8 @@ ChangeLog - 2007-08-01 Version 0.2.6 (under dev!): + * fixed nick prefix display on servers that doesn't support all prefixes + (bug #20025) * fixed terminal encoding detection when NLS is disabled (bug #20646) * fixed crash when sending data to channel or pv on disconnected server (bug #20524) diff --git a/weechat/src/irc/irc-mode.c b/weechat/src/irc/irc-mode.c index 56d6bcc3e..cfdb2fa8d 100644 --- a/weechat/src/irc/irc-mode.c +++ b/weechat/src/irc/irc-mode.c @@ -81,7 +81,8 @@ irc_mode_channel_get_flag (char *str, char *pos) */ void -irc_mode_channel_set (t_irc_channel *channel, char *modes) +irc_mode_channel_set (t_irc_server *server, t_irc_channel *channel, + char *modes) { char *pos_args, set_flag, **argv, *pos, *ptr_arg; int argc, current_arg; @@ -121,14 +122,16 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes) case 'a': /* unrealircd specific flag */ ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_CHANADMIN); + if (irc_mode_nick_prefix_allowed (server, '~')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_CHANADMIN); break; case 'h': ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_HALFOP); + if (irc_mode_nick_prefix_allowed (server, '%')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_HALFOP); break; case 'k': if (channel->key) @@ -158,20 +161,23 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes) case 'o': ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_OP); + if (irc_mode_nick_prefix_allowed (server, '@')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_OP); break; case 'q': /* unrealircd specific flag */ ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_CHANOWNER); + if (irc_mode_nick_prefix_allowed (server, '~')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_CHANOWNER); break; case 'v': ptr_arg = ((argc > 0) && (current_arg >= 0)) ? argv[current_arg--] : NULL; - irc_mode_channel_set_nick (channel, ptr_arg, - set_flag, NICK_VOICE); + if (irc_mode_nick_prefix_allowed (server, '+')) + irc_mode_channel_set_nick (channel, ptr_arg, + set_flag, NICK_VOICE); break; } break; diff --git a/weechat/src/irc/irc-recv.c b/weechat/src/irc/irc-recv.c index 193bb05f5..dc720b3e8 100644 --- a/weechat/src/irc/irc-recv.c +++ b/weechat/src/irc/irc-recv.c @@ -742,7 +742,7 @@ irc_recv_cmd_mode (t_irc_server *server, char *host, char *nick, char *arguments GUI_COLOR(COLOR_WIN_CHAT_NICK), nick); } - irc_mode_channel_set (ptr_channel, pos_modes); + irc_mode_channel_set (server, ptr_channel, pos_modes); irc_server_sendf (server, "MODE %s", ptr_channel->name); } else @@ -3474,7 +3474,7 @@ irc_recv_cmd_324 (t_irc_server *server, char *host, char *nick, char *arguments) else ptr_channel->modes = (char *) malloc (strlen (pos_modes) + 1); strcpy (ptr_channel->modes, pos_modes); - irc_mode_channel_set (ptr_channel, pos_modes); + irc_mode_channel_set (server, ptr_channel, pos_modes); } else { diff --git a/weechat/src/irc/irc.h b/weechat/src/irc/irc.h index 3b1b00c31..eb86246b7 100644 --- a/weechat/src/irc/irc.h +++ b/weechat/src/irc/irc.h @@ -443,7 +443,7 @@ extern void irc_nick_print_log (t_irc_nick *); /* mode functions (irc-mode.c) */ -extern void irc_mode_channel_set (t_irc_channel *, char *); +extern void irc_mode_channel_set (t_irc_server *, t_irc_channel *, char *); extern void irc_mode_user_set (t_irc_server *, char *); extern int irc_mode_nick_prefix_allowed (t_irc_server *, char);