irc: send signal "irc_server_lag_changed", store lag in server buffer

The lag is stored in the local variable "lag" of the server buffer.
When there is no lag, the local variable does not exist.
v2.8-utf8proc
Sébastien Helleu 2017-03-18 14:53:28 +01:00
parent 9a8ec36cbd
commit d31e4f1d9a
7 changed files with 65 additions and 8 deletions

View File

@ -9017,6 +9017,11 @@ List of signals sent by WeeChat and plugins:
String: server name. |
Disconnected from server.
| irc | irc_server_lag_changed +
_(WeeChat ≥ 1.8)_ |
String: server name. |
Lag changed on the server.
| irc | irc_ignore_removing |
Pointer: ignore. |
Removing ignore.

View File

@ -9198,6 +9198,11 @@ Liste des signaux envoyés par WeeChat et les extensions :
Chaîne : nom du serveur. |
Déconnecté du serveur.
| irc | irc_server_lag_changed +
_(WeeChat ≥ 1.8)_ |
Chaîne : nom du serveur. |
Le lag a changé sur le serveur.
| irc | irc_ignore_removing |
Pointeur : ignore. |
Suppression d'un ignore en cours.

View File

@ -9293,6 +9293,12 @@ List of signals sent by WeeChat and plugins:
String: nome server. |
Disconnesso dal server.
// TRANSLATION MISSING
| irc | irc_server_lag_changed +
_(WeeChat ≥ 1.8)_ |
String: server name. |
Lag changed on the server.
| irc | irc_ignore_removing |
Puntatore: ignore. |
Rimozione dell'ignore.

View File

@ -9066,6 +9066,12 @@ WeeChat とプラグインが送信するシグナルのリスト:
String: サーバ名 |
サーバから切断された
// TRANSLATION MISSING
| irc | irc_server_lag_changed +
_(WeeChat バージョン 1.8 以上で利用可)_ |
String: サーバ名 |
Lag changed on the server.
| irc | irc_ignore_removing |
Pointer: 無視 |
無視条件を削除中

View File

@ -1838,17 +1838,19 @@ IRC_PROTOCOL_CALLBACK(pong)
gettimeofday (&tv, NULL);
server->lag = (int)(weechat_util_timeval_diff (&(server->lag_check_time),
&tv) / 1000);
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;
server->lag_check_time.tv_usec = 0;
server->lag_next_check = time (NULL) +
weechat_config_integer (irc_config_network_lag_check);
/* refresh lag bar item if needed */
if (server->lag != server->lag_displayed)
{
server->lag_displayed = server->lag;
irc_server_set_lag (server);
}
}
else
{

View File

@ -785,6 +785,34 @@ irc_server_set_prefix_modes_chars (struct t_irc_server *server,
}
}
/*
* Sets lag in server buffer (local variable), update bar item "lag"
* and send signal "irc_server_lag_changed" for the server.
*/
void
irc_server_set_lag (struct t_irc_server *server)
{
char str_lag[32];
if (server->lag >= weechat_config_integer (irc_config_network_lag_min_show))
{
snprintf (str_lag, sizeof (str_lag),
((server->lag_check_time.tv_sec == 0) || (server->lag < 1000)) ?
"%.3f" : "%.0f",
((float)(server->lag)) / 1000);
weechat_buffer_set (server->buffer, "localvar_set_lag", str_lag);
}
else
{
weechat_buffer_set (server->buffer, "localvar_del_lag", "");
}
weechat_hook_signal_send ("irc_server_lag_changed",
WEECHAT_HOOK_SIGNAL_STRING,
server->name);
weechat_bar_item_update ("lag");
}
/*
* Gets prefix_modes for server (for example: "ohv").
*
@ -3105,7 +3133,7 @@ irc_server_timer_cb (const void *pointer, void *data, int remaining_calls)
struct t_irc_redirect *ptr_redirect, *ptr_next_redirect;
time_t current_time;
static struct timeval tv;
int away_check;
int away_check, refresh_lag;
/* make C compiler happy */
(void) pointer;
@ -3179,6 +3207,7 @@ irc_server_timer_cb (const void *pointer, void *data, int remaining_calls)
/* compute lag */
if (ptr_server->lag_check_time.tv_sec != 0)
{
refresh_lag = 0;
gettimeofday (&tv, NULL);
ptr_server->lag = (int)(weechat_util_timeval_diff (&(ptr_server->lag_check_time),
&tv) / 1000);
@ -3191,7 +3220,7 @@ irc_server_timer_cb (const void *pointer, void *data, int remaining_calls)
if (ptr_server->lag != ptr_server->lag_displayed)
{
ptr_server->lag_displayed = ptr_server->lag;
weechat_bar_item_update ("lag");
refresh_lag = 1;
}
}
/* lag timeout? => disconnect */
@ -3219,7 +3248,7 @@ irc_server_timer_cb (const void *pointer, void *data, int remaining_calls)
if (ptr_server->lag != ptr_server->lag_displayed)
{
ptr_server->lag_displayed = ptr_server->lag;
weechat_bar_item_update ("lag");
refresh_lag = 1;
}
/* schedule next lag check in 5 seconds */
@ -3229,6 +3258,8 @@ irc_server_timer_cb (const void *pointer, void *data, int remaining_calls)
weechat_config_integer (irc_config_network_lag_check);
}
}
if (refresh_lag)
irc_server_set_lag (ptr_server);
}
/* remove redirects if timeout occurs */
@ -4831,6 +4862,7 @@ irc_server_disconnect (struct t_irc_server *server, int switch_address,
server->lag_next_check = time (NULL) +
weechat_config_integer (irc_config_network_lag_check);
server->lag_last_refresh = 0;
irc_server_set_lag (server);
server->monitor = 0;
server->monitor_time = 0;

View File

@ -289,6 +289,7 @@ extern const char *irc_server_get_isupport_value (struct t_irc_server *server,
const char *feature);
extern void irc_server_set_prefix_modes_chars (struct t_irc_server *server,
const char *prefix);
extern void irc_server_set_lag (struct t_irc_server *server);
extern const char *irc_server_get_prefix_modes (struct t_irc_server *server);
extern const char *irc_server_get_prefix_chars (struct t_irc_server *server);
extern int irc_server_get_prefix_mode_index (struct t_irc_server *server,