diff options
-rw-r--r-- | camel/ChangeLog | 15 | ||||
-rw-r--r-- | camel/camel-folder.c | 4 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-folder.c | 62 |
3 files changed, 69 insertions, 12 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index b5eb030ac4..ace9510f85 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,20 @@ 2004-04-06 Not Zed <NotZed@Ximian.com> + ** See bug #56110. + + * providers/imap/camel-imap-folder.c (get_content): more debug! + (get_content): if we have no content-type header set on a sub-part + of a multipart/digest, then we need to set it to message/rfc822 as + in the multipart/digest rfc (2046 or so?). + + * camel-folder.c (camel_folder_get_message): output this stuff as + folder debug. + + * providers/imap/camel-imap-folder.c (imap_get_message): add some + imap:folder debug. + (get_content): get xx.TEXT rather than xx if we're from a message + parent part. + ** See bug #56464. * camel-folder.c (camel_folder_transfer_messages_to): do not lock diff --git a/camel/camel-folder.c b/camel/camel-folder.c index 83be9dd27d..d467e6bade 100644 --- a/camel/camel-folder.c +++ b/camel/camel-folder.c @@ -1057,10 +1057,10 @@ camel_folder_get_message (CamelFolder *folder, const gchar *uid, CamelException CAMEL_FOLDER_UNLOCK(folder, lock); - /* FIXME: need a better verbose debug framework */ - if (ret && (camel_verbose_debug & 2)) { + if (ret && camel_debug_start(":folder")) { printf("CamelFolder:get_message('%s', '%s') =\n", folder->full_name, uid); camel_mime_message_dump(ret, FALSE); + camel_debug_end(); } return ret; diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c index a24d1b64df..88322ae245 100644 --- a/camel/providers/imap/camel-imap-folder.c +++ b/camel/providers/imap/camel-imap-folder.c @@ -69,7 +69,7 @@ #include "camel-private.h" #include "camel-string-utils.h" #include "camel-file-utils.h" - +#include "camel-debug.h" #define d(x) x @@ -1762,12 +1762,12 @@ get_content (CamelImapFolder *imap_folder, const char *uid, /* we assume that part->content_type is more accurate/full than ci->type */ camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER (body_mp), CAMEL_DATA_WRAPPER (part)->mime_type); - spec = g_alloca (strlen (part_spec) + 6); + spec = g_alloca(strlen(part_spec) + 6); if (frommsg) - sprintf (spec, part_spec[0] ? "%s.TEXT" : "TEXT", part_spec); + sprintf(spec, part_spec[0] ? "%s.TEXT" : "TEXT", part_spec); else strcpy(spec, part_spec); - g_free (part_spec); + g_free(part_spec); stream = camel_imap_folder_fetch_data (imap_folder, uid, spec, FALSE, ex); if (stream) { @@ -1783,7 +1783,7 @@ get_content (CamelImapFolder *imap_folder, const char *uid, } else if (camel_content_type_is (ci->type, "multipart", "*")) { CamelMultipart *body_mp; char *child_spec; - int speclen, num; + int speclen, num, isdigest; if (camel_content_type_is (ci->type, "multipart", "encrypted")) body_mp = (CamelMultipart *) camel_multipart_encrypted_new (); @@ -1793,6 +1793,7 @@ get_content (CamelImapFolder *imap_folder, const char *uid, /* need to set this so it grabs the boundary and other info about the multipart */ /* we assume that part->content_type is more accurate/full than ci->type */ camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER (body_mp), CAMEL_DATA_WRAPPER (part)->mime_type); + isdigest = camel_content_type_is(((CamelDataWrapper *)part)->mime_type, "multipart", "digest"); speclen = strlen (part_spec); child_spec = g_malloc (speclen + 17); /* dot + 10 + dot + MIME + nul */ @@ -1827,13 +1828,32 @@ get_content (CamelImapFolder *imap_folder, const char *uid, g_free (child_spec); return NULL; } - - camel_data_wrapper_set_mime_type_field(content, camel_mime_part_get_content_type(part)); + + if (camel_debug("imap:folder")) { + char *ct = camel_content_type_format(camel_mime_part_get_content_type((CamelMimePart *)part)); + char *ct2 = camel_content_type_format(ci->type); + + printf("Setting part content type to '%s' contentinfo type is '%s'\n", ct, ct2); + g_free(ct); + g_free(ct2); + } + + /* if we had no content-type header on a multipart/digest sub-part, then we need to + treat it as message/rfc822 instead */ + if (isdigest && camel_medium_get_header((CamelMedium *)part, "content-type") == NULL) { + CamelContentType *ct = camel_content_type_new("message", "rfc822"); + + camel_data_wrapper_set_mime_type_field(content, ct); + camel_content_type_unref(ct); + } else { + camel_data_wrapper_set_mime_type_field(content, camel_mime_part_get_content_type(part)); + } + camel_medium_set_content_object (CAMEL_MEDIUM (part), content); - camel_object_unref (CAMEL_OBJECT (content)); + camel_object_unref(content); camel_multipart_add_part (body_mp, part); - camel_object_unref (CAMEL_OBJECT (part)); + camel_object_unref(part); ci = ci->next; } @@ -1847,9 +1867,16 @@ get_content (CamelImapFolder *imap_folder, const char *uid, return content; } else { CamelTransferEncoding enc; + char *spec; + + spec = g_alloca(strlen(part_spec) + 6); + if (frommsg) + sprintf(spec, part_spec[0] ? "%s.TEXT" : "1.TEXT", part_spec); + else + strcpy(spec, part_spec[0]?part_spec:"1"); enc = ci->encoding?camel_transfer_encoding_from_string(ci->encoding):CAMEL_TRANSFER_ENCODING_DEFAULT; - content = camel_imap_wrapper_new (imap_folder, ci->type, enc, uid, *part_spec ? part_spec : "1", part); + content = camel_imap_wrapper_new (imap_folder, ci->type, enc, uid, spec, part); g_free (part_spec); return content; } @@ -1890,6 +1917,15 @@ get_message (CamelImapFolder *imap_folder, const char *uid, return NULL; } + if (camel_debug("imap:folder")) { + char *ct = camel_content_type_format(camel_mime_part_get_content_type((CamelMimePart *)msg)); + char *ct2 = camel_content_type_format(ci->type); + + printf("Setting message content type to '%s' contentinfo type is '%s'\n", ct, ct2); + g_free(ct); + g_free(ct2); + } + camel_data_wrapper_set_mime_type_field(content, camel_mime_part_get_content_type((CamelMimePart *)msg)); camel_medium_set_content_object (CAMEL_MEDIUM (msg), content); camel_object_unref (CAMEL_OBJECT (content)); @@ -2030,6 +2066,12 @@ imap_get_message (CamelFolder *folder, const char *uid, CamelException *ex) camel_imap_response_free (store, response); } } + + if (camel_debug_start("imap:folder")) { + printf("Folder get message '%s' folder info ->\n", uid); + camel_message_info_dump(mi); + camel_debug_end(); + } /* FETCH returned OK, but we didn't parse a BODY * response. Courier will return invalid BODY |