[evolution-data-server] camel_store_get_folder_info_sync: Connect first unless offline.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] camel_store_get_folder_info_sync: Connect first unless offline.
- Date: Sat, 17 Aug 2013 13:08:45 +0000 (UTC)
commit 3e28be9b199dc89a13003e1d10fe4a57123f80e0
Author: Matthew Barnes <mbarnes redhat com>
Date: Sat Aug 17 07:58:34 2013 -0400
camel_store_get_folder_info_sync: Connect first unless offline.
camel/camel-imapx-store.c | 6 ----
camel/camel-store.c | 40 +++++++++++++++++++++++++++++++
camel/providers/nntp/camel-nntp-store.c | 13 +--------
3 files changed, 42 insertions(+), 17 deletions(-)
---
diff --git a/camel/camel-imapx-store.c b/camel/camel-imapx-store.c
index 140650d..18bab78 100644
--- a/camel/camel-imapx-store.c
+++ b/camel/camel-imapx-store.c
@@ -1619,12 +1619,6 @@ imapx_store_get_folder_info_sync (CamelStore *store,
return fi;
}
- if (!camel_service_connect_sync (
- CAMEL_SERVICE (store), cancellable, error)) {
- g_mutex_unlock (&imapx_store->get_finfo_lock);
- return NULL;
- }
-
if (*top && flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST) {
fi = get_folder_info_offline (store, top, flags, error);
g_mutex_unlock (&imapx_store->get_finfo_lock);
diff --git a/camel/camel-store.c b/camel/camel-store.c
index 647c2e5..e95999b 100644
--- a/camel/camel-store.c
+++ b/camel/camel-store.c
@@ -37,6 +37,7 @@
#include "camel-db.h"
#include "camel-debug.h"
#include "camel-folder.h"
+#include "camel-offline-store.h"
#include "camel-session.h"
#include "camel-store.h"
#include "camel-store-settings.h"
@@ -300,6 +301,39 @@ store_get_special (CamelStore *store,
return folder;
}
+static gboolean
+store_maybe_connect_sync (CamelStore *store,
+ GCancellable *cancellable,
+ GError **error)
+{
+ CamelService *service;
+ CamelServiceConnectionStatus status;
+ gboolean connect = FALSE;
+ gboolean success = TRUE;
+
+ /* This is meant to recover from dropped connections
+ * when the CamelService is online but disconnected. */
+
+ service = CAMEL_SERVICE (store);
+ status = camel_service_get_connection_status (service);
+ connect = (status != CAMEL_SERVICE_CONNECTED);
+
+ if (CAMEL_IS_OFFLINE_STORE (store)) {
+ CamelOfflineStore *offline_store;
+
+ offline_store = CAMEL_OFFLINE_STORE (store);
+ if (!camel_offline_store_get_online (offline_store))
+ connect = FALSE;
+ }
+
+ if (connect) {
+ success = camel_service_connect_sync (
+ service, cancellable, error);
+ }
+
+ return success;
+}
+
static void
store_finalize (GObject *object)
{
@@ -2196,6 +2230,12 @@ camel_store_get_folder_info_sync (CamelStore *store,
cancellable, _("Scanning folders in '%s'"), name);
g_free (name);
+ /* Recover from a dropped connection, unless we're offline. */
+ if (!store_maybe_connect_sync (store, cancellable, error)) {
+ camel_operation_pop_message (cancellable);
+ return NULL;
+ }
+
info = class->get_folder_info_sync (
store, top, flags, cancellable, error);
if ((flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED) == 0)
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index 395f7e6..0cd8647 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -1307,17 +1307,8 @@ nntp_get_folder_info_online (CamelStore *store,
GCancellable *cancellable,
GError **error)
{
- CamelService *service;
- CamelFolderInfo *info = NULL;
-
- service = CAMEL_SERVICE (store);
-
- /* Reconnect if necessary. */
- if (camel_service_connect_sync (service, cancellable, error))
- info = nntp_get_folder_info (
- store, top, flags, TRUE, cancellable, error);
-
- return info;
+ return nntp_get_folder_info (
+ store, top, flags, TRUE, cancellable, error);
}
static CamelFolderInfo *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]