about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
authorDebXWoody <stefan@debxwoody.de>2021-06-01 19:13:20 +0200
committerDebXWoody <stefan@debxwoody.de>2021-06-02 06:54:41 +0200
commitb235eb2351e8252999860bb6e35688ba1c8bd631 (patch)
treedf396045974f814080a9c12f4038e92c00e94d59 /src/ui
parent45c930eaa565752062ca5acd4df0cb3003fbca88 (diff)
downloadprofani-tty-b235eb2351e8252999860bb6e35688ba1c8bd631.tar.gz
Restart OMEMO Session after lost connection
When the connection has been re-established, chat and groupchat with OMEMO
should restat the OMEMO Session.

Fix: #1530

* Added HAVE_OMEMO
* clang-format and user output
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/window_list.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/ui/window_list.c b/src/ui/window_list.c
index c17ced50..2587e59b 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, "-", "Re-establish 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, "-", "Re-establish 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;
         }