about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2020-12-09 09:13:31 +0100
committerGitHub <noreply@github.com>2020-12-09 09:13:31 +0100
commitf10edd202f64237d3d941da2da173f56d115f7ac (patch)
tree3c4ec87fec42498b299c4ce1828a7ccbc04b51aa /src
parent7a319df6c80c472adcf416c8737e7b156854352b (diff)
parent5179b253c4ac7283a2c73cb5bc0da440c8012de1 (diff)
downloadprofani-tty-f10edd202f64237d3d941da2da173f56d115f7ac.tar.gz
Merge pull request #1447 from profanity-im/omemomediasharing-impr
omemo media sharing related polishing
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_funcs.c10
-rw-r--r--src/common.c30
-rw-r--r--src/common.h1
-rw-r--r--src/config/preferences.c5
4 files changed, 35 insertions, 11 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index fd9d2ffd..68153270 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -4854,18 +4854,12 @@ gboolean
 cmd_sendfile(ProfWin* window, const char* const command, gchar** args)
 {
     jabber_conn_status_t conn_status = connection_get_status();
-    char* filename = args[0];
+    gchar* filename;
     char* alt_scheme = NULL;
     char* alt_fragment = NULL;
 
     // expand ~ to $HOME
-    if (filename[0] == '~' && filename[1] == '/') {
-        if (asprintf(&filename, "%s/%s", getenv("HOME"), filename + 2) == -1) {
-            return TRUE;
-        }
-    } else {
-        filename = strdup(filename);
-    }
+    filename = get_expanded_path(args[0]);
 
     if (access(filename, R_OK) != 0) {
         cons_show_error("Uploading '%s' failed: File not found!", filename);
diff --git a/src/common.c b/src/common.c
index 10be280a..327b3586 100644
--- a/src/common.c
+++ b/src/common.c
@@ -629,18 +629,40 @@ _basename_from_url(const char* url)
 }
 
 gchar*
+get_expanded_path(const char *path)
+{
+    GString* exp_path = g_string_new("");
+    gchar *result;
+
+    if (strlen(path) >= 2 && path[0] == '~' && path[1] == '/') {
+        g_string_printf(exp_path, "%s/%s", getenv("HOME"), path+2);
+    } else {
+        g_string_printf(exp_path, "%s", path+2);
+    }
+
+    result = exp_path->str;
+    g_string_free(exp_path, FALSE);
+
+    return result;
+}
+
+gchar*
 unique_filename_from_url(const char* url, const char* path)
 {
+    gchar *realpath;
+
     // Default to './' as path when none has been provided.
     if (path == NULL) {
-        path = "./";
+        realpath = "./";
+    } else {
+        realpath = get_expanded_path(path);
     }
 
     // Resolves paths such as './../.' for path.
-    GFile* target = g_file_new_for_commandline_arg(path);
+    GFile* target = g_file_new_for_commandline_arg(realpath);
     gchar* filename = NULL;
 
-    if (_has_directory_suffix(path) || g_file_test(path, G_FILE_TEST_IS_DIR)) {
+    if (_has_directory_suffix(realpath) || g_file_test(realpath, G_FILE_TEST_IS_DIR)) {
         // The target should be used as a directory. Assume that the basename
         // should be derived from the URL.
         char* basename = _basename_from_url(url);
@@ -654,11 +676,13 @@ unique_filename_from_url(const char* url, const char* path)
     gchar* unique_filename = _unique_filename(filename);
     if (unique_filename == NULL) {
         g_free(filename);
+        g_free(realpath);
         return NULL;
     }
 
     g_object_unref(target);
     g_free(filename);
+    g_free(realpath);
 
     return unique_filename;
 }
diff --git a/src/common.h b/src/common.h
index 088ba953..44a61a79 100644
--- a/src/common.h
+++ b/src/common.h
@@ -108,5 +108,6 @@ gboolean call_external(gchar** argv, gchar*** const output_ptr, gchar*** const e
 gchar** format_call_external_argv(const char* template, const char* url, const char* filename);
 
 gchar* unique_filename_from_url(const char* url, const char* path);
+gchar* get_expanded_path(const char *path);
 
 #endif
diff --git a/src/config/preferences.c b/src/config/preferences.c
index 9d7d4f7b..98ac5a0d 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -182,6 +182,11 @@ _prefs_load(void)
         g_key_file_set_string(prefs, PREF_GROUP_EXECUTABLES, "avatar.cmd", value);
         g_key_file_remove_key(prefs, PREF_GROUP_LOGGING, "avatar.cmd", NULL);
     }
+    
+    // 0.10 will have omemo media sharing. so disabling of senfile introduced in 0.9 is not needed (#1270)
+    if (g_key_file_has_key(prefs, PREF_GROUP_OMEMO, "sendfile", NULL)) {
+        g_key_file_remove_key(prefs, PREF_GROUP_OMEMO, "sendfile", NULL);
+    }
 
     _save_prefs();