summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2004-04-06 09:38:24 +0000
committerMichael Zucci <zucchi@src.gnome.org>2004-04-06 09:38:24 +0000
commit013ea595c04628d5cb5017ce7f2df22c41631a07 (patch)
treec01f5c036c9ecfe150deabb003f89446f73a8310
parent1940da6f47cf6d9a0409d5a16395cf9aebdfbaff (diff)
downloadevolution-data-server-013ea595c04628d5cb5017ce7f2df22c41631a07.tar.gz
** See bug #56110.
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.
-rw-r--r--camel/ChangeLog15
-rw-r--r--camel/camel-folder.c4
-rw-r--r--camel/providers/imap/camel-imap-folder.c62
3 files changed, 69 insertions, 12 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index b5eb030ac..ace9510f8 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 83be9dd27..d467e6bad 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 a24d1b64d..88322ae24 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