Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
evolution.14625
evolution-show-security-bar-above-message-heade...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File evolution-show-security-bar-above-message-headers.patch of Package evolution.14625
From 9c55a311325f5905d8b8403b96607e46cf343f21 Mon Sep 17 00:00:00 2001 From: Milan Crha <mcrha@redhat.com> Date: Mon, 22 Oct 2018 18:53:28 +0200 Subject: [PATCH] I#120 - Show security bar above message headers Closes https://gitlab.gnome.org/GNOME/evolution/issues/120 --- src/em-format/e-mail-parser.c | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/em-format/e-mail-parser.c b/src/em-format/e-mail-parser.c index 793d891dfc..c81bcc2aca 100644 --- a/src/em-format/e-mail-parser.c +++ b/src/em-format/e-mail-parser.c @@ -79,6 +79,67 @@ GType e_mail_parser_application_smime_get_type (void); static gpointer parent_class; +static void +mail_parser_move_security_before_headers (GQueue *part_queue) +{ + GList *link, *last_headers = NULL; + GSList *headers_stack = NULL; + + link = g_queue_peek_head_link (part_queue); + while (link) { + EMailPart *part = link->data; + const gchar *id; + + if (!part) { + link = g_list_next (link); + continue; + } + + id = e_mail_part_get_id (part); + if (!id) { + link = g_list_next (link); + continue; + } + + if (g_str_has_suffix (id, ".rfc822")) { + headers_stack = g_slist_prepend (headers_stack, last_headers); + last_headers = NULL; + } else if (g_str_has_suffix (id, ".rfc822.end")) { + g_warn_if_fail (headers_stack != NULL); + + if (headers_stack) { + last_headers = headers_stack->data; + headers_stack = g_slist_remove (headers_stack, last_headers); + } else { + last_headers = NULL; + } + } + + if (g_strcmp0 (e_mail_part_get_mime_type (part), "application/vnd.evolution.headers") == 0) { + last_headers = link; + link = g_list_next (link); + } else if (g_strcmp0 (e_mail_part_get_mime_type (part), "application/vnd.evolution.secure-button") == 0) { + g_warn_if_fail (last_headers != NULL); + + if (last_headers) { + GList *next = g_list_next (link); + + g_warn_if_fail (g_queue_remove (part_queue, part)); + g_queue_insert_before (part_queue, last_headers, part); + + link = next; + } else { + link = g_list_next (link); + } + } else { + link = g_list_next (link); + } + } + + g_warn_if_fail (headers_stack == NULL); + g_slist_free (headers_stack); +} + static void mail_parser_run (EMailParser *parser, EMailPartList *part_list, @@ -142,6 +203,8 @@ mail_parser_run (EMailParser *parser, break; } + mail_parser_move_security_before_headers (&mail_part_queue); + while (!g_queue_is_empty (&mail_part_queue)) { mail_part = g_queue_pop_head (&mail_part_queue); e_mail_part_list_add_part (part_list, mail_part); -- 2.20.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor