Files
evolution/modules/text-highlight/e-mail-parser-text-highlight.c
Milan Crha a4af2d6aee Postscript attachments not shown in message preview
The application/postscript mime type had been handled by the text-hightlight
module, but thinking of it, it doesn't make much sense, because most users
would prefer to see the content rather in a postscript viewer, than
the source of the postscript file, thus this change removes the mime type
from the text-hightlight module. There had been also issues about thinking
that certain parts had been handled, while they did not, which this change
fixes as well.

The issue had been reported downstream at:
https://bugzilla.redhat.com/show_bug.cgi?id=1187327
2015-02-09 18:08:29 +01:00

113 lines
3.0 KiB
C

/*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <camel/camel.h>
#include "e-mail-parser-text-highlight.h"
#include "languages.h"
#include <em-format/e-mail-extension-registry.h>
#include <em-format/e-mail-parser-extension.h>
#include <em-format/e-mail-part.h>
#include <em-format/e-mail-part-utils.h>
#include <libebackend/libebackend.h>
#define d(x)
typedef EMailParserExtension EMailParserTextHighlight;
typedef EMailParserExtensionClass EMailParserTextHighlightClass;
typedef EExtension EMailParserTextHighlightLoader;
typedef EExtensionClass EMailParserTextHighlightLoaderClass;
GType e_mail_parser_text_highlight_get_type (void);
G_DEFINE_DYNAMIC_TYPE (
EMailParserTextHighlight,
e_mail_parser_text_highlight,
E_TYPE_MAIL_PARSER_EXTENSION)
static gboolean
empe_text_highlight_parse (EMailParserExtension *extension,
EMailParser *parser,
CamelMimePart *part,
GString *part_id,
GCancellable *cancellable,
GQueue *out_mail_parts)
{
CamelContentType *ct;
gboolean handled;
gint len;
/* Prevent recursion */
if (strstr (part_id->str, ".text-highlight") != NULL)
return FALSE;
/* Don't parse text/html if it's not an attachment */
ct = camel_mime_part_get_content_type (part);
if (camel_content_type_is (ct, "text", "html")) {
const CamelContentDisposition *disp;
disp = camel_mime_part_get_content_disposition (part);
if (!disp || (g_strcmp0 (disp->disposition, "attachment") != 0))
return FALSE;
}
len = part_id->len;
g_string_append (part_id, ".text-highlight");
/* All source codes and scripts are in general plain texts,
* so let text/plain parser handle it. */
handled = e_mail_parser_parse_part_as (
parser, part, part_id, "text/plain",
cancellable, out_mail_parts);
g_string_truncate (part_id, len);
return handled;
}
static void
e_mail_parser_text_highlight_class_init (EMailParserExtensionClass *class)
{
class->mime_types = get_mime_types ();
class->parse = empe_text_highlight_parse;
}
void
e_mail_parser_text_highlight_class_finalize (EMailParserExtensionClass *class)
{
}
static void
e_mail_parser_text_highlight_init (EMailParserExtension *extension)
{
}
void
e_mail_parser_text_highlight_type_register (GTypeModule *type_module)
{
e_mail_parser_text_highlight_register_type (type_module);
}