aboutsummaryrefslogtreecommitdiffstats
path: root/em-format/e-mail-extension-registry.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2012-12-07 01:57:33 +0800
committerMatthew Barnes <mbarnes@redhat.com>2012-12-08 03:01:04 +0800
commit9d34f72ec1b99d58ee1c3a6d1a964a6dde166f79 (patch)
tree8849353e617afe5207095fb6100a33e79989c9bc /em-format/e-mail-extension-registry.c
parent3924dc759dbf38df0f9ff6941990dcf242478617 (diff)
downloadgsoc2013-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.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]);
}
}