diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c index 77747ad20..74400fbf0 100644 --- a/src/irc/irc-recv.c +++ b/src/irc/irc-recv.c @@ -1712,6 +1712,7 @@ irc_cmd_recv_305 (t_irc_server *server, char *host, char *arguments) COLOR_WIN_CHAT, "%s\n", arguments); } server->is_away = 0; + server->away_time = 0; return 0; } @@ -1737,6 +1738,7 @@ irc_cmd_recv_306 (t_irc_server *server, char *host, char *arguments) COLOR_WIN_CHAT, "%s\n", arguments); } server->is_away = 1; + server->away_time = time (NULL); return 0; } diff --git a/src/irc/irc-send.c b/src/irc/irc-send.c index d83989cb6..6f6e72ac7 100644 --- a/src/irc/irc-send.c +++ b/src/irc/irc-send.c @@ -118,17 +118,24 @@ irc_cmd_send_away (t_irc_server *server, char *arguments) } else { - server_sendf (ptr_server, "AWAY\r\n"); - ptr_server->is_away = 0; - elapsed = time (NULL) - ptr_server->away_time; - if (cfg_look_display_away) + if (ptr_server->is_away) { - snprintf (buffer, sizeof (buffer), - "is back (gone %.2ld:%.2ld:%.2ld)", - elapsed / 3600, - (elapsed / 60) % 60, - elapsed % 60); - irc_send_me_all_channels (ptr_server, buffer); + 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_look_display_away) + { + snprintf (buffer, sizeof (buffer), + "is back (gone %.2ld:%.2ld:%.2ld)", + elapsed / 3600, + (elapsed / 60) % 60, + elapsed % 60); + irc_send_me_all_channels (ptr_server, buffer); + } + } } } } @@ -149,17 +156,24 @@ irc_cmd_send_away (t_irc_server *server, char *arguments) } else { - server_sendf (server, "AWAY\r\n"); - server->is_away = 0; - elapsed = time (NULL) - server->away_time; - if (cfg_look_display_away) + if (server->is_away) { - snprintf (buffer, sizeof (buffer), - "is back (gone %.2ld:%.2ld:%.2ld)", - elapsed / 3600, - (elapsed / 60) % 60, - elapsed % 60); - irc_send_me_all_channels (server, buffer); + 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_look_display_away) + { + snprintf (buffer, sizeof (buffer), + "is back (gone %.2ld:%.2ld:%.2ld)", + elapsed / 3600, + (elapsed / 60) % 60, + elapsed % 60); + irc_send_me_all_channels (server, buffer); + } + } } } } diff --git a/src/irc/irc-server.c b/src/irc/irc-server.c index 2a9d184c1..ac9b9d21f 100644 --- a/src/irc/irc-server.c +++ b/src/irc/irc-server.c @@ -81,6 +81,7 @@ server_init (t_irc_server *server) server->reconnect_join = 0; server->sock4 = -1; server->is_away = 0; + server->away_time = 0; server->server_read = -1; server->server_write = -1; server->buffer = NULL; diff --git a/weechat/src/irc/irc-recv.c b/weechat/src/irc/irc-recv.c index 77747ad20..74400fbf0 100644 --- a/weechat/src/irc/irc-recv.c +++ b/weechat/src/irc/irc-recv.c @@ -1712,6 +1712,7 @@ irc_cmd_recv_305 (t_irc_server *server, char *host, char *arguments) COLOR_WIN_CHAT, "%s\n", arguments); } server->is_away = 0; + server->away_time = 0; return 0; } @@ -1737,6 +1738,7 @@ irc_cmd_recv_306 (t_irc_server *server, char *host, char *arguments) COLOR_WIN_CHAT, "%s\n", arguments); } server->is_away = 1; + server->away_time = time (NULL); return 0; } diff --git a/weechat/src/irc/irc-send.c b/weechat/src/irc/irc-send.c index d83989cb6..6f6e72ac7 100644 --- a/weechat/src/irc/irc-send.c +++ b/weechat/src/irc/irc-send.c @@ -118,17 +118,24 @@ irc_cmd_send_away (t_irc_server *server, char *arguments) } else { - server_sendf (ptr_server, "AWAY\r\n"); - ptr_server->is_away = 0; - elapsed = time (NULL) - ptr_server->away_time; - if (cfg_look_display_away) + if (ptr_server->is_away) { - snprintf (buffer, sizeof (buffer), - "is back (gone %.2ld:%.2ld:%.2ld)", - elapsed / 3600, - (elapsed / 60) % 60, - elapsed % 60); - irc_send_me_all_channels (ptr_server, buffer); + 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_look_display_away) + { + snprintf (buffer, sizeof (buffer), + "is back (gone %.2ld:%.2ld:%.2ld)", + elapsed / 3600, + (elapsed / 60) % 60, + elapsed % 60); + irc_send_me_all_channels (ptr_server, buffer); + } + } } } } @@ -149,17 +156,24 @@ irc_cmd_send_away (t_irc_server *server, char *arguments) } else { - server_sendf (server, "AWAY\r\n"); - server->is_away = 0; - elapsed = time (NULL) - server->away_time; - if (cfg_look_display_away) + if (server->is_away) { - snprintf (buffer, sizeof (buffer), - "is back (gone %.2ld:%.2ld:%.2ld)", - elapsed / 3600, - (elapsed / 60) % 60, - elapsed % 60); - irc_send_me_all_channels (server, buffer); + 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_look_display_away) + { + snprintf (buffer, sizeof (buffer), + "is back (gone %.2ld:%.2ld:%.2ld)", + elapsed / 3600, + (elapsed / 60) % 60, + elapsed % 60); + irc_send_me_all_channels (server, buffer); + } + } } } } diff --git a/weechat/src/irc/irc-server.c b/weechat/src/irc/irc-server.c index 2a9d184c1..ac9b9d21f 100644 --- a/weechat/src/irc/irc-server.c +++ b/weechat/src/irc/irc-server.c @@ -81,6 +81,7 @@ server_init (t_irc_server *server) server->reconnect_join = 0; server->sock4 = -1; server->is_away = 0; + server->away_time = 0; server->server_read = -1; server->server_write = -1; server->buffer = NULL;