[evolution-kolab] EBookBackendKolab: assign each book backend its own KolabMailAccess instance
- From: Christian Hilberg <chilberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-kolab] EBookBackendKolab: assign each book backend its own KolabMailAccess instance
- Date: Fri, 7 Sep 2012 10:07:58 +0000 (UTC)
commit 3b6a1e105cfb15048eb168d8dd62eee24b76277b
Author: Christian Hilberg <hilberg kernelconcepts de>
Date: Fri Sep 7 11:51:23 2012 +0200
EBookBackendKolab: assign each book backend its own KolabMailAccess instance
* each backend has its own cache directory,
so we need to write KolabMailAccess cache
data into these (i.e., configure KolabMailAccess
accordingly)
* once each backend instance is given its own
E-D-S process, we cannot share KolabMailAccess
instances among backend instances any longer
anyway
src/addressbook/e-book-backend-kolab.c | 109 ++++++++------------------------
1 files changed, 26 insertions(+), 83 deletions(-)
---
diff --git a/src/addressbook/e-book-backend-kolab.c b/src/addressbook/e-book-backend-kolab.c
index b320c31..c948422 100644
--- a/src/addressbook/e-book-backend-kolab.c
+++ b/src/addressbook/e-book-backend-kolab.c
@@ -57,10 +57,7 @@
(g_type_class_unref (g_type_class_ref (type)))
/*----------------------------------------------------------------------------*/
-/* table of KolabMailAccess objects */
-static GHashTable *koma_objects = NULL;
-static GMutex koma_objects_lock;
static GMutex active_book_views_lock;
/*----------------------------------------------------------------------------*/
@@ -248,25 +245,20 @@ book_backend_kolab_open (EBookBackendSync *backend,
CamelKolabIMAPXSettings *kolab_settings = NULL;
CamelNetworkSettings *network_settings = NULL;
KolabSettingsHandler *ksettings = NULL;
- KolabMailAccess *tmp_koma = NULL;
KolabSyncStrategyID sync_value = KOLAB_SYNC_STRATEGY_DEFAULT;
const gchar *extension_name = NULL;
const gchar *foldername = NULL;
gchar *servername = NULL;
gchar *username = NULL;
- gchar *user_at_server = NULL;
- gchar *tmp_key = NULL;
gboolean online = FALSE;
gboolean ok = FALSE;
GError *tmp_err = NULL;
+ g_return_if_fail (error == NULL || *error == NULL);
e_return_data_book_error_if_fail (E_IS_BOOK_BACKEND_KOLAB (backend), E_DATA_BOOK_STATUS_INVALID_ARG);
e_return_data_book_error_if_fail (E_IS_DATA_BOOK (book), E_DATA_BOOK_STATUS_INVALID_ARG);
/* cancellable may be NULL */
(void)only_if_exists; /* FIXME */
- e_return_data_book_error_if_fail (error == NULL || *error == NULL, E_DATA_BOOK_STATUS_INVALID_ARG);
-
- g_mutex_lock (&koma_objects_lock);
self = E_BOOK_BACKEND_KOLAB (backend);
priv = E_BOOK_BACKEND_KOLAB_PRIVATE (self);
@@ -290,40 +282,10 @@ book_backend_kolab_open (EBookBackendSync *backend,
extension_name = E_SOURCE_EXTENSION_KOLAB_FOLDER;
extension = e_source_get_extension (esource, extension_name);
sync_value = e_source_kolab_folder_get_sync_strategy (extension);
+
online = e_backend_get_online (E_BACKEND (backend));
-
foldername = kolab_util_backend_get_foldername (E_BACKEND (backend));
- /* Check whether we have a KolabMailAccess (KoMA) instance already */
- user_at_server = g_strdup_printf ("%s %s",
- username, servername);
- ok = g_hash_table_lookup_extended (koma_objects,
- user_at_server,
- (gpointer *) &tmp_key,
- (gpointer *) &tmp_koma);
-
- if (ok) {
- /* There already is a KoMA instance for user_at_server.
- * Use it and return
- */
- g_object_ref (tmp_koma);
- priv->book_koma = tmp_koma;
- ksettings = kolab_mail_access_get_settings_handler (priv->book_koma);
- kolab_util_backend_prepare_settings (ksettings,
- NULL,
- NULL,
- foldername,
- &sync_value);
-
- (void) kolab_util_backend_deploy_mode_by_backend (priv->book_koma,
- online,
- cancellable,
- &tmp_err);
- goto exit;
- }
-
- /* Nope, we need to setup a new KoMA instance and a settings handler */
-
/* init subsystems (these are no-ops if already called before) */
kolab_util_glib_init ();
kolab_util_http_init ();
@@ -356,12 +318,6 @@ book_backend_kolab_open (EBookBackendSync *backend,
/* create new KolabMailAccess instance */
priv->book_koma = KOLAB_MAIL_ACCESS (g_object_new (KOLAB_TYPE_MAIL_ACCESS, NULL));
- g_object_add_toggle_ref (G_OBJECT (priv->book_koma),
- kolab_util_backend_koma_table_cleanup_cb,
- koma_objects);
- g_hash_table_insert (koma_objects,
- user_at_server,
- priv->book_koma);
/* configure and bring up KolabMailAccess instance */
ok = kolab_mail_access_configure (priv->book_koma,
@@ -385,15 +341,10 @@ book_backend_kolab_open (EBookBackendSync *backend,
if (ksettings != NULL)
g_object_unref (ksettings);
-
- g_mutex_unlock (&koma_objects_lock);
-
if (servername != NULL)
g_free (servername);
if (username != NULL)
g_free (username);
- if (user_at_server != NULL)
- g_free (user_at_server);
/* do we have an error set? if so, propagate and return */
if (tmp_err != NULL) {
@@ -418,6 +369,8 @@ book_backend_kolab_remove (EBookBackendSync *backend,
{
EBookBackendKolab *self = NULL;
EBookBackendKolabPrivate *priv = NULL;
+ GError *tmp_err = NULL;
+ gboolean ok = FALSE;
g_return_if_fail (error == NULL || *error == NULL);
e_return_data_book_error_if_fail (E_IS_BOOK_BACKEND_KOLAB (backend), E_DATA_BOOK_STATUS_INVALID_ARG);
@@ -427,9 +380,18 @@ book_backend_kolab_remove (EBookBackendSync *backend,
self = E_BOOK_BACKEND_KOLAB (backend);
priv = E_BOOK_BACKEND_KOLAB_PRIVATE (self);
- g_warning ("%s: FIXME implement me", __func__);
-
- book_backend_kolab_notify_removed (self);
+ if (priv->book_koma != NULL) {
+ ok = kolab_mail_access_shutdown (priv->book_koma,
+ cancellable,
+ &tmp_err);
+ if (ok) {
+ g_object_unref (priv->book_koma);
+ priv->book_koma = NULL;
+ book_backend_kolab_notify_removed (self);
+ } else {
+ g_propagate_error (error, tmp_err);
+ }
+ }
}
static void
@@ -438,17 +400,18 @@ book_backend_kolab_refresh (EBookBackendSync *backend,
GCancellable *cancellable,
GError **error)
{
+#if 0
EBookBackendKolab *self = NULL;
EBookBackendKolabPrivate *priv = NULL;
-
+#endif
g_return_if_fail (error == NULL || *error == NULL);
e_return_data_book_error_if_fail (E_IS_BOOK_BACKEND_KOLAB (backend), E_DATA_BOOK_STATUS_INVALID_ARG);
e_return_data_book_error_if_fail (E_IS_DATA_BOOK (book), E_DATA_BOOK_STATUS_INVALID_ARG);
/* cancellable may be NULL */
-
+#if 0
self = E_BOOK_BACKEND_KOLAB (backend);
priv = E_BOOK_BACKEND_KOLAB_PRIVATE (self);
-
+#endif
g_warning ("%s: FIXME implement me", __func__);
}
@@ -814,8 +777,8 @@ book_backend_kolab_get_backend_property (EBookBackendSync *backend,
gchar **prop_value,
GError **error)
{
- EBookBackendKolab *self = NULL;
- EBookBackendKolabPrivate *priv = NULL;
+ /* EBookBackendKolab *self = NULL; */
+ /* EBookBackendKolabPrivate *priv = NULL; */
gboolean processed = TRUE;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -825,8 +788,8 @@ book_backend_kolab_get_backend_property (EBookBackendSync *backend,
e_return_data_book_error_val_if_fail (prop_name != NULL, E_DATA_BOOK_STATUS_INVALID_ARG);
e_return_data_book_error_val_if_fail (prop_value != NULL && *prop_value == NULL, E_DATA_BOOK_STATUS_INVALID_ARG);
- self = E_BOOK_BACKEND_KOLAB (backend);
- priv = E_BOOK_BACKEND_KOLAB_PRIVATE (self);
+ /* self = E_BOOK_BACKEND_KOLAB (backend); */
+ /* priv = E_BOOK_BACKEND_KOLAB_PRIVATE (self); */
if (g_str_equal (prop_name, CLIENT_BACKEND_PROPERTY_CAPABILITIES)) {
*prop_value = g_strdup ("net,bulk-removes,contact-lists,do-initial-query");
@@ -1083,8 +1046,6 @@ static void
book_backend_kolab_stop_book_view (EBookBackend *backend,
EDataBookView *book_view)
{
- EDataBookView *bv = NULL;
-
g_return_if_fail (E_IS_BOOK_BACKEND_KOLAB (backend));
g_return_if_fail (E_IS_DATA_BOOK_VIEW (book_view));
@@ -1105,14 +1066,6 @@ e_book_backend_kolab_init (EBookBackendKolab *backend)
{
EBookBackendKolabPrivate *priv = E_BOOK_BACKEND_KOLAB_PRIVATE (backend);
- g_mutex_lock (&koma_objects_lock);
- if (koma_objects == NULL)
- koma_objects = g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- g_free,
- g_object_unref);
- g_mutex_unlock (&koma_objects_lock);
-
g_debug ("%s()[%u] called.", __func__, __LINE__);
priv->book_koma = NULL;
@@ -1129,22 +1082,12 @@ e_book_backend_kolab_dispose (GObject *object)
EBookBackendKolabPrivate *priv = E_BOOK_BACKEND_KOLAB_PRIVATE (self);
g_debug ("%s()[%u] called.", __func__, __LINE__);
-#if 0 /* FIXME */
- if (e_book_backend_is_loaded (self)) {
- e_book_backend_set_is_writable (self, FALSE);
- e_book_backend_notify_writable (self, FALSE);
- e_book_backend_notify_connection_status (self, FALSE);
- e_book_backend_set_is_loaded (self, FALSE);
- }
-#endif
-
- g_warning ("%s()[%u] FIXME KolabMailAccess (table) disposal", __func__, __LINE__);
-#if 0 /* FIXME (check g_object_toggle_ref cleanup callback) */
if (priv->book_koma != NULL) {
g_object_unref (priv->book_koma);
priv->book_koma = NULL;
}
-#endif
+
+ G_OBJECT_CLASS (e_book_backend_kolab_parent_class)->dispose (object);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]