1
1
mirror of https://github.com/profanity-im/profanity.git synced 2025-02-02 15:08:15 -05:00

Merge pull request #1454 from wstrm/fix-missing-download-dir

Create download directory under XDG data path
This commit is contained in:
Michael Vetter 2020-12-10 19:49:00 +01:00 committed by GitHub
commit 560a15e2a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 13 deletions

View File

@ -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;
}

View File

@ -123,7 +123,7 @@ http_file_get(void* userdata)
"output file at '%s' for writing (%s).",
download->url, download->filename,
g_strerror(errno));
return NULL;
goto out;
}
char* cert_path = prefs_get_string(PREF_TLS_CERTPATH);
@ -185,9 +185,6 @@ http_file_get(void* userdata)
}
}
download_processes = g_slist_remove(download_processes, download);
pthread_mutex_unlock(&lock);
if (download->cmd_template != NULL) {
gchar** argv = format_call_external_argv(download->cmd_template,
download->url,
@ -208,6 +205,11 @@ http_file_get(void* userdata)
free(download->cmd_template);
}
out:
download_processes = g_slist_remove(download_processes, download);
pthread_mutex_unlock(&lock);
free(download->url);
free(download->filename);
free(download);