diff options
Diffstat (limited to 'src/plugins/irc/irc-nick.c')
-rw-r--r-- | src/plugins/irc/irc-nick.c | 246 |
1 files changed, 130 insertions, 116 deletions
diff --git a/src/plugins/irc/irc-nick.c b/src/plugins/irc/irc-nick.c index d51fde31f..cdd3757fa 100644 --- a/src/plugins/irc/irc-nick.c +++ b/src/plugins/irc/irc-nick.c @@ -39,20 +39,24 @@ * irc_nick_find_color: find a color for a nick (according to nick letters) */ -int +char * irc_nick_find_color (struct t_irc_nick *nick) { int i, color; + char color_name[64]; color = 0; - for (i = strlen (nick->nick) - 1; i >= 0; i--) + for (i = strlen (nick->name) - 1; i >= 0; i--) { - color += (int)(nick->nick[i]); + color += (int)(nick->name[i]); } color = (color % weechat_config_integer (weechat_config_get_weechat ("look_color_nicks_number"))); + + snprintf (color_name, sizeof (color_name), + "color_chat_nick_color%d", color); - return color; + return weechat_color (color_name); } /* @@ -61,56 +65,66 @@ irc_nick_find_color (struct t_irc_nick *nick) */ void -irc_nick_get_gui_infos (struct t_irc_nick *nick, - int *sort_index, char *prefix, int *color_prefix) +irc_nick_get_gui_infos (struct t_gui_buffer *buffer, + struct t_irc_nick *nick, + char *prefix, int *color_prefix, + struct t_gui_nick_group **group) { if (nick->flags & IRC_NICK_CHANOWNER) { - *sort_index = 1; *prefix = '~'; *color_prefix = 1; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_OP); } else if (nick->flags & IRC_NICK_CHANADMIN) { - *sort_index = 2; *prefix = '&'; *color_prefix = 1; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_OP); } else if (nick->flags & IRC_NICK_CHANADMIN2) { - *sort_index = 3; *prefix = '!'; *color_prefix = 1; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_OP); } else if (nick->flags & IRC_NICK_OP) { - *sort_index = 4; *prefix = '@'; *color_prefix = 1; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_OP); } else if (nick->flags & IRC_NICK_HALFOP) { - *sort_index = 5; *prefix = '%'; *color_prefix = 2; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_HALFOP); } else if (nick->flags & IRC_NICK_VOICE) { - *sort_index = 6; *prefix = '+'; *color_prefix = 3; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_VOICE); } else if (nick->flags & IRC_NICK_CHANUSER) { - *sort_index = 7; *prefix = '-'; *color_prefix = 4; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_CHANUSER); } else { - *sort_index = 8; *prefix = ' '; *color_prefix = 0; + *group = weechat_nicklist_search_group (buffer, NULL, + IRC_NICK_GROUP_NORMAL); } } @@ -124,52 +138,46 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel, int is_chanadmin2, int is_op, int is_halfop, int has_voice, int is_chanuser) { - (void) server; - (void) channel; - (void) nick_name; - (void) is_chanowner; - (void) is_chanadmin; - (void) is_chanadmin2; - (void) is_op; - (void) is_halfop; - (void) has_voice; - (void) is_chanuser; + struct t_irc_nick *new_nick, *ptr_nick; + char prefix, str_prefix_color[64]; + int prefix_color; + struct t_gui_nick_group *ptr_group; - /* - struct t_irc_nick *new_nick; - struct t_gui_nick *ptr_gui_nick; - int sort_index, color_prefix; - char prefix; - - // nick already exists on this channel? - if ((new_nick = irc_nick_search (channel, nick_name))) + /* nick already exists on this channel? */ + ptr_nick = irc_nick_search (channel, nick_name); + if (ptr_nick) { - // update nick - IRC_NICK_SET_FLAG(new_nick, is_chanowner, IRC_NICK_CHANOWNER); - IRC_NICK_SET_FLAG(new_nick, is_chanadmin, IRC_NICK_CHANADMIN); - IRC_NICK_SET_FLAG(new_nick, is_chanadmin2, IRC_NICK_CHANADMIN2); - IRC_NICK_SET_FLAG(new_nick, is_op, IRC_NICK_OP); - IRC_NICK_SET_FLAG(new_nick, is_halfop, IRC_NICK_HALFOP); - IRC_NICK_SET_FLAG(new_nick, has_voice, IRC_NICK_VOICE); - IRC_NICK_SET_FLAG(new_nick, is_chanuser, IRC_NICK_CHANUSER); - irc_nick_get_gui_infos (new_nick, &sort_index, &prefix, &color_prefix); - ptr_gui_nick = gui_nicklist_search (channel->buffer, new_nick->nick); - if (ptr_gui_nick) - gui_nicklist_update (channel->buffer, ptr_gui_nick, NULL, - sort_index, - ptr_gui_nick->color_nick, - prefix, - color_prefix); - - return new_nick; + /* update nick */ + IRC_NICK_SET_FLAG(ptr_nick, is_chanowner, IRC_NICK_CHANOWNER); + IRC_NICK_SET_FLAG(ptr_nick, is_chanadmin, IRC_NICK_CHANADMIN); + IRC_NICK_SET_FLAG(ptr_nick, is_chanadmin2, IRC_NICK_CHANADMIN2); + IRC_NICK_SET_FLAG(ptr_nick, is_op, IRC_NICK_OP); + IRC_NICK_SET_FLAG(ptr_nick, is_halfop, IRC_NICK_HALFOP); + IRC_NICK_SET_FLAG(ptr_nick, has_voice, IRC_NICK_VOICE); + IRC_NICK_SET_FLAG(ptr_nick, is_chanuser, IRC_NICK_CHANUSER); + + irc_nick_get_gui_infos (channel->buffer, ptr_nick, &prefix, + &prefix_color, &ptr_group); + weechat_nicklist_remove_nick (channel->buffer, + weechat_nicklist_search_nick (channel->buffer, + ptr_group, + ptr_nick->name)); + snprintf (str_prefix_color, sizeof (str_prefix_color), + "color_nicklist_prefix%d", + prefix_color); + weechat_nicklist_add_nick (channel->buffer, ptr_group, + ptr_nick->name, ptr_nick->color, + prefix, str_prefix_color, 1); + + return ptr_nick; } - // alloc memory for new nick + /* alloc memory for new nick */ if ((new_nick = (struct t_irc_nick *)malloc (sizeof (struct t_irc_nick))) == NULL) return NULL; - // initialize new nick - new_nick->nick = strdup (nick_name); + /* initialize new nick */ + new_nick->name = strdup (nick_name); new_nick->host = NULL; new_nick->flags = 0; IRC_NICK_SET_FLAG(new_nick, is_chanowner, IRC_NICK_CHANOWNER); @@ -179,12 +187,12 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel, IRC_NICK_SET_FLAG(new_nick, is_halfop, IRC_NICK_HALFOP); IRC_NICK_SET_FLAG(new_nick, has_voice, IRC_NICK_VOICE); IRC_NICK_SET_FLAG(new_nick, is_chanuser, IRC_NICK_CHANUSER); - if (weechat_strcasecmp (new_nick->nick, server->nick) == 0) - new_nick->color = GUI_COLOR_CHAT_NICK_SELF; + if (weechat_strcasecmp (new_nick->name, server->nick) == 0) + new_nick->color = IRC_COLOR_CHAT_NICK_SELF; else new_nick->color = irc_nick_find_color (new_nick); - // add nick to end of list + /* add nick to end of list */ new_nick->prev_nick = channel->last_nick; if (channel->nicks) channel->last_nick->next_nick = new_nick; @@ -197,15 +205,18 @@ irc_nick_new (struct t_irc_server *server, struct t_irc_channel *channel, channel->nick_completion_reset = 1; - // add nick to buffer nicklist - irc_nick_get_gui_infos (new_nick, &sort_index, &prefix, &color_prefix); - gui_nicklist_add (channel->buffer, new_nick->nick, sort_index, - GUI_COLOR_NICKLIST, prefix, color_prefix); - - // all is ok, return address of new nick + /* add nick to buffer nicklist */ + irc_nick_get_gui_infos (channel->buffer, new_nick, &prefix, &prefix_color, + &ptr_group); + snprintf (str_prefix_color, sizeof (str_prefix_color), + "color_nicklist_prefix%d", + prefix_color); + weechat_nicklist_add_nick (channel->buffer, ptr_group, + new_nick->name, new_nick->color, + prefix, str_prefix_color, 1); + + /* all is ok, return address of new nick */ return new_nick; - */ - return NULL; } /* @@ -216,46 +227,45 @@ void irc_nick_change (struct t_irc_server *server, struct t_irc_channel *channel, struct t_irc_nick *nick, char *new_nick) { - (void) server; - (void) channel; - (void) nick; - (void) new_nick; - - /* - int nick_is_me; - struct t_weelist *ptr_weelist; - struct t_gui_nick *ptr_nick; - - // update buffer nick - ptr_nick = gui_nicklist_search (channel->buffer, nick->nick); - if (ptr_nick) - gui_nicklist_update (channel->buffer, ptr_nick, new_nick, - ptr_nick->sort_index, - ptr_nick->color_nick, - ptr_nick->prefix, - ptr_nick->color_prefix); - - nick_is_me = (strcmp (nick->nick, server->nick) == 0) ? 1 : 0; - + int nick_is_me, prefix_color; + struct t_gui_nick_group *ptr_group; + char prefix, str_prefix_color[64]; + + /* remove nick from nicklist */ + irc_nick_get_gui_infos (channel->buffer, nick, &prefix, &prefix_color, + &ptr_group); + weechat_nicklist_remove_nick (channel->buffer, + weechat_nicklist_search_nick (channel->buffer, + ptr_group, + nick->name)); + + /* update nicks speaking */ + nick_is_me = (strcmp (nick->name, server->nick) == 0) ? 1 : 0; if (!nick_is_me && channel->nicks_speaking) { - ptr_weelist = weelist_search (channel->nicks_speaking, nick->nick); - if (ptr_weelist && ptr_weelist->data) - { - free (ptr_weelist->data); - ptr_weelist->data = strdup (new_nick); - } + weechat_list_set (weechat_list_search (channel->nicks_speaking, + nick->name), + new_nick); } - // change nickname - if (nick->nick) - free (nick->nick); - nick->nick = strdup (new_nick); + /* change nickname */ + if (nick->name) + free (nick->name); + nick->name = strdup (new_nick); if (nick_is_me) - nick->color = GUI_COLOR_CHAT_NICK_SELF; + nick->color = IRC_COLOR_CHAT_NICK_SELF; else nick->color = irc_nick_find_color (nick); - */ + + /* add nick in nicklist */ + irc_nick_get_gui_infos (channel->buffer, nick, &prefix, &prefix_color, + &ptr_group); + snprintf (str_prefix_color, sizeof (str_prefix_color), + "color_nicklist_prefix%d", + prefix_color); + weechat_nicklist_add_nick (channel->buffer, ptr_group, + nick->name, nick->color, + prefix, str_prefix_color, 1); } /* @@ -265,19 +275,23 @@ irc_nick_change (struct t_irc_server *server, struct t_irc_channel *channel, void irc_nick_free (struct t_irc_channel *channel, struct t_irc_nick *nick) { - (void) channel; - (void) nick; - - /* struct t_irc_nick *new_nicks; + char prefix; + int prefix_color; + struct t_gui_nick_group *ptr_group; if (!channel || !nick) return; - // remove nick from buffer nicklist - (void) gui_nicklist_remove (channel->buffer, nick->nick); + /* remove nick from nicklist */ + irc_nick_get_gui_infos (channel->buffer, nick, &prefix, &prefix_color, + &ptr_group); + weechat_nicklist_remove_nick (channel->buffer, + weechat_nicklist_search_nick (channel->buffer, + ptr_group, + nick->name)); - // remove nick from nicks list + /* remove nick */ if (channel->last_nick == nick) channel->last_nick = nick->prev_nick; if (nick->prev_nick) @@ -293,16 +307,15 @@ irc_nick_free (struct t_irc_channel *channel, struct t_irc_nick *nick) channel->nicks_count--; - // free data - if (nick->nick) - free (nick->nick); + /* free data */ + if (nick->name) + free (nick->name); if (nick->host) free (nick->host); free (nick); channel->nicks = new_nicks; channel->nick_completion_reset = 1; - */ } /* @@ -338,7 +351,7 @@ irc_nick_search (struct t_irc_channel *channel, char *nickname) for (ptr_nick = channel->nicks; ptr_nick; ptr_nick = ptr_nick->next_nick) { - if (weechat_strcasecmp (ptr_nick->nick, nickname) == 0) + if (weechat_strcasecmp (ptr_nick->name, nickname) == 0) return ptr_nick; } return NULL; @@ -438,7 +451,7 @@ irc_nick_as_prefix (struct t_irc_nick *nick, char *nickname, char *force_color) && weechat_config_string (irc_config_irc_nick_prefix)[0]) ? weechat_config_string (irc_config_irc_nick_prefix) : "", (force_color) ? force_color : ((nick) ? nick->color : IRC_COLOR_CHAT_NICK), - (nick) ? nick->nick : nickname, + (nick) ? nick->name : nickname, (weechat_config_string (irc_config_irc_nick_suffix) && weechat_config_string (irc_config_irc_nick_suffix)[0]) ? IRC_COLOR_CHAT_DELIMITERS : "", @@ -456,10 +469,11 @@ irc_nick_as_prefix (struct t_irc_nick *nick, char *nickname, char *force_color) void irc_nick_print_log (struct t_irc_nick *nick) { - weechat_log_printf ("=> nick %s (addr:0x%X):", nick->nick, nick); - weechat_log_printf (" host . . . . . : %s", nick->host); - weechat_log_printf (" flags. . . . . : %d", nick->flags); - weechat_log_printf (" color. . . . . : %d", nick->color); - weechat_log_printf (" prev_nick. . . : 0x%X", nick->prev_nick); - weechat_log_printf (" next_nick. . . : 0x%X", nick->next_nick); + weechat_log_printf (""); + weechat_log_printf (" => nick %s (addr:0x%X):", nick->name, nick); + weechat_log_printf (" host . . . . . : %s", nick->host); + weechat_log_printf (" flags. . . . . : %d", nick->flags); + weechat_log_printf (" color. . . . . : '%s'", nick->color); + weechat_log_printf (" prev_nick. . . : 0x%X", nick->prev_nick); + weechat_log_printf (" next_nick. . . : 0x%X", nick->next_nick); } |