"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/em-format/e-mail-parser-message-deliverystatus.c" between
evolution-3.32.4.tar.xz and evolution-3.34.0.tar.xz

About: Evolution is a personal information management application that provides integrated mail, calendaring and address book functionality (GNOME desktop).

e-mail-parser-message-deliverystatus.c  (evolution-3.32.4.tar.xz):e-mail-parser-message-deliverystatus.c  (evolution-3.34.0.tar.xz)
skipping to change at line 25 skipping to change at line 25
* *
*/ */
#include "evolution-config.h" #include "evolution-config.h"
#include <string.h> #include <string.h>
#include <e-util/e-util.h> #include <e-util/e-util.h>
#include "e-mail-part-attachment.h" #include "e-mail-part-attachment.h"
#include "e-mail-part-headers.h"
#include "e-mail-parser-extension.h" #include "e-mail-parser-extension.h"
typedef EMailParserExtension EMailParserMessageDeliveryStatus; typedef EMailParserExtension EMailParserMessageDeliveryStatus;
typedef EMailParserExtensionClass EMailParserMessageDeliveryStatusClass; typedef EMailParserExtensionClass EMailParserMessageDeliveryStatusClass;
GType e_mail_parser_message_delivery_status_get_type (void); GType e_mail_parser_message_delivery_status_get_type (void);
G_DEFINE_TYPE ( G_DEFINE_TYPE (
EMailParserMessageDeliveryStatus, EMailParserMessageDeliveryStatus,
e_mail_parser_message_delivery_status, e_mail_parser_message_delivery_status,
E_TYPE_MAIL_PARSER_EXTENSION) E_TYPE_MAIL_PARSER_EXTENSION)
static const gchar *parser_mime_types[] = { static const gchar *parser_mime_types[] = {
"message/delivery-status", "message/delivery-status",
"message/feedback-report", "message/feedback-report",
"message/disposition-notification", "message/disposition-notification",
"text/rfc822-headers",
NULL NULL
}; };
static gboolean static gboolean
empe_msg_deliverystatus_parse (EMailParserExtension *extension, empe_msg_deliverystatus_parse (EMailParserExtension *extension,
EMailParser *parser, EMailParser *parser,
CamelMimePart *part, CamelMimePart *part,
GString *part_id, GString *part_id,
GCancellable *cancellable, GCancellable *cancellable,
GQueue *out_mail_parts) GQueue *out_mail_parts)
{ {
GQueue work_queue = G_QUEUE_INIT; GQueue work_queue = G_QUEUE_INIT;
CamelContentType *ct; CamelContentType *ct;
EMailPart *mail_part; EMailPart *mail_part = NULL;
gboolean show_inline;
gsize len; gsize len;
ct = camel_mime_part_get_content_type (part);
show_inline = ct && camel_content_type_is (ct, "message", "feedback-repor
t");
len = part_id->len; len = part_id->len;
g_string_append (part_id, ".delivery-status"); g_string_append (part_id, ".delivery-status");
mail_part = e_mail_part_new (part, part_id->str);
e_mail_part_set_mime_type (mail_part, "text/plain"); if (ct && camel_content_type_is (ct, "text", "rfc822-headers")) {
CamelMimePart *replace_part;
CamelMimeParser *parser;
CamelStream *stream;
gboolean success;
show_inline = TRUE;
stream = camel_stream_mem_new ();
parser = camel_mime_parser_new ();
replace_part = camel_mime_part_new ();
success = camel_data_wrapper_decode_to_stream_sync (camel_medium_
get_content (CAMEL_MEDIUM (part)), stream, cancellable, NULL);
if (success) {
g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, canc
ellable, NULL);
success = camel_mime_parser_init_with_stream (parser, str
eam, NULL) != -1;
}
success = success && camel_mime_part_construct_from_parser_sync (
replace_part, parser, cancellable, NULL);
if (success) {
const CamelNameValueArray *headers;
headers = camel_medium_get_headers (CAMEL_MEDIUM (replace
_part));
success = camel_name_value_array_get_length (headers) > 0
;
}
if (success) {
mail_part = e_mail_part_headers_new (replace_part, part_i
d->str);
e_mail_part_set_mime_type (mail_part, "text/rfc822-header
s");
}
g_object_unref (replace_part);
g_object_unref (parser);
g_object_unref (stream);
}
if (!mail_part) {
mail_part = e_mail_part_new (part, part_id->str);
e_mail_part_set_mime_type (mail_part, "text/plain");
}
g_string_truncate (part_id, len); g_string_truncate (part_id, len);
g_queue_push_tail (&work_queue, mail_part); g_queue_push_tail (&work_queue, mail_part);
/* The only reason for having a separate parser for /* The only reason for having a separate parser for
* message/delivery-status is to display the part as an attachment */ * message/delivery-status is to display the part as an attachment */
e_mail_parser_wrap_as_attachment (parser, part, part_id, &work_queue); e_mail_parser_wrap_as_attachment (parser, part, part_id, &work_queue);
ct = camel_mime_part_get_content_type (part); if (!show_inline) {
if (ct && camel_content_type_is (ct, "message", "feedback-report")) { GSettings *settings;
settings = e_util_ref_settings ("org.gnome.evolution.mail");
show_inline = g_settings_get_boolean (settings, "display-delivery
-notification-inline");
g_object_unref (settings);
}
if (show_inline) {
EMailPart *attachment_part; EMailPart *attachment_part;
attachment_part = g_queue_peek_head (&work_queue); attachment_part = g_queue_peek_head (&work_queue);
if (attachment_part && E_IS_MAIL_PART_ATTACHMENT (attachment_part )) if (attachment_part && E_IS_MAIL_PART_ATTACHMENT (attachment_part ))
attachment_part->force_inline = TRUE; attachment_part->force_inline = TRUE;
} }
e_queue_transfer (&work_queue, out_mail_parts); e_queue_transfer (&work_queue, out_mail_parts);
return TRUE; return TRUE;
 End of changes. 6 change blocks. 
5 lines changed or deleted 69 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)