diff options
Diffstat (limited to 'em-format/e-mail-extension-registry.c')
-rw-r--r-- | em-format/e-mail-extension-registry.c | 154 |
1 files changed, 104 insertions, 50 deletions
diff --git a/em-format/e-mail-extension-registry.c b/em-format/e-mail-extension-registry.c index d786f939a0..e6a78e4e88 100644 --- a/em-format/e-mail-extension-registry.c +++ b/em-format/e-mail-extension-registry.c @@ -19,7 +19,8 @@ #include <glib-object.h> #include "e-mail-extension-registry.h" -#include "e-mail-format-extensions.h" +#include "e-mail-formatter-extension.h" +#include "e-mail-parser-extension.h" #include <libebackend/libebackend.h> #include <camel/camel.h> @@ -59,6 +60,49 @@ destroy_queue (GQueue *queue) } static void +mail_extension_registry_add_extension (EMailExtensionRegistry *registry, + const gchar **mime_types, + GType extension_type) +{ + GObject *extension; + gint ii; + + if (mime_types == NULL) { + g_critical ( + "%s does not define any MIME types", + g_type_name (extension_type)); + return; + } + + extension = g_object_new (extension_type, NULL); + + for (ii = 0; mime_types[ii] != NULL; ii++) { + GQueue *queue; + + queue = g_hash_table_lookup ( + registry->priv->table, mime_types[ii]); + if (queue == NULL) { + queue = g_queue_new (); + g_hash_table_insert ( + registry->priv->table, + (gpointer) mime_types[ii], + queue); + } + + g_queue_push_head (queue, g_object_ref (extension)); + + if (camel_debug ("emformat:registry")) { + printf ( + "Added extension '%s' for type '%s'\n", + g_type_name (extension_type), + mime_types[ii]); + } + } + + g_object_unref (extension); +} + +static void mail_extension_registry_finalize (GObject *object) { EMailExtensionRegistryPrivate *priv; @@ -97,55 +141,6 @@ e_mail_extension_registry_init (EMailExtensionRegistry *registry) } /** - * e_mail_extension_registry_add_extension: - * @registry: an #EMailExtensionRegistry - * @mime_types: a %NULL-terminated array of MIME types - * @extension_type: the #GType of the extension being added - * - * Creates an instance of @extension_type and registers the instance for - * all provided MIME types. - */ -void -e_mail_extension_registry_add_extension (EMailExtensionRegistry *registry, - const gchar **mime_types, - GType extension_type) -{ - GObject *extension; - gint ii; - - g_return_if_fail (E_IS_MAIL_EXTENSION_REGISTRY (registry)); - g_return_if_fail (mime_types != NULL); - g_return_if_fail (extension_type != G_TYPE_INVALID); - - extension = g_object_new (extension_type, NULL); - - for (ii = 0; mime_types[ii] != NULL; ii++) { - GQueue *queue; - - queue = g_hash_table_lookup ( - registry->priv->table, mime_types[ii]); - if (queue == NULL) { - queue = g_queue_new (); - g_hash_table_insert ( - registry->priv->table, - (gpointer) mime_types[ii], - queue); - } - - g_queue_push_head (queue, g_object_ref (extension)); - - if (camel_debug ("emformat:registry")) { - printf ( - "Added extension '%s' for type '%s'\n", - g_type_name (extension_type), - mime_types[ii]); - } - } - - g_object_unref (extension); -} - -/** * e_mail_extension_registry_get_for_mime_type: * @regstry: An #EMailExtensionRegistry * @mime_type: A string with mime-type to look up @@ -225,6 +220,36 @@ e_mail_parser_extension_registry_init (EMailParserExtensionRegistry *registry) { } +void +e_mail_parser_extension_registry_load (EMailParserExtensionRegistry *registry) +{ + GType *children; + GType base_extension_type; + guint ii, n_children; + + g_return_if_fail (E_IS_MAIL_PARSER_EXTENSION_REGISTRY (registry)); + + base_extension_type = E_TYPE_MAIL_PARSER_EXTENSION; + children = g_type_children (base_extension_type, &n_children); + + for (ii = 0; ii < n_children; ii++) { + EMailParserExtensionClass *class; + + if (G_TYPE_IS_ABSTRACT (children[ii])) + continue; + + class = g_type_class_ref (children[ii]); + + mail_extension_registry_add_extension ( + E_MAIL_EXTENSION_REGISTRY (registry), + class->mime_types, children[ii]); + + g_type_class_unref (class); + } + + g_free (children); +} + /******************************************************************************/ G_DEFINE_TYPE_WITH_CODE ( @@ -243,3 +268,32 @@ e_mail_formatter_extension_registry_init (EMailFormatterExtensionRegistry *regis { } +void +e_mail_formatter_extension_registry_load (EMailFormatterExtensionRegistry *registry, + GType base_extension_type) +{ + GType *children; + guint ii, n_children; + + g_return_if_fail (E_IS_MAIL_FORMATTER_EXTENSION_REGISTRY (registry)); + + children = g_type_children (base_extension_type, &n_children); + + for (ii = 0; ii < n_children; ii++) { + EMailFormatterExtensionClass *class; + + if (G_TYPE_IS_ABSTRACT (children[ii])) + continue; + + class = g_type_class_ref (children[ii]); + + mail_extension_registry_add_extension ( + E_MAIL_EXTENSION_REGISTRY (registry), + class->mime_types, children[ii]); + + g_type_class_unref (class); + } + + g_free (children); +} + |