diff options
author | Michael Vetter <jubalh@iodoru.org> | 2021-06-02 13:22:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-02 13:22:34 +0200 |
commit | 78447927eb1d2cbf224fa9bd906120fbdd5e72b8 (patch) | |
tree | b1ed35a7d8a13c6ec5a2bb2c328af194c2092a5d | |
parent | 45c930eaa565752062ca5acd4df0cb3003fbca88 (diff) | |
parent | c815547cba034954102fa8877e0e567ec38e0583 (diff) | |
download | profani-tty-78447927eb1d2cbf224fa9bd906120fbdd5e72b8.tar.gz |
Merge pull request #1549 from DebXWoody/bugfix/fix1530
Restart OMEMO Session after lost connection
-rw-r--r-- | src/ui/window_list.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/ui/window_list.c b/src/ui/window_list.c index c17ced50..19104ea0 100644 --- a/src/ui/window_list.c +++ b/src/ui/window_list.c @@ -52,6 +52,10 @@ #include "xmpp/roster_list.h" #include "tools/http_upload.h" +#ifdef HAVE_OMEMO +#include "omemo/omemo.h" +#endif + static GHashTable* windows; static int current; static Autocomplete wins_ac; @@ -864,6 +868,24 @@ wins_reestablished_connection(void) if (window->type != WIN_CONSOLE) { win_println(window, THEME_TEXT, "-", "Connection re-established."); +#ifdef HAVE_OMEMO + if (window->type == WIN_CHAT) { + ProfChatWin* chatwin = (ProfChatWin*)window; + assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); + if (chatwin->is_omemo) { + win_println(window, THEME_TEXT, "-", "Restarted OMEMO session."); + omemo_start_session(chatwin->barejid); + } + } else if (window->type == WIN_MUC) { + ProfMucWin* mucwin = (ProfMucWin*)window; + assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); + if (mucwin->is_omemo) { + win_println(window, THEME_TEXT, "-", "Restarted OMEMO session."); + omemo_start_muc_sessions(mucwin->roomjid); + } + } +#endif + // if current win, set current_win_dirty if (wins_is_current(window)) { win_update_virtual(window); @@ -1123,7 +1145,7 @@ wins_create_summary_attention() assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); has_attention = mucwin->has_attention; } - if ( has_attention) { + if (has_attention) { GString* line = g_string_new(""); int ui_index = GPOINTER_TO_INT(curr->data); @@ -1213,12 +1235,12 @@ wins_get_next_attention(void) values = g_list_sort(values, _wins_cmp_num); GList* curr = values; - ProfWin* current_window = wins_get_by_num( current); + ProfWin* current_window = wins_get_by_num(current); // search the current window - while(curr) { + while (curr) { ProfWin* window = curr->data; - if( current_window == window ) { + if (current_window == window) { current_window = window; curr = g_list_next(curr); break; @@ -1227,7 +1249,7 @@ wins_get_next_attention(void) } // Start from current window - while ( current_window && curr) { + while (current_window && curr) { ProfWin* window = curr->data; if (win_has_attention(window)) { g_list_free(values); @@ -1237,9 +1259,9 @@ wins_get_next_attention(void) } // Start from begin curr = values; - while ( current_window && curr) { + while (current_window && curr) { ProfWin* window = curr->data; - if( current_window == window) { + if (current_window == window) { // we are at current again break; } |