From 435b57e641e766ed04f6e0b5910390c238ce04dc Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Fri, 30 Oct 2009 10:09:19 +0100 Subject: [PATCH] Fix message "Day changed to", sometimes displayed at wrong time (bug #26959) --- ChangeLog | 4 ++- src/core/wee-config.c | 59 ++++++++++++++++++++++++++++--------------- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 427e8d2c2..630b5ec76 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ WeeChat ChangeLog ================= FlashCode -v0.3.1-dev, 2009-10-21 +v0.3.1-dev, 2009-10-30 Version 0.3.1 (under dev!) @@ -28,6 +28,8 @@ Version 0.3.1 (under dev!) * irc: improve error management on socket error (recv/send) * irc: improve mask used by command /kickban * xfer: add missing charset decoding/encoding for IRC DCC chat (bug #27482) +* gui: fix message "Day changed to", sometimes displayed at wrong time + (bug #26959) * gui: fix bug with URL selection in some terminals (caused by horizontal lines) (bug #27700) * gui: use default auto completion for arguments of unknown commands diff --git a/src/core/wee-config.c b/src/core/wee-config.c index 8c3ae6ab4..e572d87d3 100644 --- a/src/core/wee-config.c +++ b/src/core/wee-config.c @@ -185,9 +185,10 @@ struct t_config_option *config_plugin_extension; struct t_config_option *config_plugin_path; struct t_config_option *config_plugin_save_config_on_unload; -/* hooks */ +/* other */ struct t_hook *config_day_change_timer = NULL; +int config_day_change_old_day = -1; /* @@ -351,25 +352,31 @@ config_day_change_timer_cb (void *data, int remaining_calls) gettimeofday (&tv_time, NULL); local_time = localtime (&tv_time.tv_sec); - - strftime (text_time, sizeof (text_time), - CONFIG_STRING(config_look_day_change_time_format), - local_time); - text_time2 = string_iconv_to_internal (NULL, text_time); - gui_add_hotlist = 0; - for (ptr_buffer = gui_buffers; ptr_buffer; - ptr_buffer = ptr_buffer->next_buffer) - { - if (ptr_buffer->type == GUI_BUFFER_TYPE_FORMATTED) - gui_chat_printf (ptr_buffer, - _("\t\tDay changed to %s"), - (text_time2) ? - text_time2 : text_time); - } - if (text_time2) - free (text_time2); - gui_add_hotlist = 1; + if ((config_day_change_old_day >= 0) + && (local_time->tm_mday != config_day_change_old_day)) + { + strftime (text_time, sizeof (text_time), + CONFIG_STRING(config_look_day_change_time_format), + local_time); + text_time2 = string_iconv_to_internal (NULL, text_time); + gui_add_hotlist = 0; + for (ptr_buffer = gui_buffers; ptr_buffer; + ptr_buffer = ptr_buffer->next_buffer) + { + if (ptr_buffer->type == GUI_BUFFER_TYPE_FORMATTED) + gui_chat_printf (ptr_buffer, + _("\t\tDay changed to %s"), + (text_time2) ? + text_time2 : text_time); + } + if (text_time2) + free (text_time2); + gui_add_hotlist = 1; + } + + config_day_change_old_day = local_time->tm_mday; + return WEECHAT_RC_OK; } @@ -380,6 +387,9 @@ config_day_change_timer_cb (void *data, int remaining_calls) void config_change_day_change (void *data, struct t_config_option *option) { + struct timeval tv_time; + struct tm *local_time; + /* make C compiler happy */ (void) data; (void) option; @@ -387,12 +397,18 @@ config_change_day_change (void *data, struct t_config_option *option) if (CONFIG_BOOLEAN(config_look_day_change)) { if (!config_day_change_timer) + { + gettimeofday (&tv_time, NULL); + local_time = localtime (&tv_time.tv_sec); + config_day_change_old_day = local_time->tm_mday; + config_day_change_timer = hook_timer (NULL, - 24 * 3600 * 1000, - 24 * 3600, + 60 * 1000, /* each minute */ + 60, /* when second is 00 */ 0, &config_day_change_timer_cb, NULL); + } } else { @@ -400,6 +416,7 @@ config_change_day_change (void *data, struct t_config_option *option) { unhook (config_day_change_timer); config_day_change_timer = NULL; + config_day_change_old_day = -1; } } }