diff options
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]); } } |