diff options
author | Milan Crha <mcrha@redhat.com> | 2012-05-15 23:08:45 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2012-05-15 23:08:45 +0800 |
commit | abbeb6018582bc6b7700056a0c0f9d196664c1ec (patch) | |
tree | 5d3c6d0196795426dafef47350d3b7f6565f4b50 /mail/mail-guess-servers.c | |
parent | 5e379370ae0653c229308e1d7af31a54739ccc7e (diff) | |
download | gsoc2013-evolution-abbeb6018582bc6b7700056a0c0f9d196664c1ec.tar gsoc2013-evolution-abbeb6018582bc6b7700056a0c0f9d196664c1ec.tar.gz gsoc2013-evolution-abbeb6018582bc6b7700056a0c0f9d196664c1ec.tar.bz2 gsoc2013-evolution-abbeb6018582bc6b7700056a0c0f9d196664c1ec.tar.lz gsoc2013-evolution-abbeb6018582bc6b7700056a0c0f9d196664c1ec.tar.xz gsoc2013-evolution-abbeb6018582bc6b7700056a0c0f9d196664c1ec.tar.zst gsoc2013-evolution-abbeb6018582bc6b7700056a0c0f9d196664c1ec.zip |
Make Yahoo! mail-autoconfig use IMAP, instead of POP3 and preconfig also Tasks
There were slightly more fixes included, namely:
- alternate domain name was not recognized in autoconfig files
- POP3 to IMAP+ change for mail account type in offline Yahoo! autoconfig
- calendar/task ESources for Google/Yahoo should have set color
- autoconfig didn't add Yahoo!'s Calendar, even when checked
- allow preconfig Yahoo! Tasks
Diffstat (limited to 'mail/mail-guess-servers.c')
-rw-r--r-- | mail/mail-guess-servers.c | 93 |
1 files changed, 90 insertions, 3 deletions
diff --git a/mail/mail-guess-servers.c b/mail/mail-guess-servers.c index 8ab9670e8c..574e43f508 100644 --- a/mail/mail-guess-servers.c +++ b/mail/mail-guess-servers.c @@ -296,17 +296,104 @@ guess_when_online (EmailProvider *provider) } +static gboolean +offline_file_includes_domain (const gchar *filename, + const gchar *domain) +{ + gboolean res = FALSE; + gchar *content = NULL; + gsize length; + xmlDocPtr doc; + xmlNodePtr node; + + g_return_val_if_fail (filename != NULL, FALSE); + g_return_val_if_fail (domain != NULL, FALSE); + + if (!g_file_get_contents (filename, &content, &length, NULL)) + return FALSE; + + doc = xmlReadMemory (content, length, "file.xml", NULL, 0); + + node = doc->children; + while (node) { + if (strcmp ((gchar *) node->name, "clientConfig") == 0) { + node = node->children; + while (node) { + if (strcmp ((gchar *) node->name, "emailProvider") == 0) { + break; + } + node = node->next; + } + break; + } + node = node->next; + } + + if (node) { + xmlChar *xmlStr; + + for (node = node->children; node && !res; node = node->next) { + if (!g_str_equal (node->name, "domain")) + continue; + + xmlStr = xmlNodeGetContent (node); + if (xmlStr && g_ascii_strcasecmp ((const gchar *) xmlStr, domain) == 0) + res = TRUE; + + xmlFree (xmlStr); + } + } + + xmlFreeDoc (doc); + g_free (content); + + return res; +} + static gchar * get_filename_for_offline_autoconfig (const gchar *domain) { - return g_build_filename (EVOLUTION_PRIVDATADIR, "mail-autoconfig", domain, NULL); + gchar *path; + GDir *dir; + const gchar *filename; + + path = g_build_filename (EVOLUTION_PRIVDATADIR, "mail-autoconfig", domain, NULL); + if (g_file_test (path, G_FILE_TEST_EXISTS)) + return path; + + g_free (path); + + path = g_build_filename (EVOLUTION_PRIVDATADIR, "mail-autoconfig", NULL); + dir = g_dir_open (path, 0, NULL); + g_free (path); + + if (!dir) + return NULL; + + path = NULL; + while (filename = g_dir_read_name (dir), filename && !path) { + if (g_str_equal (filename, ".") || + g_str_equal (filename, "..")) + continue; + + path = g_build_filename (EVOLUTION_PRIVDATADIR, "mail-autoconfig", filename, NULL); + if (offline_file_includes_domain (path, domain)) + break; + + g_free (path); + path = NULL; + } + + g_dir_close (dir); + + return path; } static gboolean guess_when_offline (EmailProvider *provider) { gchar *filename; - gchar *contents; + gchar *contents = NULL; gsize length; gboolean success; @@ -316,7 +403,7 @@ guess_when_offline (EmailProvider *provider) success = FALSE; filename = get_filename_for_offline_autoconfig (provider->domain); - if (!g_file_get_contents (filename, &contents, &length, NULL)) /* NULL-GError */ + if (!filename || !g_file_get_contents (filename, &contents, &length, NULL)) /* NULL-GError */ goto out; success = parse_message (contents, (gint) length, provider); |