aboutsummaryrefslogtreecommitdiffstats
path: root/em-format/e-mail-parser-image.c
diff options
context:
space:
mode:
Diffstat (limited to 'em-format/e-mail-parser-image.c')
-rw-r--r--em-format/e-mail-parser-image.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/em-format/e-mail-parser-image.c b/em-format/e-mail-parser-image.c
index b252714215..12242746f2 100644
--- a/em-format/e-mail-parser-image.c
+++ b/em-format/e-mail-parser-image.c
@@ -71,22 +71,21 @@ static const gchar *parser_mime_types[] = { "image/gif",
"image/pjpeg",
NULL };
-static GSList *
+static gboolean
empe_image_parse (EMailParserExtension *extension,
EMailParser *parser,
CamelMimePart *part,
GString *part_id,
- GCancellable *cancellable)
+ GCancellable *cancellable,
+ GQueue *out_mail_parts)
{
+ GQueue work_queue = G_QUEUE_INIT;
EMailPart *mail_part;
const gchar *tmp;
gchar *cid;
gint len;
CamelContentType *ct;
- if (g_cancellable_is_cancelled (cancellable))
- return NULL;
-
tmp = camel_mime_part_get_content_id (part);
if (tmp) {
cid = g_strdup_printf ("cid:%s", tmp);
@@ -107,13 +106,15 @@ empe_image_parse (EMailParserExtension *extension,
g_string_truncate (part_id, len);
- if (!cid) {
- return e_mail_parser_wrap_as_attachment (
- parser, part, g_slist_append (NULL, mail_part),
- part_id, cancellable);
- }
+ g_queue_push_tail (&work_queue, mail_part);
+
+ if (cid == NULL)
+ e_mail_parser_wrap_as_attachment (
+ parser, part, part_id, &work_queue);
+
+ e_queue_transfer (&work_queue, out_mail_parts);
- return g_slist_append (NULL, mail_part);
+ return TRUE;
}
static const gchar **