about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorWilliam Wennerström <william@wstrm.dev>2020-12-10 19:04:32 +0100
committerWilliam Wennerström <william@wstrm.dev>2020-12-10 19:04:32 +0100
commite70c64b74a0bd3f2dc9445a214888e5166a9c51d (patch)
tree38f35051173da40b4d4218353b7f86d8f08814d9 /src
parent3b093553e13bce306a21af065ae5a66fe8359780 (diff)
downloadprofani-tty-e70c64b74a0bd3f2dc9445a214888e5166a9c51d.tar.gz
Create download directory under XDG data path
 * If the downloads directory does not exist, create it.
 * Change some cons_show to cons_show_error (because they log errors).
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_funcs.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index 2397ccfc..74052c9e 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -9118,7 +9118,7 @@ gboolean
 cmd_url_open(ProfWin* window, const char* const command, gchar** args)
 {
     if (window->type != WIN_CHAT && window->type != WIN_MUC && window->type != WIN_PRIVATE) {
-        cons_show("url open not supported in this window");
+        cons_show_error("url open not supported in this window");
         return TRUE;
     }
 
@@ -9134,20 +9134,37 @@ cmd_url_open(ProfWin* window, const char* const command, gchar** args)
 
     scheme = g_uri_parse_scheme(url);
     if (scheme == NULL) {
-        cons_show("URL '%s' is not valid.", args[1]);
+        cons_show_error("URL '%s' is not valid.", args[1]);
         goto out;
     }
 
     cmd_template = prefs_get_string(PREF_URL_OPEN_CMD);
     if (cmd_template == NULL) {
-        cons_show("No default `url open` command found in executables preferences.");
+        cons_show_error("No default `url open` command found in executables preferences.");
         goto out;
     }
 
 #ifdef HAVE_OMEMO
     // OMEMO URLs (aesgcm://) must be saved and decrypted before being opened.
-    if (0 == g_strcmp0(scheme, "aesgcm")) {
-        filename = unique_filename_from_url(url, files_get_data_path(DIR_DOWNLOADS));
+    if (g_strcmp0(scheme, "aesgcm") == 0) {
+
+        // Ensure that the downloads directory exists for saving cleartexts.
+        gchar* downloads_dir = files_get_data_path(DIR_DOWNLOADS);
+        if (g_mkdir_with_parents(downloads_dir, S_IRWXU) != 0) {
+            cons_show_error("Failed to create download directory "
+                            "at '%s' with error '%s'",
+                            downloads_dir, strerror(errno));
+            g_free(downloads_dir);
+            goto out;
+        }
+
+        // Generate an unique filename from the URL that should be stored in the
+        // downloads directory.
+        filename = unique_filename_from_url(url, downloads_dir);
+        g_free(downloads_dir);
+
+        // Download, decrypt and open the cleartext version of the AESGCM
+        // encrypted file.
         _url_aesgcm_method(window, cmd_template, url, filename);
         goto out;
     }
@@ -9186,15 +9203,15 @@ cmd_url_save(ProfWin* window, const char* const command, gchar** args)
 
     scheme = g_uri_parse_scheme(url);
     if (scheme == NULL) {
-        cons_show("URL '%s' is not valid.", args[1]);
+        cons_show_error("URL '%s' is not valid.", args[1]);
         goto out;
     }
 
     filename = unique_filename_from_url(url, path);
     if (filename == NULL) {
-        cons_show("Failed to generate unique filename"
-                  "from URL '%s' for path '%s'",
-                  url, path);
+        cons_show_error("Failed to generate unique filename"
+                        "from URL '%s' for path '%s'",
+                        url, path);
         goto out;
     }