diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2008-12-04 23:55:07 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2008-12-04 23:55:07 +0800 |
commit | bb710b5dbb2883c4f829bb947179e51a10579e5c (patch) | |
tree | 4339eeea8319d2d645576f6cd04dbfe0966e501b | |
parent | 790cdf6d53cdf22b3336984485a08a5b9f5abde8 (diff) | |
download | gsoc2013-evolution-bb710b5dbb2883c4f829bb947179e51a10579e5c.tar gsoc2013-evolution-bb710b5dbb2883c4f829bb947179e51a10579e5c.tar.gz gsoc2013-evolution-bb710b5dbb2883c4f829bb947179e51a10579e5c.tar.bz2 gsoc2013-evolution-bb710b5dbb2883c4f829bb947179e51a10579e5c.tar.lz gsoc2013-evolution-bb710b5dbb2883c4f829bb947179e51a10579e5c.tar.xz gsoc2013-evolution-bb710b5dbb2883c4f829bb947179e51a10579e5c.tar.zst gsoc2013-evolution-bb710b5dbb2883c4f829bb947179e51a10579e5c.zip |
** Fixes bug #552583
2008-12-04 Matthew Barnes <mbarnes@redhat.com>
** Fixes bug #552583
* mail-config.c (mail_config_get_account_by_source_url),
(mail_config_get_account_by_transport_url):
For the purpose of matching a URL to an EAccount, only compare
the protocol, user, host and port and disregard the rest.
svn path=/branches/gnome-2-24/; revision=36833
-rw-r--r-- | mail/ChangeLog | 9 | ||||
-rw-r--r-- | mail/mail-config.c | 71 |
2 files changed, 49 insertions, 31 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index b7b881fcd7..a80721555b 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,12 @@ +2008-12-04 Matthew Barnes <mbarnes@redhat.com> + + ** Fixes bug #552583 + + * mail-config.c (mail_config_get_account_by_source_url), + (mail_config_get_account_by_transport_url): + For the purpose of matching a URL to an EAccount, only compare + the protocol, user, host and port and disregard the rest. + 2008-11-19 Srinivasa Ragavan <sragavan@novell.com> ** Fix for bug #555276 diff --git a/mail/mail-config.c b/mail/mail-config.c index 4629d7a310..976b031b05 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -778,18 +778,40 @@ mail_config_get_account_by_uid (const char *uid) return (EAccount *) e_account_list_find (config->accounts, E_ACCOUNT_FIND_UID, uid); } +static gboolean +mail_config_account_url_equal (const CamelURL *u1, + const CamelURL *u2) +{ + /* For the purpose of matching a URL to an EAccount, only compare + * the protocol, user, host and port and disregard the rest. */ + + if (g_strcmp0 (u1->protocol, u2->protocol) != 0) + return FALSE; + + if (g_strcmp0 (u1->user, u2->user) != 0) + return FALSE; + + if (g_strcmp0 (u1->host, u2->host) != 0) + return FALSE; + + return (u1->port == u2->port); +} + EAccount * mail_config_get_account_by_source_url (const char *source_url) { EAccount *account = NULL; EIterator *iter; + CamelURL *url; g_return_val_if_fail (source_url != NULL, NULL); + url = camel_url_new (source_url, NULL); + g_return_val_if_fail (url != NULL, NULL); + iter = e_list_get_iterator ((EList *) config->accounts); - while (e_iterator_is_valid (iter)) { - CamelURL *url; - gchar *string; + while (account == NULL && e_iterator_is_valid (iter)) { + CamelURL *account_url; account = (EAccount *) e_iterator_get (iter); @@ -804,27 +826,19 @@ mail_config_get_account_by_source_url (const char *source_url) else if (*account->source->url == '\0') continue; - url = camel_url_new (account->source->url, NULL); - if (url == NULL) + account_url = camel_url_new (account->source->url, NULL); + if (account_url == NULL) continue; - /* Simplify the account URL for comparison. */ - string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL); - if (string == NULL || strcmp (string, source_url) != 0) + if (!mail_config_account_url_equal (url, account_url)) account = NULL; /* not a match */ - camel_url_free (url); - g_free (string); - - if (account != NULL) { - g_object_unref (iter); - return account; - } + camel_url_free (account_url); } g_object_unref (iter); - return NULL; + return account; } EAccount * @@ -832,13 +846,16 @@ mail_config_get_account_by_transport_url (const char *transport_url) { EAccount *account = NULL; EIterator *iter; + CamelURL *url; g_return_val_if_fail (transport_url != NULL, NULL); + url = camel_url_new (transport_url, NULL); + g_return_val_if_fail (url != NULL, NULL); + iter = e_list_get_iterator ((EList *) config->accounts); - while (e_iterator_is_valid (iter)) { - CamelURL *url; - gchar *string; + while (account == NULL && e_iterator_is_valid (iter)) { + CamelURL *account_url; account = (EAccount *) e_iterator_get (iter); @@ -853,27 +870,19 @@ mail_config_get_account_by_transport_url (const char *transport_url) else if (*account->transport->url == '\0') continue; - url = camel_url_new (account->transport->url, NULL); - if (url == NULL) + account_url = camel_url_new (account->transport->url, NULL); + if (account_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) + if (!mail_config_account_url_equal (url, account_url)) 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); - return NULL; + return account; } int |