diff options
Diffstat (limited to 'mail/mail-config.c')
-rw-r--r-- | mail/mail-config.c | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/mail/mail-config.c b/mail/mail-config.c index ec2e491519..80f7171a80 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -829,48 +829,49 @@ mail_config_get_account_by_source_url (const char *source_url) EAccount * mail_config_get_account_by_transport_url (const char *transport_url) { - CamelProvider *provider; - CamelURL *transport; - EAccount *account; + EAccount *account = NULL; EIterator *iter; g_return_val_if_fail (transport_url != NULL, NULL); - provider = camel_provider_get(transport_url, NULL); - if (!provider) - return NULL; - - transport = camel_url_new (transport_url, NULL); - if (!transport) - return NULL; - iter = e_list_get_iterator ((EList *) config->accounts); while (e_iterator_is_valid (iter)) { + CamelURL *url; + gchar *string; + account = (EAccount *) e_iterator_get (iter); - if (account->transport && account->transport->url && account->transport->url[0]) { - CamelURL *url; + e_iterator_next (iter); - url = camel_url_new (account->transport->url, NULL); - if (url && provider->url_equal (url, transport)) { - camel_url_free (url); - camel_url_free (transport); - g_object_unref (iter); + if (account->transport == NULL) + continue; - return account; - } + else if (account->transport->url == NULL) + continue; - if (url) - camel_url_free (url); - } + else if (*account->transport->url == '\0') + continue; - e_iterator_next (iter); + url = camel_url_new (account->transport->url, NULL); + if (url == NULL) + continue; + + /* Simplify the account URL for comparison. */ + string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL); + if (string == NULL || strcmp (string, transport_url) != 0) + account = NULL; /* not a match */ + + camel_url_free (url); + g_free (string); + + if (account != NULL) { + g_object_unref (iter); + return account; + } } g_object_unref (iter); - camel_url_free (transport); - return NULL; } |