From 7d337633ecc3a737580748c669e1f61144b80738 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 17 May 2012 14:08:30 +0200 Subject: Bug #676226 - Changing GOA mail account looses GOA key --- mail/em-account-editor.c | 41 ++++++++++++++++++++++ modules/online-accounts/e-online-accounts-google.c | 7 ++++ 2 files changed, 48 insertions(+) diff --git a/mail/em-account-editor.c b/mail/em-account-editor.c index ad32e26df2..3c85daf983 100644 --- a/mail/em-account-editor.c +++ b/mail/em-account-editor.c @@ -5555,6 +5555,37 @@ setup_yahoo_calendar (EMAccountEditor *emae, g_object_unref (slist); } +static void +copy_param (GQuark key_id, + gpointer data, + gpointer user_data) +{ + GData **copy = user_data; + + g_datalist_id_set_data_full (copy, key_id, g_strdup (data), g_free); +} + +static void +copy_original_url_parameters (CamelURL *copy_to_url, + const gchar *copy_from) +{ + CamelURL *url; + + g_return_if_fail (copy_to_url != NULL); + + if (!copy_from || !*copy_from) + return; + + url = camel_url_new (copy_from, NULL); + if (!url) + return; + + if (url->params) + g_datalist_foreach (&url->params, copy_param, ©_to_url->params); + + camel_url_free (url); +} + static void emae_commit (EConfig *ec, EMAccountEditor *emae) @@ -5618,6 +5649,11 @@ emae_commit (EConfig *ec, if (protocol != NULL) camel_url_set_protocol (url, protocol); + /* the CamelSaslXOAUTH stores its data into parameters + unknown to settings, thus copy these first and overwrite + those known during save */ + copy_original_url_parameters (url, modified_account->source->url); + if (settings != NULL) camel_settings_save_to_url (settings, url); @@ -5639,6 +5675,11 @@ emae_commit (EConfig *ec, if (protocol != NULL) camel_url_set_protocol (url, protocol); + /* the CamelSaslXOAUTH stores its data into parameters + unknown to settings, thus copy these first and overwrite + those known during save */ + copy_original_url_parameters (url, modified_account->transport->url); + if (settings != NULL) camel_settings_save_to_url (settings, url); diff --git a/modules/online-accounts/e-online-accounts-google.c b/modules/online-accounts/e-online-accounts-google.c index 2c64218d57..ab394f622e 100644 --- a/modules/online-accounts/e-online-accounts-google.c +++ b/modules/online-accounts/e-online-accounts-google.c @@ -206,6 +206,13 @@ online_accounts_google_sync_mail (GoaObject *goa_object, string = goa_account_get_id (goa_account); camel_url_set_param (url, GOA_KEY, string); + if (new_account) { + e_account_set_bool (account, E_ACCOUNT_SOURCE_AUTO_CHECK, TRUE); + e_account_set_int (account, E_ACCOUNT_SOURCE_AUTO_CHECK_TIME, 10); + + camel_url_set_param (url, "filter-inbox", "true"); + } + g_free (account->source->url); account->source->url = camel_url_to_string (url, 0); -- cgit