diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/weeconfig.c | 10 | ||||
-rw-r--r-- | src/common/weeconfig.h | 4 | ||||
-rw-r--r-- | src/irc/irc-display.c | 27 | ||||
-rw-r--r-- | src/irc/irc-send.c | 227 | ||||
-rw-r--r-- | src/irc/irc.h | 2 |
5 files changed, 138 insertions, 132 deletions
diff --git a/src/common/weeconfig.c b/src/common/weeconfig.c index d0ddb588e..fd62293ba 100644 --- a/src/common/weeconfig.c +++ b/src/common/weeconfig.c @@ -650,6 +650,8 @@ t_config_option weechat_options_log[] = /* config, irc section */ int cfg_irc_display_away; +char *cfg_irc_display_away_values[] = +{ "off", "local", "channel", NULL }; char *cfg_irc_default_msg_part; char *cfg_irc_default_msg_quit; int cfg_irc_notice_as_pv; @@ -663,10 +665,10 @@ int cfg_irc_colors_receive; int cfg_irc_colors_send; t_config_option weechat_options_irc[] = -{ { "irc_display_away", N_("display message to all channels when away"), - N_("display message to all channels when (un)marking as away"), - OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE, - NULL, NULL, &cfg_irc_display_away, NULL, &config_change_noop }, +{ { "irc_display_away", N_("display message for away"), + N_("display message when (un)marking as away"), + OPTION_TYPE_INT_WITH_STRING, 0, 0, 0, + "off", cfg_irc_display_away_values, &cfg_irc_display_away, NULL, &config_change_noop }, { "irc_default_msg_part", N_("default part message (leaving channel)"), N_("default part message (leaving channel)"), OPTION_TYPE_STRING, 0, 0, 0, diff --git a/src/common/weeconfig.h b/src/common/weeconfig.h index 9cfd8f006..23825ad55 100644 --- a/src/common/weeconfig.h +++ b/src/common/weeconfig.h @@ -54,6 +54,10 @@ #define CFG_LOOK_NICKLIST_TOP 2 #define CFG_LOOK_NICKLIST_BOTTOM 3 +#define CFG_IRC_DISPLAY_AWAY_OFF 0 +#define CFG_IRC_DISPLAY_AWAY_LOCAL 1 +#define CFG_IRC_DISPLAY_AWAY_CHANNEL 2 + typedef struct t_config_section t_config_section; struct t_config_section diff --git a/src/irc/irc-display.c b/src/irc/irc-display.c index b68762bed..4c628a944 100644 --- a/src/irc/irc-display.c +++ b/src/irc/irc-display.c @@ -135,6 +135,33 @@ irc_display_nick (t_gui_buffer *buffer, t_irc_nick *nick, char *nickname, } /* + * irc_display_away: display away on all channels of all servers + */ + +void +irc_display_away (t_irc_server *server, char *string1, char *string2) +{ + t_irc_channel *ptr_channel; + + for (ptr_channel = server->channels; ptr_channel; + ptr_channel = ptr_channel->next_channel) + { + if (ptr_channel->type == CHANNEL_TYPE_CHANNEL) + { + gui_printf_nolog (ptr_channel->buffer, + "%s[%s%s%s %s: %s%s]\n", + GUI_COLOR(COLOR_WIN_CHAT_DARK), + GUI_COLOR(COLOR_WIN_CHAT_NICK), + server->nick, + GUI_COLOR(COLOR_WIN_CHAT), + string1, + string2, + GUI_COLOR(COLOR_WIN_CHAT_DARK)); + } + } +} + +/* * irc_display_mode: display IRC message for mode change */ diff --git a/src/irc/irc-send.c b/src/irc/irc-send.c index 7313b600e..77d24de08 100644 --- a/src/irc/irc-send.c +++ b/src/irc/irc-send.c @@ -85,6 +85,31 @@ irc_cmd_send_admin (t_irc_server *server, char *arguments) } /* + * irc_send_me: send a ctcp action to a channel + */ + +int +irc_send_me (t_irc_server *server, t_irc_channel *channel, char *arguments) +{ + char *string; + + server_sendf (server, "PRIVMSG %s :\01ACTION %s\01\r\n", + channel->name, + (arguments && arguments[0]) ? arguments : ""); + irc_display_prefix (NULL, channel->buffer, PREFIX_ACTION_ME); + string = (arguments && arguments[0]) ? + (char *)gui_color_decode ((unsigned char *)arguments, 1) : NULL; + gui_printf (channel->buffer, "%s%s %s%s\n", + GUI_COLOR(COLOR_WIN_CHAT_NICK), + server->nick, + GUI_COLOR(COLOR_WIN_CHAT), + (string) ? string : ""); + if (string) + free (string); + return 0; +} + +/* * irc_cmd_send_ame: send a ctcp action to all channels of all connected servers */ @@ -93,7 +118,6 @@ irc_cmd_send_ame (t_irc_server *server, char *arguments) { t_irc_server *ptr_server; t_irc_channel *ptr_channel; - char *string; /* make gcc happy */ (void) server; @@ -108,21 +132,7 @@ irc_cmd_send_ame (t_irc_server *server, char *arguments) ptr_channel = ptr_channel->next_channel) { if (ptr_channel->type == CHANNEL_TYPE_CHANNEL) - { - server_sendf (ptr_server, "PRIVMSG %s :\01ACTION %s\01\r\n", - ptr_channel->name, - (arguments && arguments[0]) ? arguments : ""); - irc_display_prefix (NULL, ptr_channel->buffer, PREFIX_ACTION_ME); - string = (arguments && arguments[0]) ? - (char *)gui_color_decode ((unsigned char *)arguments, 1) : NULL; - gui_printf (ptr_channel->buffer, "%s%s %s%s\n", - GUI_COLOR(COLOR_WIN_CHAT_NICK), - ptr_server->nick, - GUI_COLOR(COLOR_WIN_CHAT), - (string) ? string : ""); - if (string) - free (string); - } + irc_send_me (ptr_server, ptr_channel, arguments); } } } @@ -189,108 +199,63 @@ irc_cmd_send_amsg (t_irc_server *server, char *arguments) } /* - * irc_cmd_send_away: toggle away status + * irc_send_away: toggle away status for one server */ -int -irc_cmd_send_away (t_irc_server *server, char *arguments) +void +irc_send_away (t_irc_server *server, char *arguments) { - char *pos; - t_irc_server *ptr_server; + char *string, buffer[4096]; t_gui_window *ptr_window; time_t elapsed; - char buffer[4096]; - char *string; - gui_add_hotlist = 0; - if (arguments && (strncmp (arguments, "-all", 4) == 0)) + if (arguments) { - pos = arguments + 4; - while (pos[0] == ' ') - pos++; - if (!pos[0]) - pos = NULL; - - for (ptr_server = irc_servers; ptr_server; - ptr_server = ptr_server->next_server) + server->is_away = 1; + server->away_time = time (NULL); + server_sendf (server, "AWAY :%s\r\n", arguments); + if (cfg_irc_display_away != CFG_IRC_DISPLAY_AWAY_OFF) { - if (ptr_server->is_connected) + string = (char *)gui_color_decode ((unsigned char *)arguments, 1); + if (cfg_irc_display_away == CFG_IRC_DISPLAY_AWAY_LOCAL) + irc_display_away (server, "away", (string) ? string : arguments); + else { - if (pos) - { - ptr_server->is_away = 1; - ptr_server->away_time = time (NULL); - server_sendf (ptr_server, "AWAY :%s\r\n", pos); - if (cfg_irc_display_away) - { - string = (char *)gui_color_decode ((unsigned char *)pos, 1); - snprintf (buffer, sizeof (buffer), "is away: %s", (string) ? string : ""); - irc_send_me_all_channels (ptr_server, buffer); - if (string) - free (string); - } - server_set_away (ptr_server, ptr_server->nick, 1); - for (ptr_window = gui_windows; ptr_window; - ptr_window = ptr_window->next_window) - { - if (SERVER(ptr_window->buffer) == ptr_server) - ptr_window->buffer->last_read_line = - ptr_window->buffer->last_line; - } - } - else - { - server_sendf (ptr_server, "AWAY\r\n"); - ptr_server->is_away = 0; - if (server->away_time != 0) - { - elapsed = time (NULL) - ptr_server->away_time; - ptr_server->away_time = 0; - if (cfg_irc_display_away) - { - snprintf (buffer, sizeof (buffer), - "is back (gone %.2ld:%.2ld:%.2ld)", - (long int)(elapsed / 3600), - (long int)((elapsed / 60) % 60), - (long int)(elapsed % 60)); - irc_send_me_all_channels (ptr_server, buffer); - } - } - server_set_away (ptr_server, ptr_server->nick, 0); - } + snprintf (buffer, sizeof (buffer), "is away: %s", (string) ? string : arguments); + irc_send_me_all_channels (server, buffer); } + if (string) + free (string); + } + server_set_away (server, server->nick, 1); + for (ptr_window = gui_windows; ptr_window; + ptr_window = ptr_window->next_window) + { + if (SERVER(ptr_window->buffer) == server) + ptr_window->buffer->last_read_line = + ptr_window->buffer->last_line; } } else { - if (arguments) + server_sendf (server, "AWAY\r\n"); + server->is_away = 0; + if (server->away_time != 0) { - server->is_away = 1; - server->away_time = time (NULL); - server_sendf (server, "AWAY :%s\r\n", arguments); - if (cfg_irc_display_away) + elapsed = time (NULL) - server->away_time; + server->away_time = 0; + if (cfg_irc_display_away != CFG_IRC_DISPLAY_AWAY_OFF) { - snprintf (buffer, sizeof (buffer), "is away: %s", arguments); - irc_send_me_all_channels (server, buffer); - } - server_set_away (server, server->nick, 1); - for (ptr_window = gui_windows; ptr_window; - ptr_window = ptr_window->next_window) - { - if (SERVER(ptr_window->buffer) == server) - ptr_window->buffer->last_read_line = - ptr_window->buffer->last_line; - } - } - else - { - server_sendf (server, "AWAY\r\n"); - server->is_away = 0; - if (server->away_time != 0) - { - elapsed = time (NULL) - server->away_time; - server->away_time = 0; - if (cfg_irc_display_away) + if (cfg_irc_display_away == CFG_IRC_DISPLAY_AWAY_LOCAL) + { + snprintf (buffer, sizeof (buffer), + "gone %.2ld:%.2ld:%.2ld", + (long int)(elapsed / 3600), + (long int)((elapsed / 60) % 60), + (long int)(elapsed % 60)); + irc_display_away (server, "back", buffer); + } + else { snprintf (buffer, sizeof (buffer), "is back (gone %.2ld:%.2ld:%.2ld)", @@ -300,9 +265,40 @@ irc_cmd_send_away (t_irc_server *server, char *arguments) irc_send_me_all_channels (server, buffer); } } - server_set_away (server, server->nick, 0); } + server_set_away (server, server->nick, 0); } +} + +/* + * irc_cmd_send_away: toggle away status + */ + +int +irc_cmd_send_away (t_irc_server *server, char *arguments) +{ + char *pos; + t_irc_server *ptr_server; + + gui_add_hotlist = 0; + if (arguments && (strncmp (arguments, "-all", 4) == 0)) + { + pos = arguments + 4; + while (pos[0] == ' ') + pos++; + if (!pos[0]) + pos = NULL; + + for (ptr_server = irc_servers; ptr_server; + ptr_server = ptr_server->next_server) + { + if (ptr_server->is_connected) + irc_send_away (ptr_server, pos); + } + } + else + irc_send_away (server, arguments); + gui_draw_buffer_status (gui_current_window->buffer, 1); gui_add_hotlist = 1; return 0; @@ -922,31 +918,6 @@ irc_cmd_send_lusers (t_irc_server *server, char *arguments) } /* - * irc_send_me: send a ctcp action to a channel - */ - -int -irc_send_me (t_irc_server *server, t_irc_channel *channel, char *arguments) -{ - char *string; - - server_sendf (server, "PRIVMSG %s :\01ACTION %s\01\r\n", - channel->name, - (arguments && arguments[0]) ? arguments : ""); - irc_display_prefix (NULL, channel->buffer, PREFIX_ACTION_ME); - string = (arguments && arguments[0]) ? - (char *)gui_color_decode ((unsigned char *)arguments, 1) : NULL; - gui_printf (channel->buffer, "%s%s %s%s\n", - GUI_COLOR(COLOR_WIN_CHAT_NICK), - server->nick, - GUI_COLOR(COLOR_WIN_CHAT), - (string) ? string : ""); - if (string) - free (string); - return 0; -} - -/* * irc_send_me_all_channels: send a ctcp action to all channels of a server */ diff --git a/src/irc/irc.h b/src/irc/irc.h index 26c9c79fb..b15f67af3 100644 --- a/src/irc/irc.h +++ b/src/irc/irc.h @@ -45,6 +45,7 @@ #define PREFIX_QUIT "<--" #define PREFIX_ERROR "=!=" #define PREFIX_PLUGIN "-P-" +#define PREFIX_AWAY "-A-" #define DEFAULT_IRC_PORT 6667 @@ -396,6 +397,7 @@ extern void dcc_print_log (t_irc_dcc *); extern void irc_display_prefix (t_irc_server *, t_gui_buffer *, char *); extern void irc_display_nick (t_gui_buffer *, t_irc_nick *, char *, int, int, int, int); +extern void irc_display_away (t_irc_server *, char *, char *); extern void irc_display_mode (t_irc_server *, t_gui_buffer *, char *, char, char *, char *, char *, char *); extern void irc_display_server (t_irc_server *ptr_server); |