1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-25 04:16:38 +02:00

irc: fix update of lag item when the server lag changes

This commit is contained in:
Sébastien Helleu
2015-08-05 20:51:12 +02:00
parent 82199f8264
commit 5aa93fdbb7
6 changed files with 26 additions and 11 deletions
+1 -2
View File
@@ -61,8 +61,7 @@ https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
* api: fix type of value returned by function strcasestr
* fifo: fix send error on Cygwin when something is received in the pipe
(issue #436)
* irc: remove lag item when a lag is displayed and new lag computed is exactly
0 milliseconds
* irc: fix update of lag item when the server lag changes
* irc: do not allow command /query with a channel name (issue #459)
* irc: decode/encode only text in IRC messages and not the headers
(bug #29886, issue #218, issue #451)
-1
View File
@@ -447,7 +447,6 @@ irc_bar_item_lag (void *data, struct t_gui_bar_item *item,
irc_buffer_get_server_and_channel (buffer, &server, NULL);
if (server
&& (server->lag >= 0)
&& (server->lag >= weechat_config_integer (irc_config_network_lag_min_show)))
{
snprintf (buf, sizeof (buf),
+4 -3
View File
@@ -1709,19 +1709,20 @@ IRC_PROTOCOL_CALLBACK(ping)
IRC_PROTOCOL_CALLBACK(pong)
{
struct timeval tv;
int old_lag;
IRC_PROTOCOL_MIN_ARGS(0);
if (server->lag_check_time.tv_sec != 0)
{
/* calculate lag (time diff with lag check) */
old_lag = server->lag;
gettimeofday (&tv, NULL);
server->lag = (int)(weechat_util_timeval_diff (&(server->lag_check_time),
&tv) / 1000);
if (old_lag != server->lag)
if (server->lag != server->lag_displayed)
{
server->lag_displayed = server->lag;
weechat_bar_item_update ("lag");
}
/* schedule next lag check */
server->lag_check_time.tv_sec = 0;
+19 -5
View File
@@ -1028,7 +1028,8 @@ irc_server_alloc (const char *name)
new_server->is_away = 0;
new_server->away_message = NULL;
new_server->away_time = 0;
new_server->lag = -1;
new_server->lag = 0;
new_server->lag_displayed = -1;
new_server->lag_check_time.tv_sec = 0;
new_server->lag_check_time.tv_usec = 0;
new_server->lag_next_check = time (NULL) +
@@ -3012,7 +3013,7 @@ irc_server_timer_cb (void *data, int remaining_calls)
(ptr_server->current_address) ?
ptr_server->current_address : "weechat");
gettimeofday (&(ptr_server->lag_check_time), NULL);
ptr_server->lag = -1;
ptr_server->lag = 0;
ptr_server->lag_last_refresh = 0;
}
else
@@ -3059,7 +3060,11 @@ irc_server_timer_cb (void *data, int remaining_calls)
&& (ptr_server->lag >= weechat_config_integer (irc_config_network_lag_min_show)))
{
ptr_server->lag_last_refresh = current_time;
weechat_bar_item_update ("lag");
if (ptr_server->lag != ptr_server->lag_displayed)
{
ptr_server->lag_displayed = ptr_server->lag;
weechat_bar_item_update ("lag");
}
}
/* lag timeout? => disconnect */
if ((weechat_config_integer (irc_config_network_lag_reconnect) > 0)
@@ -3083,7 +3088,11 @@ irc_server_timer_cb (void *data, int remaining_calls)
{
/* refresh lag item */
ptr_server->lag_last_refresh = current_time;
weechat_bar_item_update ("lag");
if (ptr_server->lag != ptr_server->lag_displayed)
{
ptr_server->lag_displayed = ptr_server->lag;
weechat_bar_item_update ("lag");
}
/* schedule next lag check in 5 seconds */
ptr_server->lag_check_time.tv_sec = 0;
@@ -4658,7 +4667,8 @@ irc_server_disconnect (struct t_irc_server *server, int switch_address,
server->cap_account_notify = 0;
server->is_away = 0;
server->away_time = 0;
server->lag = -1;
server->lag = 0;
server->lag_displayed = -1;
server->lag_check_time.tv_sec = 0;
server->lag_check_time.tv_usec = 0;
server->lag_next_check = time (NULL) +
@@ -5256,6 +5266,7 @@ irc_server_hdata_server_cb (void *data, const char *hdata_name)
WEECHAT_HDATA_VAR(struct t_irc_server, away_message, STRING, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, away_time, TIME, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag, INTEGER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_displayed, INTEGER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_check_time, OTHER, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_next_check, TIME, 0, NULL, NULL);
WEECHAT_HDATA_VAR(struct t_irc_server, lag_last_refresh, TIME, 0, NULL, NULL);
@@ -5494,6 +5505,8 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "lag", server->lag))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "lag_displayed", server->lag_displayed))
return 0;
if (!weechat_infolist_new_var_buffer (ptr_item, "lag_check_time", &(server->lag_check_time), sizeof (struct timeval)))
return 0;
if (!weechat_infolist_new_var_time (ptr_item, "lag_next_check", server->lag_next_check))
@@ -5837,6 +5850,7 @@ irc_server_print_log ()
weechat_log_printf (" away_message . . . . : '%s'", ptr_server->away_message);
weechat_log_printf (" away_time. . . . . . : %ld", ptr_server->away_time);
weechat_log_printf (" lag. . . . . . . . . : %d", ptr_server->lag);
weechat_log_printf (" lag_displayed. . . . : %d", ptr_server->lag_displayed);
weechat_log_printf (" lag_check_time . . . : tv_sec:%d, tv_usec:%d",
ptr_server->lag_check_time.tv_sec,
ptr_server->lag_check_time.tv_usec);
+1
View File
@@ -206,6 +206,7 @@ struct t_irc_server
char *away_message; /* away message, NULL if not away */
time_t away_time; /* time() when user marking as away */
int lag; /* lag (in milliseconds) */
int lag_displayed; /* last value displayed for lag */
struct timeval lag_check_time; /* last time lag was checked (ping sent) */
time_t lag_next_check; /* time for next check */
time_t lag_last_refresh; /* last refresh of lag item */
+1
View File
@@ -444,6 +444,7 @@ irc_upgrade_read_cb (void *data,
irc_upgrade_current_server->away_message = strdup (str);
irc_upgrade_current_server->away_time = weechat_infolist_time (infolist, "away_time");
irc_upgrade_current_server->lag = weechat_infolist_integer (infolist, "lag");
irc_upgrade_current_server->lag_displayed = weechat_infolist_integer (infolist, "lag_displayed");
buf = weechat_infolist_buffer (infolist, "lag_check_time", &size);
if (buf)
memcpy (&(irc_upgrade_current_server->lag_check_time), buf, size);