static void accumulate_body (MuMsg *msg, MuMsgPart *mpart, BodyData *bdata) { char *txt; gboolean err; /* if it looks like an attachment, skip it */ if (mpart->part_type & MU_MSG_PART_TYPE_ATTACHMENT) return; if (!GMIME_IS_PART(mpart->data)) return; txt = NULL; err = TRUE; if (!bdata->want_html && (mpart->part_type & MU_MSG_PART_TYPE_TEXT_PLAIN)) txt = mu_msg_mime_part_to_string ( (GMimePart*)mpart->data, &err); else if (bdata->want_html && (mpart->part_type & MU_MSG_PART_TYPE_TEXT_HTML)) txt = mu_msg_mime_part_to_string ( (GMimePart*)mpart->data, &err); if (!err && txt) bdata->gstr = g_string_append (bdata->gstr, txt); g_free (txt); }
static void accumulate_text_part (MuMsg *msg, MuMsgPart *part, GString **gstrp) { GMimeContentType *ctype; gboolean err; char *txt; ctype = g_mime_object_get_content_type ((GMimeObject*)part->data); if (!g_mime_content_type_is_type (ctype, "text", "plain")) return; /* not plain text */ txt = mu_msg_mime_part_to_string ((GMimePart*)part->data, &err); if (txt) g_string_append (*gstrp, txt); g_free (txt); }
char* mu_msg_part_get_text (MuMsg *msg, MuMsgPart *self, MuMsgOptions opts) { GMimeObject *mobj; GMimeMessage *mime_msg; gboolean err; g_return_val_if_fail (msg, NULL); g_return_val_if_fail (self && self->data, NULL); mobj = (GMimeObject*)self->data; err = FALSE; if (GMIME_IS_PART (mobj)) { if (self->part_type & MU_MSG_PART_TYPE_TEXT_PLAIN) return mu_msg_mime_part_to_string ((GMimePart*)mobj, &err); else return NULL; /* non-text MimePart */ } mime_msg = NULL; if (GMIME_IS_MESSAGE_PART (mobj)) mime_msg = g_mime_message_part_get_message ((GMimeMessagePart*)mobj); else if (GMIME_IS_MESSAGE (mobj)) mime_msg = (GMimeMessage*)mobj; if (mime_msg) { GString *gstr; gstr = g_string_sized_new (4096); handle_children (msg, mime_msg, opts, self->index, (MuMsgPartForeachFunc)accumulate_text, &gstr); return g_string_free (gstr, FALSE); } else { g_warning ("%s: cannot get text for %s", __FUNCTION__, G_OBJECT_TYPE_NAME (mobj)); return NULL; } }
char* mu_msg_part_get_text (MuMsg *msg, MuMsgPart *self, MuMsgOptions opts) { GMimeObject *mobj; GMimeMessage *mime_msg; gboolean err; g_return_val_if_fail (msg, NULL); g_return_val_if_fail (self && GMIME_IS_OBJECT(self->data), NULL); mobj = (GMimeObject*)self->data; err = FALSE; if (GMIME_IS_PART (mobj)) { if (self->part_type & MU_MSG_PART_TYPE_TEXT_PLAIN) return mu_msg_mime_part_to_string ((GMimePart*)mobj, &err); else return NULL; /* non-text MimePart */ } mime_msg = NULL; if (GMIME_IS_MESSAGE_PART (mobj)) mime_msg = g_mime_message_part_get_message ((GMimeMessagePart*)mobj); else if (GMIME_IS_MESSAGE (mobj)) mime_msg = (GMimeMessage*)mobj; /* apparently, g_mime_message_part_get_message may still * return NULL */ if (mime_msg) return get_text_from_mime_msg (msg, mime_msg, opts); return NULL; }