Skip to content

Commit

Permalink
Merge pull request #1983 from profanity-im/feat/dl-location
Browse files Browse the repository at this point in the history
Change default download location
  • Loading branch information
jubalh authored Jun 20, 2024
2 parents 29fd819 + f147a5c commit 4d9852a
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/command/cmd_defs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2572,7 +2572,7 @@ static const struct cmd_t command_defs[] = {
"Open or save URLs. This works with OMEMO encrypted files as well.")
CMD_ARGS(
{ "open", "Open URL with predefined executable." },
{ "save", "Save URL to optional path, default path is current directory." })
{ "save", "Save URL to optional path. The location is displayed after successful download." })
CMD_EXAMPLES(
"/url open https://profanity-im.github.io",
"/url save https://profanity-im.github.io/guide/latest/userguide.html /home/user/Download/")
Expand Down
28 changes: 22 additions & 6 deletions src/command/cmd_funcs.c
Original file line number Diff line number Diff line change
Expand Up @@ -9391,10 +9391,26 @@ cmd_slashguard(ProfWin* window, const char* const command, gchar** args)
}

gchar*
_prepare_filename(gchar* url, gchar* path)
_prepare_filename(ProfWin* window, gchar* url, gchar* path)
{
char* jid = NULL;

// lets skip private windows and put those files in general download folder
switch (window->type) {
case WIN_CHAT:
ProfChatWin* chatwin = (ProfChatWin*)window;
jid = chatwin->barejid;
break;
case WIN_MUC:
ProfMucWin* mucwin = (ProfMucWin*)window;
jid = mucwin->roomjid;
break;
default:
break;
}

// Ensure that the downloads directory exists for saving cleartexts.
auto_gchar gchar* downloads_dir = path ? get_expanded_path(path) : files_get_data_path(DIR_DOWNLOADS);
auto_gchar gchar* downloads_dir = path ? get_expanded_path(path) : files_get_download_path(jid);
if (g_mkdir_with_parents(downloads_dir, S_IRWXU) != 0) {
cons_show_error("Failed to create download directory "
"at '%s' with error '%s'",
Expand All @@ -9411,7 +9427,7 @@ _prepare_filename(gchar* url, gchar* path)
void
_url_aesgcm_method(ProfWin* window, const char* cmd_template, gchar* url, gchar* path)
{
auto_gchar gchar* filename = _prepare_filename(url, path);
auto_gchar gchar* filename = _prepare_filename(window, url, path);
if (!filename)
return;
auto_char char* id = get_random_string(4);
Expand All @@ -9434,7 +9450,7 @@ _url_aesgcm_method(ProfWin* window, const char* cmd_template, gchar* url, gchar*
static gboolean
_download_install_plugin(ProfWin* window, gchar* url, gchar* path)
{
auto_gchar gchar* filename = _prepare_filename(url, path);
auto_gchar gchar* filename = _prepare_filename(window, url, path);
if (!filename)
return FALSE;
HTTPDownload* download = malloc(sizeof(HTTPDownload));
Expand All @@ -9452,7 +9468,7 @@ _download_install_plugin(ProfWin* window, gchar* url, gchar* path)
void
_url_http_method(ProfWin* window, const char* cmd_template, gchar* url, gchar* path)
{
auto_gchar gchar* filename = _prepare_filename(url, path);
auto_gchar gchar* filename = _prepare_filename(window, url, path);
if (!filename)
return;
auto_char char* id = get_random_string(4);
Expand Down Expand Up @@ -9556,7 +9572,7 @@ cmd_url_save(ProfWin* window, const char* const command, gchar** args)
_url_aesgcm_method(window, cmd_template, url, path);
#endif
} else if (cmd_template != NULL) {
auto_gchar gchar* filename = _prepare_filename(url, NULL);
auto_gchar gchar* filename = _prepare_filename(window, url, NULL);
if (!filename)
return TRUE;
_url_external_method(cmd_template, url, filename);
Expand Down
16 changes: 16 additions & 0 deletions src/config/files.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,22 @@ files_get_data_path(const char* const location)
return g_strdup_printf("%s/profanity/%s", xdg_data, location);
}

gchar*
files_get_download_path(const char* const jid)
{
auto_gchar gchar* xdg_data = _files_get_xdg_data_home();

if (jid) {
auto_char char* account_dir = str_replace(jid, "@", "_at_");
GDateTime* now = g_date_time_new_now_local();
auto_gchar gchar* date = g_date_time_format(now, "%Y_%m_%d");
g_date_time_unref(now);
return g_strdup_printf("%s/profanity/%s/%s/%s", xdg_data, DIR_DOWNLOADS, account_dir, date);
} else {
return g_strdup_printf("%s/profanity/%s", xdg_data, DIR_DOWNLOADS);
}
}

gchar*
files_get_account_data_path(const char* const specific_dir, const char* const jid)
{
Expand Down
1 change: 1 addition & 0 deletions src/config/files.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ void files_create_directories(void);

gchar* files_get_config_path(const char* const config_base);
gchar* files_get_data_path(const char* const location);
gchar* files_get_download_path(const char* const jid);
gchar* files_get_account_data_path(const char* const specific_dir, const char* const jid);

gchar* files_get_log_file(const char* const log_file);
Expand Down

0 comments on commit 4d9852a

Please sign in to comment.