1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 04:46:37 +02:00

xfer: evaluate content of options xfer.file.download_path and xfer.file.upload_path (issue #388)

This commit is contained in:
Sébastien Helleu
2015-06-27 08:11:28 +02:00
parent 9e56308a4d
commit fdd9c03e5a
22 changed files with 359 additions and 170 deletions
+7 -5
View File
@@ -312,15 +312,17 @@ xfer_config_init ()
xfer_config_file_download_path = weechat_config_new_option (
xfer_config_file, ptr_section,
"download_path", "string",
N_("path for writing incoming files (\"%h\" will be replaced by "
"WeeChat home, \"~/.weechat\" by default)"),
N_("path for writing incoming files: \"%h\" at beginning of string is "
"replaced by WeeChat home (\"~/.weechat\" by default) "
"(note: content is evaluated, see /help eval)"),
NULL, 0, 0, "%h/xfer", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
xfer_config_file_upload_path = weechat_config_new_option (
xfer_config_file, ptr_section,
"upload_path", "string",
N_("path for reading files when sending (when no path is "
"specified by user) (\"%h\" will be replaced by "
"WeeChat home, \"~/.weechat\" by default)"),
N_("path for reading files when sending (when no path is specified "
"by user): \"%h\" at beginning of string is replaced by WeeChat "
"home (\"~/.weechat\" by default) "
"(note: content is evaluated, see /help eval)"),
NULL, 0, 0, "~", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
xfer_config_file_use_nick_in_filename = weechat_config_new_option (
xfer_config_file, ptr_section,
+12 -23
View File
@@ -80,37 +80,29 @@ xfer_file_resume (struct t_xfer *xfer, const char *filename)
void
xfer_file_find_filename (struct t_xfer *xfer)
{
const char *weechat_home, *dir_separator;
char *dir1, *dir2, *filename2;
const char *dir_separator;
char *path, *filename2;
int length;
if (!XFER_IS_FILE(xfer->type))
return;
dir1 = weechat_string_expand_home (weechat_config_string (xfer_config_file_download_path));
if (!dir1)
path = weechat_string_eval_path_home (
weechat_config_string (xfer_config_file_download_path),
NULL, NULL, NULL);
if (!path)
return;
weechat_home = weechat_info_get ("weechat_dir", "");
if (!weechat_home)
{
free (dir1);
return;
}
dir2 = weechat_string_replace (dir1, "%h", weechat_home);
if (!dir2)
{
free (dir1);
return;
}
xfer->local_filename = malloc (strlen (dir2) +
xfer->local_filename = malloc (strlen (path) +
strlen (xfer->remote_nick) +
strlen (xfer->filename) + 4);
if (!xfer->local_filename)
{
free (path);
return;
}
strcpy (xfer->local_filename, dir2);
strcpy (xfer->local_filename, path);
dir_separator = weechat_info_get("dir_separator", "");
if (dir_separator
&& (xfer->local_filename[strlen (xfer->local_filename) - 1] != dir_separator[0]))
@@ -122,10 +114,7 @@ xfer_file_find_filename (struct t_xfer *xfer)
}
strcat (xfer->local_filename, xfer->filename);
if (dir1)
free (dir1);
if (dir2 )
free (dir2);
free (path);
/* file already exists? */
if (access (xfer->local_filename, F_OK) == 0)
+27 -33
View File
@@ -140,21 +140,26 @@ xfer_signal_upgrade_cb (void *data, const char *signal, const char *type_data,
void
xfer_create_directories ()
{
const char *weechat_dir;
char *dir1, *dir2;
char *path;
/* create download directory */
weechat_dir = weechat_info_get ("weechat_dir", "");
if (weechat_dir)
path = weechat_string_eval_path_home (
weechat_config_string (xfer_config_file_download_path),
NULL, NULL, NULL);
if (path)
{
dir1 = weechat_string_expand_home (weechat_config_string (xfer_config_file_download_path));
dir2 = weechat_string_replace (dir1, "%h", weechat_dir);
if (dir2)
(void) weechat_mkdir (dir2, 0700);
if (dir1)
free (dir1);
if (dir2)
free (dir2);
(void) weechat_mkdir_parents (path, 0700);
free (path);
}
/* create upload directory */
path = weechat_string_eval_path_home (
weechat_config_string (xfer_config_file_upload_path),
NULL, NULL, NULL);
if (path)
{
(void) weechat_mkdir_parents (path, 0700);
free (path);
}
}
@@ -998,9 +1003,9 @@ xfer_add_cb (void *data, const char *signal, const char *type_data,
struct t_infolist *infolist;
const char *plugin_name, *plugin_id, *str_type, *str_protocol;
const char *remote_nick, *local_nick, *charset_modifier, *filename, *proxy;
const char *weechat_dir, *str_address, *str_port;
const char *str_address, *str_port;
int type, protocol, args, port_start, port_end, sock, port;
char *dir1, *dir2, *filename2, *short_filename, *pos, str_port_temp[16];
char *path, *filename2, *short_filename, *pos, str_port_temp[16];
struct stat st;
struct sockaddr_storage addr, own_ip_addr, bind_addr;
struct sockaddr *out_addr = (struct sockaddr*)&addr;
@@ -1104,41 +1109,30 @@ xfer_add_cb (void *data, const char *signal, const char *type_data,
filename2 = weechat_string_expand_home (filename);
else
{
dir1 = weechat_string_expand_home (weechat_config_string (xfer_config_file_upload_path));
if (!dir1)
path = weechat_string_eval_path_home (
weechat_config_string (xfer_config_file_upload_path),
NULL, NULL, NULL);
if (!path)
{
weechat_printf (NULL,
_("%s%s: not enough memory"),
weechat_prefix ("error"), XFER_PLUGIN_NAME);
goto error;
}
weechat_dir = weechat_info_get ("weechat_dir", "");
dir2 = weechat_string_replace (dir1, "%h", weechat_dir);
if (!dir2)
{
weechat_printf (NULL,
_("%s%s: not enough memory"),
weechat_prefix ("error"), XFER_PLUGIN_NAME);
free (dir1);
goto error;
}
filename2 = malloc (strlen (dir2) + strlen (filename) + 4);
filename2 = malloc (strlen (path) + strlen (filename) + 4);
if (!filename2)
{
weechat_printf (NULL,
_("%s%s: not enough memory"),
weechat_prefix ("error"), XFER_PLUGIN_NAME);
free (dir1);
free (dir2);
free (path);
goto error;
}
strcpy (filename2, dir2);
strcpy (filename2, path);
if (filename2[strlen (filename2) - 1] != DIR_SEPARATOR_CHAR)
strcat (filename2, DIR_SEPARATOR);
strcat (filename2, filename);
free (dir1);
free (dir2);
free (path);
}
#endif /* _WIN32 */
/* check if file exists */