From 620d3deb3c4433881ca3f7f43b647a9c4d62d300 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 16 Feb 2013 10:52:45 -0500 Subject: EMemoShellSidebar: Use EClientCache to obtain EClient instances. Also, defer to ESettingsClientCache to automatically set the default timezone on new ECalClient instances. --- modules/calendar/e-memo-shell-sidebar.c | 105 ++++++++++++-------------------- 1 file changed, 40 insertions(+), 65 deletions(-) (limited to 'modules/calendar') diff --git a/modules/calendar/e-memo-shell-sidebar.c b/modules/calendar/e-memo-shell-sidebar.c index b282aaf17b..c9f3d6930e 100644 --- a/modules/calendar/e-memo-shell-sidebar.c +++ b/modules/calendar/e-memo-shell-sidebar.c @@ -155,6 +155,22 @@ memo_shell_sidebar_emit_status_message (EMemoShellSidebar *memo_shell_sidebar, g_signal_emit (memo_shell_sidebar, signal_id, 0, status_message, -1.0); } +static EClientCache * +memo_shell_sidebar_ref_client_cache (EMemoShellSidebar *memo_shell_sidebar) +{ + EShell *shell; + EShellView *shell_view; + EShellBackend *shell_backend; + EShellSidebar *shell_sidebar; + + shell_sidebar = E_SHELL_SIDEBAR (memo_shell_sidebar); + shell_view = e_shell_sidebar_get_shell_view (shell_sidebar); + shell_backend = e_shell_view_get_shell_backend (shell_view); + shell = e_shell_backend_get_shell (shell_backend); + + return g_object_ref (e_shell_get_client_cache (shell)); +} + static void memo_shell_sidebar_backend_died_cb (EMemoShellSidebar *memo_shell_sidebar, ECalClient *client) @@ -225,15 +241,10 @@ memo_shell_sidebar_client_connect_cb (GObject *source_object, { EClient *client; ConnectClosure *closure = user_data; - EMemoShellContent *memo_shell_content; - EShellContent *shell_content; - EShellSidebar *shell_sidebar; - EShellView *shell_view; - ECalModel *model; - icaltimezone *timezone; GError *error = NULL; - client = e_cal_client_connect_finish (result, &error); + client = e_client_cache_get_client_finish ( + E_CLIENT_CACHE (source_object), result, &error); /* Sanity check. */ g_return_if_fail ( @@ -250,18 +261,6 @@ memo_shell_sidebar_client_connect_cb (GObject *source_object, goto exit; } - /* FIXME Sidebar should not be accessing the EShellContent. - * This probably needs to be moved to EMemoShellView. */ - shell_sidebar = E_SHELL_SIDEBAR (closure->memo_shell_sidebar); - shell_view = e_shell_sidebar_get_shell_view (shell_sidebar); - shell_content = e_shell_view_get_shell_content (shell_view); - - memo_shell_content = E_MEMO_SHELL_CONTENT (shell_content); - model = e_memo_shell_content_get_memo_model (memo_shell_content); - timezone = e_cal_model_get_timezone (model); - - e_cal_client_set_default_timezone (E_CAL_CLIENT (client), timezone); - e_memo_shell_sidebar_add_client (closure->memo_shell_sidebar, client); g_object_unref (client); @@ -279,17 +278,12 @@ memo_shell_sidebar_default_connect_cb (GObject *source_object, ESource *source; ConnectClosure *closure = user_data; EMemoShellSidebarPrivate *priv; - EShellContent *shell_content; - EShellSidebar *shell_sidebar; - EShellView *shell_view; - EMemoShellContent *memo_shell_content; - ECalModel *model; - icaltimezone *timezone; GError *error = NULL; priv = E_MEMO_SHELL_SIDEBAR_GET_PRIVATE (closure->memo_shell_sidebar); - client = e_cal_client_connect_finish (result, &error); + client = e_client_cache_get_client_finish ( + E_CLIENT_CACHE (source_object), result, &error); /* Sanity check. */ g_return_if_fail ( @@ -321,19 +315,8 @@ memo_shell_sidebar_default_connect_cb (GObject *source_object, priv->default_client = g_object_ref (client); - /* FIXME Sidebar should not be accessing the EShellContent. - * This probably needs to be moved to EMemoShellView. */ - shell_sidebar = E_SHELL_SIDEBAR (closure->memo_shell_sidebar); - shell_view = e_shell_sidebar_get_shell_view (shell_sidebar); - shell_content = e_shell_view_get_shell_content (shell_view); - - memo_shell_content = E_MEMO_SHELL_CONTENT (shell_content); - model = e_memo_shell_content_get_memo_model (memo_shell_content); - timezone = e_cal_model_get_timezone (model); - - e_cal_client_set_default_timezone (E_CAL_CLIENT (client), timezone); - - g_object_notify (G_OBJECT (shell_sidebar), "default-client"); + g_object_notify ( + G_OBJECT (closure->memo_shell_sidebar), "default-client"); g_object_unref (client); @@ -346,9 +329,7 @@ memo_shell_sidebar_set_default (EMemoShellSidebar *memo_shell_sidebar, ESource *source) { EMemoShellSidebarPrivate *priv; - EShellSidebar *shell_sidebar; - ECalClient *client; - const gchar *uid; + EClientCache *client_cache; priv = memo_shell_sidebar->priv; @@ -356,10 +337,6 @@ memo_shell_sidebar_set_default (EMemoShellSidebar *memo_shell_sidebar, if (source == priv->connecting_default_source_instance) return; - /* FIXME Sidebar should not be accessing the EShellContent. - * This probably needs to be moved to EMemoShellView. */ - shell_sidebar = E_SHELL_SIDEBAR (memo_shell_sidebar); - /* Cancel any unfinished previous request. */ if (priv->connecting_default_client != NULL) { g_cancellable_cancel (priv->connecting_default_client); @@ -367,28 +344,21 @@ memo_shell_sidebar_set_default (EMemoShellSidebar *memo_shell_sidebar, priv->connecting_default_client = NULL; } - uid = e_source_get_uid (source); - client = g_hash_table_lookup (priv->client_table, uid); - - /* If we already have an open connection for - * this UID, we can finish immediately. */ - if (client != NULL) { - if (priv->default_client != NULL) - g_object_unref (priv->default_client); - priv->default_client = g_object_ref (client); - g_object_notify (G_OBJECT (shell_sidebar), "default-client"); - return; - } - /* it's only for pointer comparison, no need to ref it */ priv->connecting_default_source_instance = source; priv->connecting_default_client = g_cancellable_new (); - e_cal_client_connect ( - source, E_CAL_CLIENT_SOURCE_TYPE_MEMOS, + client_cache = + memo_shell_sidebar_ref_client_cache (memo_shell_sidebar); + + e_client_cache_get_client ( + client_cache, source, + E_SOURCE_EXTENSION_MEMO_LIST, priv->connecting_default_client, memo_shell_sidebar_default_connect_cb, connect_closure_new (memo_shell_sidebar, source)); + + g_object_unref (client_cache); } static void @@ -886,8 +856,8 @@ void e_memo_shell_sidebar_add_source (EMemoShellSidebar *memo_shell_sidebar, ESource *source) { - ECalClientSourceType source_type; ESourceSelector *selector; + EClientCache *client_cache; GHashTable *client_table; EClient *default_client; const gchar *display_name; @@ -897,7 +867,6 @@ e_memo_shell_sidebar_add_source (EMemoShellSidebar *memo_shell_sidebar, g_return_if_fail (E_IS_MEMO_SHELL_SIDEBAR (memo_shell_sidebar)); g_return_if_fail (E_IS_SOURCE (source)); - source_type = E_CAL_CLIENT_SOURCE_TYPE_MEMOS; client_table = memo_shell_sidebar->priv->client_table; default_client = memo_shell_sidebar->priv->default_client; selector = e_memo_shell_sidebar_get_selector (memo_shell_sidebar); @@ -926,11 +895,17 @@ e_memo_shell_sidebar_add_source (EMemoShellSidebar *memo_shell_sidebar, memo_shell_sidebar_emit_status_message (memo_shell_sidebar, message); g_free (message); - e_cal_client_connect ( - source, source_type, + client_cache = + memo_shell_sidebar_ref_client_cache (memo_shell_sidebar); + + e_client_cache_get_client ( + client_cache, source, + E_SOURCE_EXTENSION_MEMO_LIST, memo_shell_sidebar->priv->loading_clients, memo_shell_sidebar_client_connect_cb, connect_closure_new (memo_shell_sidebar, source)); + + g_object_unref (client_cache); } void -- cgit v1.2.3