Fixes NB#105818, show the proper message when sending fails
[modest] / src / modest-protocol-registry.c
index be567d7..75ff369 100644 (file)
@@ -31,6 +31,7 @@
 #include <modest-account-protocol.h>
 #include <modest-defs.h>
 #include <modest-protocol-registry.h>
+#include <modest-transport-account-decorator.h>
 #include <tny-camel-pop-store-account.h>
 #include <tny-camel-imap-store-account.h>
 #include <tny-camel-store-account.h>
@@ -80,7 +81,7 @@ static void   modest_protocol_registry_instance_init (ModestProtocolRegistry *ob
 static GHashTable *   modest_protocol_registry_create_tag (ModestProtocolRegistry *obj, const gchar *tag);
 
 /* translation handlers */
-static gchar * translation_is_userdata (gpointer userdata, ...);
+static gchar * translation_is_userdata (gpointer userdata, va_list args);
 
 typedef struct _ModestProtocolRegistryPrivate ModestProtocolRegistryPrivate;
 struct _ModestProtocolRegistryPrivate {
@@ -322,12 +323,17 @@ find_protocol_by_name (ModestProtocolType type_id,
 }
 
 ModestProtocol *
-modest_protocol_registry_get_protocol_by_name (ModestProtocolRegistry *self, const gchar *tag, const gchar *name)
+modest_protocol_registry_get_protocol_by_name (ModestProtocolRegistry *self, 
+                                              const gchar *tag, 
+                                              const gchar *name)
 {
        ModestProtocolRegistryPrivate *priv;
        GHashTable *tag_table;
 
        g_return_val_if_fail (MODEST_IS_PROTOCOL_REGISTRY (self), NULL);
+       g_return_val_if_fail (tag, NULL);
+       g_return_val_if_fail (name, NULL);
+
        priv = MODEST_PROTOCOL_REGISTRY_GET_PRIVATE (self);
 
        tag_table = g_hash_table_lookup (priv->tags_table, tag);
@@ -390,21 +396,20 @@ modest_protocol_registry_create_tag (ModestProtocolRegistry *self, const gchar *
 }
 
 static gchar * 
-translation_is_userdata (gpointer userdata, ...)
+translation_is_userdata (gpointer userdata, va_list args)
 {
-       va_list args, dest;
+       va_list dest;
        gchar *result;
 
-       va_start(args, userdata);
-       va_copy (dest, args);
-       result = g_strdup_printf (_(userdata), dest);
-       va_end (args);
+       G_VA_COPY (dest, args);
+       result = g_strdup_vprintf (_(userdata), dest);
+       va_end (dest);
 
        return result;
 }
 
 static gchar * 
-translation_is_userdata_no_param (gpointer userdata, ...)
+translation_is_userdata_no_param (gpointer userdata, va_list args)
 {
        gchar *result;
 
@@ -429,17 +434,20 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_TRANSPORT_STORE_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_TRANSPORT_PROTOCOLS,
                                      NULL);
+       g_object_unref (protocol);
 
        protocol = modest_account_protocol_new ("smtp", N_("SMTP Server"),
                                                25, 465,
-                                               TNY_TYPE_CAMEL_TRANSPORT_ACCOUNT);
+                                               MODEST_TYPE_TRANSPORT_ACCOUNT_DECORATOR);
        smtp_protocol_type_id = modest_protocol_get_type_id (protocol);
        modest_protocol_set_translation (protocol, MODEST_PROTOCOL_TRANSLATION_CONNECT_ERROR, translation_is_userdata, "emev_ib_ui_smtp_server_invalid", NULL);
+       modest_protocol_set_translation (protocol, MODEST_PROTOCOL_TRANSLATION_ACCOUNT_CONNECTION_ERROR, translation_is_userdata, "emev_ib_ui_smtp_server_invalid", NULL);
        modest_protocol_set_translation (protocol, MODEST_PROTOCOL_TRANSLATION_AUTH_ERROR, translation_is_userdata, "emev_ni_ui_smtp_authentication_fail_error", NULL);
        modest_protocol_registry_add (self, protocol, 2,
                                      MODEST_PROTOCOL_REGISTRY_TRANSPORT_STORE_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_TRANSPORT_PROTOCOLS,
                                      NULL);
+       g_object_unref (protocol);
 
        protocol = modest_account_protocol_new ("pop", _("mail_fi_emailtype_pop3"),
                                                110, 995,
@@ -457,6 +465,7 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_HAS_LEAVE_ON_SERVER_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_STORE_FORBID_MESSAGE_ADD,
                                      NULL);
+       g_object_unref (protocol);
 
        protocol = modest_account_protocol_new ("imap", _("mail_fi_emailtype_imap"),
                                                143, 993,
@@ -483,6 +492,7 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_REMOTE_STORE_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS,
                                      NULL);
+       g_object_unref (protocol);
 
        protocol = modest_account_protocol_new ("maildir", N_("Maildir"),
                                                0, 0,
@@ -496,6 +506,7 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS,
                                      NULL);
+       g_object_unref (protocol);
 
        protocol = modest_account_protocol_new ("mbox", N_("MBox"),
                                                0, 0,
@@ -509,6 +520,7 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS,
                                      NULL);
+       g_object_unref (protocol);
 
        protocol = modest_protocol_new ("none", N_("None"));
        modest_protocol_set (protocol, MODEST_PROTOCOL_SECURITY_ACCOUNT_OPTION, MODEST_ACCOUNT_OPTION_SSL_NEVER);
@@ -516,6 +528,8 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
        modest_protocol_registry_add (self, protocol, 7,
                                      MODEST_PROTOCOL_REGISTRY_CONNECTION_PROTOCOLS,
                                      NULL);
+       g_object_unref (protocol);
+
        protocol = modest_protocol_new ("ssl", N_("SSL"));
        modest_protocol_set (protocol, MODEST_PROTOCOL_SECURITY_ACCOUNT_OPTION, MODEST_ACCOUNT_OPTION_SSL_WRAPPED);
        ssl_connection_protocol_type_id = modest_protocol_get_type_id (protocol);
@@ -524,6 +538,8 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_USE_ALTERNATE_PORT,
                                      NULL);
+       g_object_unref (protocol);
+
        protocol = modest_protocol_new ("tls", N_("TLS"));
        modest_protocol_set (protocol, MODEST_PROTOCOL_SECURITY_ACCOUNT_OPTION, MODEST_ACCOUNT_OPTION_SSL_TLS);
        tls_connection_protocol_type_id = modest_protocol_get_type_id (protocol);
@@ -531,6 +547,8 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_CONNECTION_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS,
                                      NULL);
+       g_object_unref (protocol);
+
        protocol = modest_protocol_new ("tls-op", N_("TLS when possible"));
        modest_protocol_set (protocol, MODEST_PROTOCOL_SECURITY_ACCOUNT_OPTION, MODEST_ACCOUNT_OPTION_SSL_WHEN_POSSIBLE);
        tlsop_connection_protocol_type_id = modest_protocol_get_type_id (protocol);
@@ -538,12 +556,16 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_CONNECTION_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS,
                                      NULL);
+       g_object_unref (protocol);
+
        protocol = modest_protocol_new (MODEST_ACCOUNT_AUTH_MECH_VALUE_NONE, _("mcen_fi_advsetup_smtp_none"));
        none_auth_protocol_type_id = modest_protocol_get_type_id (protocol);
        modest_protocol_set (protocol, MODEST_PROTOCOL_AUTH_ACCOUNT_OPTION, MODEST_ACCOUNT_AUTH_PLAIN);
        modest_protocol_registry_add (self, protocol, 11,
                                      MODEST_PROTOCOL_REGISTRY_AUTH_PROTOCOLS,
                                      NULL);
+       g_object_unref (protocol);
+
        protocol = modest_protocol_new (MODEST_ACCOUNT_AUTH_MECH_VALUE_PASSWORD, _("mcen_fi_advsetup_smtp_login"));
        password_auth_protocol_type_id = modest_protocol_get_type_id (protocol);
        modest_protocol_set (protocol, MODEST_PROTOCOL_AUTH_ACCOUNT_OPTION, MODEST_ACCOUNT_AUTH_PASSWORD);
@@ -551,6 +573,8 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_AUTH_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS,
                                      NULL);
+       g_object_unref (protocol);
+
        protocol = modest_protocol_new (MODEST_ACCOUNT_AUTH_MECH_VALUE_CRAMMD5, _("mcen_fi_advsetup_smtp_cram_md5"));
        crammd5_auth_protocol_type_id = modest_protocol_get_type_id (protocol);
        modest_protocol_set (protocol, MODEST_PROTOCOL_AUTH_ACCOUNT_OPTION, MODEST_ACCOUNT_AUTH_CRAMMD5);
@@ -558,35 +582,7 @@ modest_protocol_registry_set_to_default (ModestProtocolRegistry *self)
                                      MODEST_PROTOCOL_REGISTRY_AUTH_PROTOCOLS,
                                      MODEST_PROTOCOL_REGISTRY_SECURE_PROTOCOLS,
                                      NULL);
-
-#if 0
-       /********** WARNING: Test code ( *********/
-#include "modest-testplugin-protocol.h"
-       protocol = (ModestProtocol *)
-               modest_testplugin_protocol_new ("testplugin", _("mcen_va_testplugin"),
-                                                80, 443,
-                                                TNY_TYPE_CAMEL_IMAP_STORE_ACCOUNT);
-       modest_protocol_registry_add (self, protocol, 50,
-                                     MODEST_PROTOCOL_REGISTRY_TRANSPORT_STORE_PROTOCOLS,
-                                     MODEST_PROTOCOL_REGISTRY_STORE_PROTOCOLS,
-                                     MODEST_PROTOCOL_REGISTRY_REMOTE_STORE_PROTOCOLS,
-                                     MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS,
-                                     MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS,
-                                     NULL);
-
-       protocol =  (ModestProtocol *)
-               modest_testplugin_protocol_new ("testplugin-transport", _("mcen_va_testplugin"),
-                                                80, 443,
-                                                TNY_TYPE_CAMEL_TRANSPORT_ACCOUNT);
-       modest_protocol_registry_add (self, protocol, 51,
-                                     MODEST_PROTOCOL_REGISTRY_TRANSPORT_STORE_PROTOCOLS,
-                                     MODEST_PROTOCOL_REGISTRY_TRANSPORT_PROTOCOLS,
-                                     MODEST_PROTOCOL_REGISTRY_PROVIDER_PROTOCOLS,
-                                     NULL);
-
-       /********* WARNING: Test code ( *********/
-#endif
-
+       g_object_unref (protocol);
 
        /* set the custom auth mechs. We do this after creating all the protocols, because if we don't, then we
         * won't register the auth protocol type id's properly */