[evolution-kolab/ek-wip-porting: 5/8] kolab-util-backend: fixed ESource UID handling



commit 17f64ec91a69b99e17168b759f6015a136fb9aee
Author: Christian Hilberg <hilberg kernelconcepts de>
Date:   Thu Mar 15 23:46:09 2012 +0100

    kolab-util-backend: fixed ESource UID handling
    
    * set UID field on KolabSettingsHandler from ESource
    * extended the Camel account UID generator to use
      the ESource UID information from KolabSettingsHandler
    * let KolabMailIMAPClient make use of this (disk
      locations for calendar / contacts now closely
      resemble those of mail)
    * error handling fixups

 src/libekolab/kolab-mail-imap-client.c |    9 +----
 src/libekolab/kolab-util-backend.c     |   50 +++++++++++++++++++++++++++++--
 2 files changed, 48 insertions(+), 11 deletions(-)
---
diff --git a/src/libekolab/kolab-mail-imap-client.c b/src/libekolab/kolab-mail-imap-client.c
index c8f4424..a9f772d 100644
--- a/src/libekolab/kolab-mail-imap-client.c
+++ b/src/libekolab/kolab-mail-imap-client.c
@@ -801,19 +801,14 @@ kolab_mail_imap_client_bringup (KolabMailImapClient *self,
 		g_propagate_error (err, tmp_err);
 		return FALSE;
 	}
-	extd_account_uid = g_strconcat (KOLAB_CAMEL_PROVIDER_PROTOCOL,
-	                                "__",
-	                                account_uid,
-	                                NULL);
-	g_free (account_uid);
 
 	/* register Kolab service (store) with CamelSession */
 	service = camel_session_add_service (CAMEL_SESSION (priv->session),
-	                                     extd_account_uid,
+	                                     account_uid,
 	                                     KOLAB_CAMEL_PROVIDER_PROTOCOL,
 	                                     CAMEL_PROVIDER_STORE,
 	                                     &tmp_err);
-	g_free (extd_account_uid);
+	g_free (account_uid);
 	if (tmp_err != NULL) {
 		if (service != NULL) {
 			/* should not happen */
diff --git a/src/libekolab/kolab-util-backend.c b/src/libekolab/kolab-util-backend.c
index 04cefbd..91a5a81 100644
--- a/src/libekolab/kolab-util-backend.c
+++ b/src/libekolab/kolab-util-backend.c
@@ -177,7 +177,10 @@ KolabSyncStrategyID
 kolab_util_misc_sync_value_from_property (const gchar *sync_prop)
 {
 	KolabSyncStrategyID sid = KOLAB_SYNC_STRATEGY_DEFAULT;
-	g_return_val_if_fail (sync_prop != NULL, KOLAB_SYNC_STRATEGY_DEFAULT);
+
+	if (sync_prop == NULL)
+		return KOLAB_SYNC_STRATEGY_DEFAULT;
+
 	sid = kolab_util_misc_generic_integer_from_property (sync_prop,
 	                                                     KOLAB_SYNC_STRATEGY_DEFAULT);
 	return sid;
@@ -187,7 +190,10 @@ KolabTLSVariantID
 kolab_util_misc_tls_variant_from_property (const gchar *tls_variant)
 {
 	KolabTLSVariantID tvid = KOLAB_TLS_VARIANT_DEFAULT;
-	g_return_val_if_fail (tls_variant != NULL, KOLAB_TLS_VARIANT_DEFAULT);
+
+	if (tls_variant == NULL)
+		return KOLAB_TLS_VARIANT_DEFAULT;
+
 	tvid = kolab_util_misc_generic_integer_from_property (tls_variant,
 	                                                      KOLAB_TLS_VARIANT_DEFAULT);
 	return tvid;
@@ -197,7 +203,10 @@ KolabReqPkcs11
 kolab_util_misc_req_pkcs11_from_property (const gchar *req_pkcs11_prop)
 {
 	KolabReqPkcs11 pkreq = KOLAB_PKCS11_INFRASTRUCTURE_DEFAULT;
-	g_return_val_if_fail (req_pkcs11_prop != NULL, KOLAB_PKCS11_INFRASTRUCTURE_DEFAULT);
+
+	if (req_pkcs11_prop == NULL)
+		return KOLAB_PKCS11_INFRASTRUCTURE_DEFAULT;
+
 	pkreq = kolab_util_misc_generic_integer_from_property (req_pkcs11_prop,
 	                                                       KOLAB_PKCS11_INFRASTRUCTURE_DEFAULT);
 	return pkreq;
@@ -285,6 +294,16 @@ kolab_util_backend_prepare_settings (KolabSettingsHandler *ksettings,
 	GError *error = NULL;
 	g_debug ("%s()[%u] called.", __func__, __LINE__);
 	if (esource != NULL) {
+		prop_str = e_source_peek_uid (esource);
+		(void)kolab_settings_handler_set_char_field (ksettings,
+		                                             KOLAB_SETTINGS_HANDLER_CHAR_FIELD_ESOURCE_UID,
+		                                             g_strdup (prop_str),
+		                                             &error);
+		if (error != NULL) {
+			g_warning ("%s()[%u] error: %s", __func__, __LINE__, error->message);
+			g_error_free (error);
+			error = NULL;
+		}
 		prop_str = e_source_get_uri (esource);
 		(void)kolab_settings_handler_set_char_field (ksettings,
 		                                             KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_URI,
@@ -518,12 +537,30 @@ kolab_util_backend_account_uid_new_from_settings (KolabSettingsHandler *ksetting
 {
 	const gchar *user = NULL;
 	const gchar *server = NULL;
+	const gchar *esource_uid = NULL;
 	gchar *account_uid = NULL;
+	gchar *tmp_str = NULL;
 	GError *tmp_err = NULL;
 
 	g_assert (KOLAB_IS_SETTINGS_HANDLER (ksettings));
 	g_return_val_if_fail (err == NULL || *err == NULL, NULL);
 
+	esource_uid = kolab_settings_handler_get_char_field (ksettings,
+	                                                     KOLAB_SETTINGS_HANDLER_CHAR_FIELD_ESOURCE_UID,
+	                                                     &tmp_err);
+	if (tmp_err != NULL) {
+		g_warning ("%s: %s", __func__, tmp_err->message);
+		g_error_free (tmp_err);
+		tmp_err = NULL;
+	}
+
+	if (esource_uid != NULL) {
+		tmp_str = g_strdup (esource_uid);
+		goto done;
+	}
+
+	/* fallback in case we don't have an ESource UID set */
+
 	user = kolab_settings_handler_get_char_field (ksettings,
 	                                              KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_USER_NAME,
 	                                              &tmp_err);
@@ -539,7 +576,12 @@ kolab_util_backend_account_uid_new_from_settings (KolabSettingsHandler *ksetting
 		return NULL;
 	}
 
-	account_uid = g_strconcat (user, "@", server, NULL);
+	tmp_str = g_strconcat (user, "@", server, NULL);
+
+ done:
+
+	account_uid = g_strconcat (KOLAB_CAMEL_PROVIDER_PROTOCOL, "__", tmp_str, NULL);
+	g_free (tmp_str);
 
 	return account_uid;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]