Commit Graph

10 Commits

Author SHA1 Message Date
bf30024dd7 Teach EMailExtensionRegistry to find extensions.
Now we have the following extension points in the GType hierarchy:

   E_TYPE_MAIL_FORMATTER_EXTENSION
   E_TYPE_MAIL_FORMATTER_PRINT_EXTENSION
   E_TYPE_MAIL_FORMATTER_QUOTE_EXTENSION
   E_TYPE_MAIL_PARSER_EXTENSION

A registry just needs to be given one of these extension points, and it
can use g_type_children() to find and load all registered extensions.

This eliminates e-mail-format-extensions.[ch] as well as the dynamic
loaders I added a few commits back.  Dynamically loaded extensions are
now easier to register, at the cost of internal extensions being a tad
more cumbersome to register.  Fair tradeoff, imo.

This also makes e_mail_extension_registry_add_extension() a private
function used only by e_mail_formatter_extension_registry_load() and
e_mail_parser_extension_registry_load().
2012-12-07 17:40:28 -05:00
c10235e6dd EMailParserExtension: Convert get_flags() to an enum field.
Of the parser extensions that override get_flags(), they all return a
fixed set of flags.  So we don't need an instance of the extension to
obtain its flags.  Just make it an EMailParserExtensionFlags field in
the class structure.
2012-12-07 14:01:05 -05:00
cab6eac8f1 Convert EMailParserExtension to an abstract class.
With the previous changes, all parser extensions derive from
GObjectClass and implement the EMailParserExtensionInterface.

Simplify things further by making EMailParserExtension an abstract base
class so parser extensions are now just direct subclasses and need not
bother with implementing GObject interfaces.
2012-12-07 14:01:05 -05:00
54455ca1ad Remove EMailExtension.
EMailExtension is now too trivial to keep as a standalone interface.
Add a 'mime_types' string array to the EMailFormatterExtension and
EMailFormatterParser interface structs.

Alter e_mail_extension_registry_add_extension() to take a 'mime_types'
string array and the GType of an extension to instantiate, rather than
the extension instance directly.

e_mail_extension_registry_remove_extension() is no longer needed.
2012-12-07 14:01:05 -05:00
9d34f72ec1 EMailExtension: Replace mime_types() method with a string array.
In all implementations for EMailExtension, the MIME type list is a
static string array -- with the single exception of the text-highlight
module, where the MIME type list is dynamically assembled once.

Replace the mime_types() method with a "mime_types" string array in the
EMailExtensionInterface struct.  Then the list of MIME types supported
by the class implementing the EMailExtensionInterface can be obtained
without requiring an instance of the class.
2012-12-07 14:01:04 -05:00
3924dc759d EMailParserExtension: Collect EMailParts in a GQueue.
Collect EMailParts in a GQueue provided to the EMailParserExtension,
and change the return type of parse() to gboolean to indicate whether
the given CamelMimePart was handled (even if no parts were added to
the output GQueue).

This avoids the awkward corner case of a parser extension returning a
linked list node with a NULL data member to indicate the CamelMimePart
was handled but no EMailParts produced, and then having to watch out
for that NULL data member corner case throughout the application.

Also, remove the GCancellable parameter from e_mail_parser_error() and
e_mail_parser_wrap_as_attachment() since neither function blocks.
2012-12-07 14:01:04 -05:00
c85109fc32 Coding style and whitespace cleanup. 2012-08-19 14:17:55 -04:00
cc8bf823ec Coding style and whitespace cleanup. 2012-06-24 20:31:43 -04:00
f960fd2dff Reduce usage of g_type_class_peek_parent().
G_DEFINE_TYPE macros define a static "parent_class" variable.
2012-06-24 20:31:42 -04:00
9311914746 Mail formatter rewrite - convert some plugins to modules
audio-inline, itip-formatter, prefer-plain, tnef-attachments
and vcard-inline plugins were converted to modules so that they
can fit into concept of the new formatter.

Every module still installs .eplug file, because there is no
suitable API at the moment to register plugins to the plugins dialog
and to extend the Preferences dialog.
2012-06-06 15:29:38 +02:00