[evolution-kolab/ek-wip-porting: 10/14] libekolab: added (transient) utility functions for account UIDs



commit 12af8e5c9bc3499b66701808be0231d8cb6c4f2b
Author: Christian Hilberg <hilberg kernelconcepts de>
Date:   Tue Mar 13 17:48:57 2012 +0100

    libekolab: added (transient) utility functions for account UIDs
    
    * added function to create a CamelURL with the proper settings
      from KolabSettingsHandler for setting a CamelSettings object
      properties from it (this will need to be replaced by directly
      setting the CamelSettings properties from KolabSettingsHandler)
    * added a function to generate an account UID for backend use.
      The UID returned resembles much the one used in 2.30 and needs
      to be fixed so that it will be the same UID used in the mailer
      frontend for that same account (so the accounts can be
      correlated more easily)

 src/libekolab/kolab-util-backend.c |  129 ++++++++++++++++++++++++++++++++----
 src/libekolab/kolab-util-backend.h |    4 +
 2 files changed, 121 insertions(+), 12 deletions(-)
---
diff --git a/src/libekolab/kolab-util-backend.c b/src/libekolab/kolab-util-backend.c
index 9bb9778..04cefbd 100644
--- a/src/libekolab/kolab-util-backend.c
+++ b/src/libekolab/kolab-util-backend.c
@@ -36,6 +36,7 @@
 #include <libedataserver/e-source.h>
 
 #include <libekolabutil/camel-system-headers.h>
+#include <libekolabutil/kolab-util-camel.h>
 
 #include "kolab-types.h"
 #include "kolab-mail-access.h"
@@ -123,24 +124,17 @@ kolab_util_backend_foldername_new_from_sourcename (const gchar *sourcename,
 gchar *
 kolab_util_backend_get_relative_path_from_uri (const gchar *uri)
 {
-	(void)uri;
-	/* FIXME implement me */
-	g_error ("%s: FIXME implement me", __func__);
-	return NULL;
-#if 0
 	CamelURL *c_url = NULL;
-	CamelException *cex = NULL;
 	gchar *tmp = NULL;
 	gchar *path = NULL;
+	GError *tmp_err = NULL;
 
-	cex = camel_exception_new ();
-	c_url = camel_url_new (uri, cex);
+	c_url = camel_url_new (uri, &tmp_err);
 	if (c_url == NULL) {
-		g_warning ("%s()[%u] error: %s", __func__, __LINE__, camel_exception_get_description (cex));
-		camel_exception_free (cex);
+		g_warning ("%s()[%u] error: %s", __func__, __LINE__, tmp_err->message);
+		g_error_free (tmp_err);
 		return NULL;
 	}
-	camel_exception_free (cex);
 	tmp = g_strdup (c_url->path);
 	camel_url_free (c_url);
 	if (tmp[0] == '/') {
@@ -152,7 +146,6 @@ kolab_util_backend_get_relative_path_from_uri (const gchar *uri)
 	}
 
 	return path;
-#endif
 } /* kolab_util_backend_get_relative_path_from_uri () */
 
 static gint
@@ -438,3 +431,115 @@ kolab_util_backend_get_tls_variant_desc (KolabTLSVariantID id)
 
 	return gettext (kolab_tls_variant_desc[id]);
 }
+
+CamelURL*
+kolab_util_backend_camel_url_new_from_settings (KolabSettingsHandler *ksettings,
+                                                GError **err)
+{
+	KolabTLSVariantID tlsvariant = KOLAB_TLS_VARIANT_NONE;
+	CamelURL *camel_url = NULL;
+	const gchar *variant_str = NULL;
+	const 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);
+
+	/* create url string for session getter */
+	camel_url = camel_url_new (KOLAB_CAMELURL_DUMMY_URL, NULL);
+	camel_url_set_protocol (camel_url, KOLAB_CAMEL_PROVIDER_PROTOCOL);
+	tmp_str = kolab_settings_handler_get_char_field (ksettings,
+	                                                 KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_SERVER_NAME,
+	                                                 &tmp_err);
+	if (tmp_err != NULL) {
+		camel_url_free (camel_url);
+		g_propagate_error (err, tmp_err);
+		return NULL;
+	}
+	if (tmp_str == NULL) {
+		camel_url_free (camel_url);
+		/* FIXME mark as a translatable string */
+		g_set_error (err,
+		             KOLAB_BACKEND_ERROR,
+		             KOLAB_BACKEND_ERROR_INTERNAL,
+		             "Internal inconsistency detected: Kolab server name not set");
+		return NULL;
+
+	}
+	camel_url_set_host (camel_url, tmp_str);
+	tmp_str = kolab_settings_handler_get_char_field (ksettings,
+	                                                 KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_USER_NAME,
+	                                                 &tmp_err);
+	if (tmp_err != NULL) {
+		camel_url_free (camel_url);
+		g_propagate_error (err, tmp_err);
+		return NULL;
+	}
+	if (tmp_str == NULL) {
+		camel_url_free (camel_url);
+		/* FIXME mark as a translatable string */
+		g_set_error (err,
+		             KOLAB_BACKEND_ERROR,
+		             KOLAB_BACKEND_ERROR_INTERNAL,
+		             "Internal inconsistency detected: Kolab User ID not set");
+		return NULL;
+
+	}
+	camel_url_set_user (camel_url, tmp_str);
+	tlsvariant = kolab_settings_handler_get_uint_field (ksettings,
+	                                                    KOLAB_SETTINGS_HANDLER_UINT_FIELD_TLS_VARIANT,
+	                                                    &tmp_err);
+	if (tmp_err != NULL) {
+		camel_url_free (camel_url);
+		g_propagate_error (err, tmp_err);
+		return NULL;
+	}
+
+	switch (tlsvariant) {
+	case KOLAB_TLS_VARIANT_SSL:
+		variant_str = KOLAB_CAMELURL_TLSVARIANT_SSL;
+		break;
+	case KOLAB_TLS_VARIANT_STARTTLS:
+		variant_str = KOLAB_CAMELURL_TLSVARIANT_STARTTLS;
+		break;
+	default:
+		variant_str = KOLAB_CAMELURL_TLSVARIANT_NONE;
+	}
+
+	camel_url_set_param (camel_url,
+	                     KOLAB_CAMELURL_PARAM_SSL,
+	                     variant_str);
+	return camel_url;
+}
+
+gchar*
+kolab_util_backend_account_uid_new_from_settings (KolabSettingsHandler *ksettings,
+                                                  GError **err)
+{
+	const gchar *user = NULL;
+	const gchar *server = NULL;
+	gchar *account_uid = NULL;
+	GError *tmp_err = NULL;
+
+	g_assert (KOLAB_IS_SETTINGS_HANDLER (ksettings));
+	g_return_val_if_fail (err == NULL || *err == NULL, NULL);
+
+	user = kolab_settings_handler_get_char_field (ksettings,
+	                                              KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_USER_NAME,
+	                                              &tmp_err);
+	if (tmp_err != NULL) {
+		g_propagate_error (err, tmp_err);
+		return NULL;
+	}
+	server = kolab_settings_handler_get_char_field (ksettings,
+	                                                KOLAB_SETTINGS_HANDLER_CHAR_FIELD_KOLAB_SERVER_NAME,
+	                                                &tmp_err);
+	if (tmp_err != NULL) {
+		g_propagate_error (err, tmp_err);
+		return NULL;
+	}
+
+	account_uid = g_strconcat (user, "@", server, NULL);
+
+	return account_uid;
+}
diff --git a/src/libekolab/kolab-util-backend.h b/src/libekolab/kolab-util-backend.h
index 61126ea..71f1805 100644
--- a/src/libekolab/kolab-util-backend.h
+++ b/src/libekolab/kolab-util-backend.h
@@ -39,6 +39,7 @@
 #include <libecal/e-cal-component.h>
 #include <libedataserver/e-source.h>
 
+#include <libekolabutil/camel-system-headers.h>
 #include <libekolabutil/kolab-util-sqlite.h>
 
 
@@ -87,6 +88,9 @@ gboolean kolab_util_backend_sqlite_db_new_open (KolabUtilSqliteDb **kdb, KolabSe
 const gchar* kolab_util_backend_get_sync_strategy_desc (KolabSyncStrategyID id);
 const gchar* kolab_util_backend_get_tls_variant_desc (KolabTLSVariantID id);
 
+CamelURL* kolab_util_backend_camel_url_new_from_settings (KolabSettingsHandler *ksettings, GError **err);
+gchar* kolab_util_backend_account_uid_new_from_settings (KolabSettingsHandler *ksettings, GError **err);
+
 /*----------------------------------------------------------------------------*/
 
 #endif /* _KOLAB_UTIL_BACKEND_H_ */



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