1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-10 11:43:13 +02:00

Away check is now customizable (with new irc_away_check option)

This commit is contained in:
Sebastien Helleu
2005-02-05 17:39:48 +00:00
parent 8921e45815
commit 85bd530a88
16 changed files with 162 additions and 24 deletions
+3 -3
View File
@@ -1,12 +1,12 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2005-02-01
ChangeLog - 2005-02-05
Version 0.1.0 (under dev!):
* away nicks are now displayed with another color
* added away indicator
* away nicks are now displayed with another color (new option: "irc_away_check")
* added away indicator in status bar
* added lag indicator (and auto-disconnect after a delay if important lag)
* improved completion: now completes commands arguments (IRC and internal),
when only one completion matches, completion mechanism is stoped (to
+21 -1
View File
@@ -465,6 +465,7 @@ int cfg_irc_display_away;
char *cfg_irc_default_msg_away;
char *cfg_irc_default_msg_part;
char *cfg_irc_default_msg_quit;
int cfg_irc_away_check;
int cfg_irc_lag_check;
int cfg_irc_lag_min_show;
int cfg_irc_lag_disconnect;
@@ -486,6 +487,10 @@ t_config_option weechat_options_irc[] =
N_("default quit message ('%v' will be replaced by WeeChat version in string)"),
OPTION_TYPE_STRING, 0, 0, 0,
"WeeChat %v", NULL, NULL, &cfg_irc_default_msg_quit, config_change_noop },
{ "irc_away_check", N_("interval between two checks for away"),
N_("interval between two checks for away (in minutes, 0 = never check)"),
OPTION_TYPE_INT, 0, INT_MAX, 1,
NULL, NULL, &cfg_irc_away_check, NULL, config_change_away_check },
{ "irc_lag_check", N_("interval between two checks for lag"),
N_("interval between two checks for lag (in seconds)"),
OPTION_TYPE_INT, 30, INT_MAX, 60,
@@ -749,11 +754,26 @@ config_change_buffer_content ()
*/
void
config_change_color()
config_change_color ()
{
gui_init_colors ();
}
/*
* config_change_away_check: called when away check is changed
*/
void
config_change_away_check ()
{
check_away = 0;
if (cfg_irc_away_check == 0)
{
/* reset away flag for all nicks/chans/servers */
server_remove_away ();
}
}
/*
* config_option_set_value: set new value for an option
* return: 0 if success
+2
View File
@@ -155,6 +155,7 @@ extern int cfg_irc_display_away;
extern char *cfg_irc_default_msg_away;
extern char *cfg_irc_default_msg_part;
extern char *cfg_irc_default_msg_quit;
extern int cfg_irc_away_check;
extern int cfg_irc_lag_check;
extern int cfg_irc_lag_min_show;
extern int cfg_irc_lag_disconnect;
@@ -182,6 +183,7 @@ extern void config_change_title ();
extern void config_change_buffers ();
extern void config_change_buffer_content ();
extern void config_change_color ();
extern void config_change_away_check ();
extern int config_option_set_value (t_config_option *, char *);
extern t_config_option *config_option_search (char *);
extern int config_set_value (char *, char *);
+12 -5
View File
@@ -659,10 +659,12 @@ gui_main_loop ()
gui_draw_buffer_infobar (gui_current_window->buffer, 1);
}
/* second has changed ? => count down time for infobar, if needed */
/* second has changed ? */
if (local_time->tm_sec != old_sec)
{
old_sec = local_time->tm_sec;
/* infobar count down */
if (gui_infobar && gui_infobar->remaining_time > 0)
{
gui_infobar->remaining_time--;
@@ -672,11 +674,16 @@ gui_main_loop ()
gui_draw_buffer_infobar (gui_current_window->buffer, 1);
}
}
check_away++;
if (check_away >= CHECK_AWAY_DELAY)
/* away check */
if (cfg_irc_away_check != 0)
{
check_away = 0;
server_check_away ();
check_away++;
if (check_away >= (cfg_irc_away_check * 60))
{
check_away = 0;
server_check_away ();
}
}
}
+19
View File
@@ -155,6 +155,25 @@ string_is_channel (char *string)
return (strpbrk (first_char, CHANNEL_PREFIX)) ? 1 : 0;
}
/*
* channel_remove_away: remove away for all nicks on a channel
*/
void
channel_remove_away (t_irc_channel *channel)
{
t_irc_nick *ptr_nick;
if (channel->type == CHAT_CHANNEL)
{
for (ptr_nick = channel->nicks; ptr_nick; ptr_nick = ptr_nick->next_nick)
{
ptr_nick->is_away = 0;
}
gui_draw_buffer_nick (channel->buffer, 0);
}
}
/*
* channel_check_away: check for away on a channel
*/
+2 -1
View File
@@ -3011,7 +3011,8 @@ irc_cmd_recv_366 (t_irc_server *server, char *host, char *arguments)
gui_printf_color (ptr_channel->buffer,
COLOR_WIN_CHAT_DARK, ")\n");
irc_cmd_send_mode (server, ptr_channel->name);
channel_check_away (server, ptr_channel);
if (cfg_irc_away_check > 0)
channel_check_away (server, ptr_channel);
}
else
{
+20
View File
@@ -932,6 +932,26 @@ server_name_already_exists (char *name)
return 0;
}
/*
* server_remove_away: remove away for all chans/nicks (for all servers)
*/
void
server_remove_away ()
{
t_irc_server *ptr_server;
t_irc_channel *ptr_channel;
for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server)
{
for (ptr_channel = ptr_server->channels; ptr_channel; ptr_channel = ptr_channel->next_channel)
{
if (ptr_channel->type == CHAT_CHANNEL)
channel_remove_away (ptr_channel);
}
}
}
/*
* server_check_away: check for away on all channels (for all servers)
*/
+2 -2
View File
@@ -56,8 +56,6 @@
#define DEFAULT_IRC_PORT 6667
#define CHECK_AWAY_DELAY 60
/* DCC types & status */
#define DCC_CHAT_RECV 0 /* receiving DCC chat */
@@ -242,6 +240,7 @@ extern void server_disconnect_all ();
extern t_irc_server *server_search (char *);
extern int server_get_number_connected ();
extern int server_name_already_exists (char *);
extern void server_remove_away ();
extern void server_check_away ();
extern void server_set_away (t_irc_server *, char *, int);
@@ -252,6 +251,7 @@ extern void channel_free (t_irc_server *, t_irc_channel *);
extern void channel_free_all (t_irc_server *);
extern t_irc_channel *channel_search (t_irc_server *, char *);
extern int string_is_channel (char *);
extern void channel_remove_away (t_irc_channel *);
extern void channel_check_away (t_irc_server *, t_irc_channel *);
extern void channel_set_away (t_irc_channel *, char *, int);
+3 -3
View File
@@ -1,12 +1,12 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2005-02-01
ChangeLog - 2005-02-05
Version 0.1.0 (under dev!):
* away nicks are now displayed with another color
* added away indicator
* away nicks are now displayed with another color (new option: "irc_away_check")
* added away indicator in status bar
* added lag indicator (and auto-disconnect after a delay if important lag)
* improved completion: now completes commands arguments (IRC and internal),
when only one completion matches, completion mechanism is stoped (to
+21 -1
View File
@@ -465,6 +465,7 @@ int cfg_irc_display_away;
char *cfg_irc_default_msg_away;
char *cfg_irc_default_msg_part;
char *cfg_irc_default_msg_quit;
int cfg_irc_away_check;
int cfg_irc_lag_check;
int cfg_irc_lag_min_show;
int cfg_irc_lag_disconnect;
@@ -486,6 +487,10 @@ t_config_option weechat_options_irc[] =
N_("default quit message ('%v' will be replaced by WeeChat version in string)"),
OPTION_TYPE_STRING, 0, 0, 0,
"WeeChat %v", NULL, NULL, &cfg_irc_default_msg_quit, config_change_noop },
{ "irc_away_check", N_("interval between two checks for away"),
N_("interval between two checks for away (in minutes, 0 = never check)"),
OPTION_TYPE_INT, 0, INT_MAX, 1,
NULL, NULL, &cfg_irc_away_check, NULL, config_change_away_check },
{ "irc_lag_check", N_("interval between two checks for lag"),
N_("interval between two checks for lag (in seconds)"),
OPTION_TYPE_INT, 30, INT_MAX, 60,
@@ -749,11 +754,26 @@ config_change_buffer_content ()
*/
void
config_change_color()
config_change_color ()
{
gui_init_colors ();
}
/*
* config_change_away_check: called when away check is changed
*/
void
config_change_away_check ()
{
check_away = 0;
if (cfg_irc_away_check == 0)
{
/* reset away flag for all nicks/chans/servers */
server_remove_away ();
}
}
/*
* config_option_set_value: set new value for an option
* return: 0 if success
+2
View File
@@ -155,6 +155,7 @@ extern int cfg_irc_display_away;
extern char *cfg_irc_default_msg_away;
extern char *cfg_irc_default_msg_part;
extern char *cfg_irc_default_msg_quit;
extern int cfg_irc_away_check;
extern int cfg_irc_lag_check;
extern int cfg_irc_lag_min_show;
extern int cfg_irc_lag_disconnect;
@@ -182,6 +183,7 @@ extern void config_change_title ();
extern void config_change_buffers ();
extern void config_change_buffer_content ();
extern void config_change_color ();
extern void config_change_away_check ();
extern int config_option_set_value (t_config_option *, char *);
extern t_config_option *config_option_search (char *);
extern int config_set_value (char *, char *);
+12 -5
View File
@@ -659,10 +659,12 @@ gui_main_loop ()
gui_draw_buffer_infobar (gui_current_window->buffer, 1);
}
/* second has changed ? => count down time for infobar, if needed */
/* second has changed ? */
if (local_time->tm_sec != old_sec)
{
old_sec = local_time->tm_sec;
/* infobar count down */
if (gui_infobar && gui_infobar->remaining_time > 0)
{
gui_infobar->remaining_time--;
@@ -672,11 +674,16 @@ gui_main_loop ()
gui_draw_buffer_infobar (gui_current_window->buffer, 1);
}
}
check_away++;
if (check_away >= CHECK_AWAY_DELAY)
/* away check */
if (cfg_irc_away_check != 0)
{
check_away = 0;
server_check_away ();
check_away++;
if (check_away >= (cfg_irc_away_check * 60))
{
check_away = 0;
server_check_away ();
}
}
}
+19
View File
@@ -155,6 +155,25 @@ string_is_channel (char *string)
return (strpbrk (first_char, CHANNEL_PREFIX)) ? 1 : 0;
}
/*
* channel_remove_away: remove away for all nicks on a channel
*/
void
channel_remove_away (t_irc_channel *channel)
{
t_irc_nick *ptr_nick;
if (channel->type == CHAT_CHANNEL)
{
for (ptr_nick = channel->nicks; ptr_nick; ptr_nick = ptr_nick->next_nick)
{
ptr_nick->is_away = 0;
}
gui_draw_buffer_nick (channel->buffer, 0);
}
}
/*
* channel_check_away: check for away on a channel
*/
+2 -1
View File
@@ -3011,7 +3011,8 @@ irc_cmd_recv_366 (t_irc_server *server, char *host, char *arguments)
gui_printf_color (ptr_channel->buffer,
COLOR_WIN_CHAT_DARK, ")\n");
irc_cmd_send_mode (server, ptr_channel->name);
channel_check_away (server, ptr_channel);
if (cfg_irc_away_check > 0)
channel_check_away (server, ptr_channel);
}
else
{
+20
View File
@@ -932,6 +932,26 @@ server_name_already_exists (char *name)
return 0;
}
/*
* server_remove_away: remove away for all chans/nicks (for all servers)
*/
void
server_remove_away ()
{
t_irc_server *ptr_server;
t_irc_channel *ptr_channel;
for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server)
{
for (ptr_channel = ptr_server->channels; ptr_channel; ptr_channel = ptr_channel->next_channel)
{
if (ptr_channel->type == CHAT_CHANNEL)
channel_remove_away (ptr_channel);
}
}
}
/*
* server_check_away: check for away on all channels (for all servers)
*/
+2 -2
View File
@@ -56,8 +56,6 @@
#define DEFAULT_IRC_PORT 6667
#define CHECK_AWAY_DELAY 60
/* DCC types & status */
#define DCC_CHAT_RECV 0 /* receiving DCC chat */
@@ -242,6 +240,7 @@ extern void server_disconnect_all ();
extern t_irc_server *server_search (char *);
extern int server_get_number_connected ();
extern int server_name_already_exists (char *);
extern void server_remove_away ();
extern void server_check_away ();
extern void server_set_away (t_irc_server *, char *, int);
@@ -252,6 +251,7 @@ extern void channel_free (t_irc_server *, t_irc_channel *);
extern void channel_free_all (t_irc_server *);
extern t_irc_channel *channel_search (t_irc_server *, char *);
extern int string_is_channel (char *);
extern void channel_remove_away (t_irc_channel *);
extern void channel_check_away (t_irc_server *, t_irc_channel *);
extern void channel_set_away (t_irc_channel *, char *, int);