aboutsummaryrefslogtreecommitdiff
path: root/libsylph/procmime.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2014-12-12 05:49:09 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2014-12-12 05:49:09 +0000
commit1fcff6946e9a2579514539c73a747519b2c19680 (patch)
treee2b77158ec6452414431f2abe4df6c89e899c262 /libsylph/procmime.c
parent0085a6a12bca001914e6fe846a553fa1c482e377 (diff)
made file names generated on opening attachments more user-friendly.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@3458 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph/procmime.c')
-rw-r--r--libsylph/procmime.c43
1 files changed, 40 insertions, 3 deletions
diff --git a/libsylph/procmime.c b/libsylph/procmime.c
index 298c3cf9..f8f88e4e 100644
--- a/libsylph/procmime.c
+++ b/libsylph/procmime.c
@@ -1471,12 +1471,38 @@ gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo)
{
static guint32 id = 0;
gchar *base;
- gchar *filename;
+ gchar *filename = NULL;
gchar f_prefix[10];
g_return_val_if_fail(mimeinfo != NULL, NULL);
- g_snprintf(f_prefix, sizeof(f_prefix), "%08x.", id++);
+ if (MIME_TEXT_HTML == mimeinfo->mime_type)
+ base = g_strdup("mimetmp.html");
+ else
+ base = procmime_get_part_file_name(mimeinfo);
+
+ do {
+ g_snprintf(f_prefix, sizeof(f_prefix), "%08x.", id++);
+ if (filename)
+ g_free(filename);
+ filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
+ f_prefix, base, NULL);
+ } while (is_file_entry_exist(filename));
+
+ g_free(base);
+
+ debug_print("procmime_get_tmp_file_name: %s\n", filename);
+
+ return filename;
+}
+
+gchar *procmime_get_tmp_file_name_for_user(MimeInfo *mimeinfo)
+{
+ gchar *base;
+ gchar *filename;
+ gint count = 1;
+
+ g_return_val_if_fail(mimeinfo != NULL, NULL);
if (MIME_TEXT_HTML == mimeinfo->mime_type)
base = g_strdup("mimetmp.html");
@@ -1484,10 +1510,21 @@ gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo)
base = procmime_get_part_file_name(mimeinfo);
filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
- f_prefix, base, NULL);
+ base, NULL);
+ while (is_file_entry_exist(filename)) {
+ gchar *base_alt;
+
+ base_alt = get_alt_filename(base, count++);
+ g_free(filename);
+ filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
+ base_alt, NULL);
+ g_free(base_alt);
+ }
g_free(base);
+ debug_print("procmime_get_tmp_file_name_for_user: %s\n", filename);
+
return filename;
}