diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2012-12-07 01:57:33 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2012-12-08 03:01:04 +0800 |
commit | 9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79 (patch) | |
tree | 8849353e617afe5207095fb6100a33e79989c9bc /em-format/e-mail-extension-registry.c | |
parent | 3924dc759dbf38df0f9ff6941990dcf242478617 (diff) | |
download | gsoc2013-evolution-9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79.tar gsoc2013-evolution-9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79.tar.gz gsoc2013-evolution-9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79.tar.bz2 gsoc2013-evolution-9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79.tar.lz gsoc2013-evolution-9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79.tar.xz gsoc2013-evolution-9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79.tar.zst gsoc2013-evolution-9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79.zip |
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.
Diffstat (limited to 'em-format/e-mail-extension-registry.c')
-rw-r--r-- | em-format/e-mail-extension-registry.c | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/em-format/e-mail-extension-registry.c b/em-format/e-mail-extension-registry.c index 3097d93212..41a3d6f664 100644 --- a/em-format/e-mail-extension-registry.c +++ b/em-format/e-mail-extension-registry.c @@ -106,8 +106,8 @@ void e_mail_extension_registry_add_extension (EMailExtensionRegistry *reg, EMailExtension *extension) { - gint i; - const gchar **types; + EMailExtensionInterface *interface; + gint ii; g_return_if_fail (E_IS_MAIL_EXTENSION_REGISTRY (reg)); g_return_if_fail (E_IS_MAIL_EXTENSION (extension)); @@ -115,15 +115,26 @@ e_mail_extension_registry_add_extension (EMailExtensionRegistry *reg, /* One reference per extension is enough */ g_object_ref (extension); - types = e_mail_extension_get_mime_types (extension); - for (i = 0; types && types[i]; i++) { + interface = E_MAIL_EXTENSION_GET_INTERFACE (extension); + if (interface->mime_types == NULL) { + g_critical ( + "%s does not define any MIME types", + G_OBJECT_TYPE_NAME (extension)); + return; + } + + for (ii = 0; interface->mime_types[ii] != NULL; ii++) { GQueue *queue; - queue = g_hash_table_lookup (reg->priv->table, types[i]); - if (!queue) { + queue = g_hash_table_lookup ( + reg->priv->table, interface->mime_types[ii]); + if (queue == NULL) { queue = g_queue_new (); g_queue_push_head (queue, extension); - g_hash_table_insert (reg->priv->table, (gchar *) types[i], queue); + g_hash_table_insert ( + reg->priv->table, + (gpointer) interface->mime_types[ii], + queue); } else { g_queue_push_head (queue, extension); } @@ -131,7 +142,8 @@ e_mail_extension_registry_add_extension (EMailExtensionRegistry *reg, if (camel_debug ("emformat:registry")) { printf ( "Added extension '%s' for type '%s'\n", - G_OBJECT_TYPE_NAME (extension), types[i]); + G_OBJECT_TYPE_NAME (extension), + interface->mime_types[ii]); } } } @@ -147,28 +159,32 @@ void e_mail_extension_registry_remove_extension (EMailExtensionRegistry *reg, EMailExtension *extension) { - gint i; - const gchar **types; + EMailExtensionInterface *interface; + gint ii; g_return_if_fail (E_IS_MAIL_EXTENSION_REGISTRY (reg)); g_return_if_fail (E_IS_MAIL_EXTENSION (extension)); - types = e_mail_extension_get_mime_types (extension); - for (i = 0; types && types[i]; i++) { + interface = E_MAIL_EXTENSION_GET_INTERFACE (extension); + if (interface->mime_types == NULL) + return; + + for (ii = 0; interface->mime_types[ii] != NULL; ii++) { GQueue *queue; - queue = g_hash_table_lookup (reg->priv->table, types[i]); - if (!queue) { - i++; + queue = g_hash_table_lookup ( + reg->priv->table, + interface->mime_types[ii]); + if (queue == NULL) continue; - } g_queue_remove (queue, extension); if (camel_debug ("emformat:registry")) { printf ( "Removed extension '%s' from type '%s'\n", - G_OBJECT_TYPE_NAME (extension), types[i]); + G_OBJECT_TYPE_NAME (extension), + interface->mime_types[ii]); } } |