diff options
Diffstat (limited to 'em-format/e-mail-parser-extension.c')
-rw-r--r-- | em-format/e-mail-parser-extension.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/em-format/e-mail-parser-extension.c b/em-format/e-mail-parser-extension.c index 72f1fd8445..df8fc54dcb 100644 --- a/em-format/e-mail-parser-extension.c +++ b/em-format/e-mail-parser-extension.c @@ -52,18 +52,20 @@ e_mail_parser_extension_default_init (EMailParserExtensionInterface *interface) * @part_id: a #GString to which parser will append ID of the parsed part. * @flags: #EMailParserFlags * @cancellable: (allow-none) A #GCancellable + * @out_mail_parts: a #GQueue to deposit #EMailPart instances * * A virtual function reimplemented in all mail parser extensions. The function - * decodes and parses the @mime_part, creating one or more #EMailPart<!-//>s. + * decodes and parses the @mime_part, appending one or more #EMailPart<!-//>s + * to the @out_mail_parts queue. * - * When the function is unable to parse the @mime_part (either because it's broken - * or because it is a different mimetype then the extension is specialized for), the - * function will return @NULL indicating the #EMailParser, that it should pick - * another extension. + * When the function is unable to parse the @mime_part (either because it's + * broken or because it is a different MIME type then the extension is + * specialized for), the function will return %FALSE to indicate to the + * #EMailParser that it should pick another extension. * - * When the @mime_part contains for example multipart/mixed of one RFC822 message - * with an attachment and of one image, then parser must make sure that the - * returned #GSList is correctly ordered: + * When the @mime_part contains for example multipart/mixed of one RFC822 + * message with an attachment and of one image, then parser must make sure + * that parts are appeded to @out_mail_parts in the correct order. * * part1.rfc822.plain_text * part1.rfc822.attachment @@ -71,25 +73,33 @@ e_mail_parser_extension_default_init (EMailParserExtensionInterface *interface) * * Implementation of this function must be thread-safe. * - * Return value: Returns #GSList of #EMailPart<!-//>s when the part was succesfully - * parsed, returns @NULL when the parser is not able to parse the part. + * Returns: %TRUE if the @mime_part was handled (even if no + * #EMailPart<!-//>s were added to @out_mail_parts), or + * %FALSE if the @mime_part was not handled */ -GSList * +gboolean e_mail_parser_extension_parse (EMailParserExtension *extension, - EMailParser *parser, - CamelMimePart *mime_part, - GString *part_id, - GCancellable *cancellable) + EMailParser *parser, + CamelMimePart *mime_part, + GString *part_id, + GCancellable *cancellable, + GQueue *out_mail_parts) { EMailParserExtensionInterface *interface; - g_return_val_if_fail (E_IS_MAIL_PARSER_EXTENSION (extension), NULL); - g_return_val_if_fail (E_IS_MAIL_PARSER (parser), NULL); + g_return_val_if_fail (E_IS_MAIL_PARSER_EXTENSION (extension), FALSE); + g_return_val_if_fail (E_IS_MAIL_PARSER (parser), FALSE); interface = E_MAIL_PARSER_EXTENSION_GET_INTERFACE (extension); - g_return_val_if_fail (interface->parse != NULL, NULL); + g_return_val_if_fail (interface->parse != NULL, FALSE); - return interface->parse (extension, parser, mime_part, part_id, cancellable); + /* Check for cancellation before calling the method. */ + if (g_cancellable_is_cancelled (cancellable)) + return FALSE; + + return interface->parse ( + extension, parser, mime_part, part_id, + cancellable, out_mail_parts); } guint32 |