[balsa] Use GMimeMultipart api to traverse message
- From: Peter Bloomfield <PeterB src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [balsa] Use GMimeMultipart api to traverse message
- Date: Thu, 1 Oct 2009 22:06:42 +0000 (UTC)
commit 369e22d23aa964df6b2295ebef69938cdd79c319
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Thu Oct 1 18:06:35 2009 -0400
Use GMimeMultipart api to traverse message
ChangeLog | 6 ++++
libbalsa/mailbox_mbox.c | 65 ++++++++++++++++++++--------------------------
2 files changed, 34 insertions(+), 37 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 5e7aab2..a09ce33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-01 Peter Bloomfield
+
+ * libbalsa/mailbox_mbox.c (lbm_mbox_prepare_object,
+ lbm_mbox_armored_object): use GMimeMultipart api to traverse
+ message ourselves instead of using g_mime_multipart_foreach.
+
2009-09-30 Peter Bloomfield
* src/toolbar-factory.c (tm_do_popup_menu): do not crash when
diff --git a/libbalsa/mailbox_mbox.c b/libbalsa/mailbox_mbox.c
index 502b5c8..e9de351 100644
--- a/libbalsa/mailbox_mbox.c
+++ b/libbalsa/mailbox_mbox.c
@@ -1847,46 +1847,39 @@ static void update_message_status_headers(GMimeMessage *message,
* Encode text parts as quoted-printable.
*/
static void
-lbm_mbox_prepare_object(GMimeObject * parent, GMimeObject * mime_part,
- gpointer data)
+lbm_mbox_prepare_object(GMimeObject * object)
{
- guint *skip_count = data;
-
- g_mime_object_remove_header(mime_part, "Content-Length");
-
- if (GMIME_IS_MESSAGE(mime_part))
- lbm_mbox_prepare_object(NULL,
- ((GMimeMessage *) mime_part)->mime_part,
- skip_count);
- else if (GMIME_IS_MULTIPART(mime_part)) {
- if (*skip_count
- || GMIME_IS_MULTIPART_SIGNED(mime_part)
- || GMIME_IS_MULTIPART_ENCRYPTED(mime_part)) {
- /* Do not break crypto. */
- if (parent)
- /* We must skip the children, which will be visited
- * because of the recursive descent in
- * g_mime_multipart_foreach. */
- *skip_count +=
- g_mime_multipart_get_count(GMIME_MULTIPART(mime_part));
- } else if (!parent)
- g_mime_multipart_foreach((GMimeMultipart *) mime_part,
- lbm_mbox_prepare_object, skip_count);
- } else if (*skip_count)
- -- * skip_count;
- else if (GMIME_IS_MESSAGE_PART(mime_part))
- lbm_mbox_prepare_object(NULL, GMIME_OBJECT(((GMimeMessagePart *)
- mime_part)->message),
- skip_count);
- else if (!GMIME_IS_MESSAGE_PARTIAL(mime_part)) {
+ g_mime_object_remove_header(object, "Content-Length");
+
+ if (GMIME_IS_MULTIPART(object)) {
+ /* Do not break crypto */
+ if (!(GMIME_IS_MULTIPART_SIGNED(object) ||
+ GMIME_IS_MULTIPART_ENCRYPTED(object))) {
+ GMimeMultipart *multipart = (GMimeMultipart *) object;
+ gint i, count = g_mime_multipart_get_count(multipart);
+
+ for (i = 0; i < count; ++i)
+ lbm_mbox_prepare_object(g_mime_multipart_get_part
+ (multipart, i));
+ }
+ } else if (GMIME_IS_MESSAGE_PART(object))
+ lbm_mbox_prepare_object(GMIME_OBJECT
+ (((GMimeMessagePart *) object)->message));
+ else if (GMIME_IS_MESSAGE(object))
+ lbm_mbox_prepare_object(((GMimeMessage *) object)->mime_part);
+ else if (GMIME_IS_PART(object)) {
+ GMimePart *mime_part = (GMimePart *) object;
GMimeContentEncoding encoding;
GMimeContentType *mime_type;
- encoding = g_mime_part_get_content_encoding(GMIME_PART(mime_part));
+ if (GMIME_IS_MESSAGE_PARTIAL(mime_part))
+ return;
+
+ encoding = g_mime_part_get_content_encoding(mime_part);
if (encoding == GMIME_CONTENT_ENCODING_BASE64)
return;
- mime_type = g_mime_object_get_content_type(mime_part);
+ mime_type = g_mime_object_get_content_type(object);
if (g_mime_content_type_is_type(mime_type, "text", "plain")) {
const gchar *format =
g_mime_content_type_get_parameter(mime_type, "format");
@@ -1896,8 +1889,7 @@ lbm_mbox_prepare_object(GMimeObject * parent, GMimeObject * mime_part,
}
g_mime_part_set_content_encoding
- (GMIME_PART(mime_part),
- GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE);
+ (mime_part, GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE);
}
}
@@ -1906,12 +1898,11 @@ lbm_mbox_armored_object(GMimeStream * stream)
{
GMimeParser *parser;
GMimeObject *object;
- guint skip_count = 0;
parser = g_mime_parser_new_with_stream(stream);
object = GMIME_OBJECT(g_mime_parser_construct_message(parser));
g_object_unref(parser);
- lbm_mbox_prepare_object(NULL, object, &skip_count);
+ lbm_mbox_prepare_object(object);
return object;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]