about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2020-12-10 09:17:12 +0100
committerGitHub <noreply@github.com>2020-12-10 09:17:12 +0100
commitf0bfa6929673cdcf016b15ea4413e67c6a07291d (patch)
treed860654770066790a7ffb453fe461ef2ecd931ad
parentaa1f9071256596f5e94f602f10be38e2e43e9cfd (diff)
parenta1486012d2b92bd1472b3b33e90a237fccd12576 (diff)
downloadprofani-tty-f0bfa6929673cdcf016b15ea4413e67c6a07291d.tar.gz
Merge pull request #1450 from wstrm/issue-1449
Cast chat/muc window to correct type and refactor cmd_sendfile
-rw-r--r--src/command/cmd_funcs.c57
-rw-r--r--src/common.c12
-rw-r--r--src/ui/chatwin.c2
3 files changed, 41 insertions, 30 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index 68153270..2397ccfc 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -4889,43 +4889,52 @@ cmd_sendfile(ProfWin* window, const char* const command, gchar** args)
 
     FILE* fh = fdopen(fd, "rb");
 
+    gboolean omemo_enabled = FALSE;
+    gboolean sendfile_enabled = TRUE;
+
     switch (window->type) {
     case WIN_MUC:
+    {
+        ProfMucWin* mucwin = (ProfMucWin*)window;
+        assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
+        omemo_enabled = mucwin->is_omemo == TRUE;
+        break;
+    }
     case WIN_CHAT:
     {
         ProfChatWin* chatwin = (ProfChatWin*)window;
-
-#ifdef HAVE_OMEMO
-        if (chatwin->is_omemo) {
-            char* err = NULL;
-            alt_scheme = OMEMO_AESGCM_URL_SCHEME;
-            alt_fragment = _add_omemo_stream(&fd, &fh, &err);
-            if (err != NULL) {
-                cons_show_error(err);
-                win_println(window, THEME_ERROR, "-", err);
-                goto out;
-            }
-            break;
-        }
-#endif
-
-        if (window->type == WIN_CHAT) {
-            assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
-            if ((chatwin->pgp_send && !prefs_get_boolean(PREF_PGP_SENDFILE))
-                || (chatwin->is_otr && !prefs_get_boolean(PREF_OTR_SENDFILE))) {
-                cons_show_error("Uploading unencrypted files disabled. See /otr sendfile or /pgp sendfile.");
-                win_println(window, THEME_ERROR, "-", "Sending encrypted files via http_upload is not possible yet.");
-                goto out;
-            }
-        }
+        assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
+        omemo_enabled = chatwin->is_omemo == TRUE;
+        sendfile_enabled = !((chatwin->pgp_send == TRUE && !prefs_get_boolean(PREF_PGP_SENDFILE))
+                             || (chatwin->is_otr == TRUE && !prefs_get_boolean(PREF_OTR_SENDFILE)));
         break;
     }
+
     case WIN_PRIVATE: // We don't support encryption in private MUC windows.
     default:
         cons_show_error("Unsupported window for file transmission.");
         goto out;
     }
 
+    if (!sendfile_enabled) {
+        cons_show_error("Uploading unencrypted files disabled. See /otr sendfile or /pgp sendfile.");
+        win_println(window, THEME_ERROR, "-", "Sending encrypted files via http_upload is not possible yet.");
+        goto out;
+    }
+
+    if (omemo_enabled) {
+#ifdef HAVE_OMEMO
+        char* err = NULL;
+        alt_scheme = OMEMO_AESGCM_URL_SCHEME;
+        alt_fragment = _add_omemo_stream(&fd, &fh, &err);
+        if (err != NULL) {
+            cons_show_error(err);
+            win_println(window, THEME_ERROR, "-", err);
+            goto out;
+        }
+#endif
+    }
+
     HTTPUpload* upload = malloc(sizeof(HTTPUpload));
     upload->window = window;
 
diff --git a/src/common.c b/src/common.c
index 8dbf1619..fc1f60ab 100644
--- a/src/common.c
+++ b/src/common.c
@@ -629,15 +629,15 @@ _basename_from_url(const char* url)
 }
 
 gchar*
-get_expanded_path(const char *path)
+get_expanded_path(const char* path)
 {
     GString* exp_path = g_string_new("");
-    gchar *result;
+    gchar* result;
 
     if (strlen(path) >= 2 && path[0] == '~' && path[1] == '/') {
-        g_string_printf(exp_path, "%s/%s", getenv("HOME"), path+2);
+        g_string_printf(exp_path, "%s/%s", getenv("HOME"), path + 2);
     } else {
-        g_string_printf(exp_path, "%s", path+2);
+        g_string_printf(exp_path, "%s", path);
     }
 
     result = exp_path->str;
@@ -649,11 +649,11 @@ get_expanded_path(const char *path)
 gchar*
 unique_filename_from_url(const char* url, const char* path)
 {
-    gchar *realpath;
+    gchar* realpath;
 
     // Default to './' as path when none has been provided.
     if (path == NULL) {
-        realpath = strdup("./");
+        realpath = g_strdup("./");
     } else {
         realpath = get_expanded_path(path);
     }
diff --git a/src/ui/chatwin.c b/src/ui/chatwin.c
index 1861232b..d1737561 100644
--- a/src/ui/chatwin.c
+++ b/src/ui/chatwin.c
@@ -80,6 +80,7 @@ chatwin_new(const char* const barejid)
         }
     }
 
+    chatwin->is_omemo = FALSE;
 #ifdef HAVE_OMEMO
     if (omemo_automatic_start(barejid)) {
         omemo_start_session(barejid);
@@ -90,6 +91,7 @@ chatwin_new(const char* const barejid)
     if (prefs_get_boolean(PREF_MAM)) {
         iq_mam_request(chatwin);
     }
+
     // XEP-0373: OpenPGP for XMPP
     chatwin->is_ox = FALSE;