From c6f044a48165a99cfff36db49fe9a3ed41bd2541 Mon Sep 17 00:00:00 2001 From: Christoph Hohmann Date: Sat, 29 Nov 2003 13:33:45 +0000 Subject: [PATCH 1/1] 0.9.7claws7 * src/procmime.[ch] * src/mimeview.c o unknown disposition types should be handled as attachment (RFC2183) o missing headers should not default to inline (would make "Save All" useless when disposition header is not set by the sending mailer) o remove old MimeInfo data and cleanup --- ChangeLog.claws | 11 +++++++++++ configure.ac | 2 +- src/mimeview.c | 19 ++++++++----------- src/procmime.c | 17 +++++++++++------ src/procmime.h | 4 ---- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/ChangeLog.claws b/ChangeLog.claws index b395acaec..d29adfc11 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -1,3 +1,14 @@ +2003-11-29 [christoph] 0.9.7claws7 + + * src/procmime.[ch] + * src/mimeview.c + o unknown disposition types should be handled as + attachment (RFC2183) + o missing headers should not default to inline + (would make "Save All" useless when disposition header + is not set by the sending mailer) + o remove old MimeInfo data and cleanup + 2003-11-29 [luke] 0.9.7claws6 * src/procmime.[ch] diff --git a/configure.ac b/configure.ac index 1c075d10f..81b75dea0 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=9 MICRO_VERSION=7 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=6 +EXTRA_VERSION=7 if test $EXTRA_VERSION -eq 0; then VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}claws else diff --git a/src/mimeview.c b/src/mimeview.c index ab6c89fea..4d1f3d008 100644 --- a/src/mimeview.c +++ b/src/mimeview.c @@ -399,11 +399,10 @@ static const gchar *get_part_name(MimeInfo *partinfo) const gchar *name; name = procmime_mimeinfo_get_parameter(partinfo, "filename"); - if (name == NULL) { + if (name == NULL) name = procmime_mimeinfo_get_parameter(partinfo, "name"); - if (name == NULL) - name = ""; - } + if (name == NULL) + name = ""; return name; } @@ -434,9 +433,9 @@ static GtkCTreeNode *mimeview_append_part(MimeView *mimeview, str[COL_MIMETYPE] = content_type; str[COL_SIZE] = to_human_readable(partinfo->length); if (prefs_common.attach_desc) - str[COL_NAME] = get_part_description(partinfo); + str[COL_NAME] = (gchar *) get_part_description(partinfo); else - str[COL_NAME] = get_part_name(partinfo); + str[COL_NAME] = (gchar *) get_part_name(partinfo); node = gtk_ctree_insert_node(ctree, parent, NULL, str, 0, NULL, NULL, NULL, NULL, @@ -762,7 +761,7 @@ static void mimeview_start_drag(GtkWidget *widget, gint button, g_return_if_fail(mimeview != NULL); partinfo = mimeview_get_selected_part(mimeview); - if (partinfo->filename == NULL && partinfo->name == NULL) return; + if (partinfo->disposition == DISPOSITIONTYPE_INLINE) return; context = gtk_drag_begin(widget, mimeview->target_list, GDK_ACTION_COPY, button, event); @@ -933,10 +932,8 @@ static void mimeview_drag_data_get(GtkWidget *widget, partinfo = mimeview_get_selected_part(mimeview); if (!partinfo) return; - if (!partinfo->filename && !partinfo->name) return; - filename = partinfo->filename ? partinfo->filename : partinfo->name; - filename = g_basename(filename); + filename = g_basename(get_part_name(partinfo)); if (*filename == '\0') return; filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, @@ -993,7 +990,7 @@ static void mimeview_save_all(MimeView *mimeview) while (attachment != NULL) { if (attachment->type != MIMETYPE_MESSAGE && attachment->type != MIMETYPE_MULTIPART && - attachment->disposition == DISPOSITIONTYPE_ATTACHMENT) { + attachment->disposition != DISPOSITIONTYPE_INLINE) { static guint subst_cnt = 1; gchar *attachdir; gchar *attachname = g_strdup(get_part_name(attachment)); diff --git a/src/procmime.c b/src/procmime.c index 59224d3a1..c2814d699 100644 --- a/src/procmime.c +++ b/src/procmime.c @@ -56,6 +56,7 @@ MimeInfo *procmime_mimeinfo_new(void) mimeinfo = g_new0(MimeInfo, 1); mimeinfo->type = MIMETYPE_UNKNOWN; mimeinfo->encoding_type = ENC_UNKNOWN; + mimeinfo->disposition = DISPOSITIONTYPE_UNKNOWN; mimeinfo->parameters = g_hash_table_new(g_str_hash, g_str_equal); mimeinfo->node = g_node_new(mimeinfo); @@ -75,8 +76,6 @@ static gboolean free_func(GNode *node, gpointer data) { MimeInfo *mimeinfo = (MimeInfo *) node->data; - g_free(mimeinfo->encoding); - g_free(mimeinfo->name); if(mimeinfo->tmpfile) unlink(mimeinfo->filename); g_free(mimeinfo->filename); @@ -677,8 +676,14 @@ gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo) if ((mimeinfo->type == MIMETYPE_TEXT) && !g_strcasecmp(mimeinfo->subtype, "html")) base = "mimetmp.html"; else { - base = mimeinfo->name ? mimeinfo->name : "mimetmp"; - base = g_basename(base); + const gchar *basetmp; + + basetmp = procmime_mimeinfo_get_parameter(mimeinfo, "filename"); + if (basetmp == NULL) + basetmp = procmime_mimeinfo_get_parameter(mimeinfo, "name"); + if (basetmp == NULL) + basetmp = "mimetmp"; + base = g_basename(basetmp); if (*base == '\0') base = "mimetmp"; Xstrdup_a(base, base, return NULL); subst_for_filename(base); @@ -1139,7 +1144,7 @@ static void procmime_parse_content_disposition(const gchar *content_disposition, else if (!g_strcasecmp(str, "attachment")) mimeinfo->disposition = DISPOSITIONTYPE_ATTACHMENT; else - mimeinfo->disposition = DISPOSITIONTYPE_UNKNOWN; + mimeinfo->disposition = DISPOSITIONTYPE_ATTACHMENT; add_to_mimeinfo_parameters(&content_disp_parts[1], mimeinfo); g_strfreev(content_disp_parts); @@ -1207,7 +1212,7 @@ void procmime_parse_mimepart(MimeInfo *parent, if (content_disposition != NULL) procmime_parse_content_disposition(content_disposition, mimeinfo); else - mimeinfo->disposition = DISPOSITIONTYPE_INLINE; + mimeinfo->disposition = DISPOSITIONTYPE_UNKNOWN; /* Call parser for mime type */ switch (mimeinfo->type) { diff --git a/src/procmime.h b/src/procmime.h index cd309511d..c9e97f468 100644 --- a/src/procmime.h +++ b/src/procmime.h @@ -97,10 +97,6 @@ struct _MimeType struct _MimeInfo { - gchar *encoding; - - gchar *name; - /* Internal data */ gchar *filename; gboolean tmpfile; -- 2.25.1