aboutsummaryrefslogtreecommitdiffstats
path: root/em-format/e-mail-extension-registry.c
diff options
context:
space:
mode:
Diffstat (limited to 'em-format/e-mail-extension-registry.c')
-rw-r--r--em-format/e-mail-extension-registry.c50
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]);
}
}