diff options
Diffstat (limited to 'src/event/server_events.c')
-rw-r--r-- | src/event/server_events.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/event/server_events.c b/src/event/server_events.c index b76f7cfa..b496e3e2 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -66,6 +66,9 @@ #include "ui/ui.h" +gint _success_connections_counter = 0; +GDateTime *_last_muc_message; + void sv_ev_login_account_success(char *account_name, gboolean secured) { @@ -102,6 +105,15 @@ sv_ev_login_account_success(char *account_name, gboolean secured) log_info("%s logged in successfully", account->jid); + // if we have been connected before + if (_success_connections_counter > 0) + { + cons_show("Connection re-established."); + wins_reestablished_connection(); + } + + _success_connections_counter++; + if (account->startscript) { scripts_exec(account->startscript); } @@ -261,7 +273,19 @@ sv_ev_room_history(const char *const room_jid, const char *const nick, GDateTime *timestamp, const char *const message) { ProfMucWin *mucwin = wins_get_muc(room_jid); - if (mucwin) { + + // if this is the first successful connection + if (_success_connections_counter == 1) { + // save timestamp of last received muc message + // so we dont display, if there was no activity in channel, once we reconnect + if (_last_muc_message) { + g_date_time_unref(_last_muc_message); + } + _last_muc_message = g_date_time_new_now_local(); + } + + gboolean younger = g_date_time_compare(_last_muc_message, timestamp) < 0 ? TRUE : FALSE; + if (mucwin && (_success_connections_counter == 1 || younger )) { mucwin_history(mucwin, nick, timestamp, message); } } @@ -338,6 +362,12 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha } } + // save timestamp of last received muc message + if (_last_muc_message) { + g_date_time_unref(_last_muc_message); + } + _last_muc_message = g_date_time_new_now_local(); + if (prefs_do_room_notify(is_current, mucwin->roomjid, mynick, nick, new_message, mention, triggers != NULL)) { Jid *jidp = jid_create(mucwin->roomjid); notify_room_message(nick, jidp->localpart, num, new_message); |