From 2dfd548d26e179dfb12d836b57a88c215d76a926 Mon Sep 17 00:00:00 2001
From: Milan Crha <mcrha@redhat.com>
Date: Mon, 8 Apr 2013 19:20:23 +0200
Subject: Bug #271262 - Allow Send/Receive of local stores in offline

---
 mail/mail-send-recv.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

(limited to 'mail/mail-send-recv.c')

diff --git a/mail/mail-send-recv.c b/mail/mail-send-recv.c
index a11b10662d..c9334bdf59 100644
--- a/mail/mail-send-recv.c
+++ b/mail/mail-send-recv.c
@@ -1153,6 +1153,16 @@ receive_update_got_store (CamelStore *store,
 	folder_cache = e_mail_session_get_folder_cache (
 		E_MAIL_SESSION (info->session));
 
+	if (store != NULL) {
+		CamelProvider *provider;
+
+		/* do not update remote stores in offline */
+		provider = camel_service_get_provider (CAMEL_SERVICE (store));
+		if (provider && (provider->flags & CAMEL_PROVIDER_IS_REMOTE) != 0 &&
+		    !camel_session_get_online (info->session))
+			store = NULL;
+	}
+
 	if (store != NULL) {
 		mail_folder_cache_note_store (
 			folder_cache, store, info->cancellable,
@@ -1213,7 +1223,7 @@ send_receive (GtkWindow *parent,
 	CamelFolder *local_outbox;
 	CamelService *transport;
 	struct _send_data *data;
-	GList *scan;
+	GList *scan, *siter;
 
 	if (send_recv_dialog != NULL) {
 		if (parent != NULL && gtk_widget_get_realized (send_recv_dialog)) {
@@ -1222,9 +1232,6 @@ send_receive (GtkWindow *parent,
 		return send_recv_dialog;
 	}
 
-	if (!camel_session_get_online (CAMEL_SESSION (session)))
-		return send_recv_dialog;
-
 	transport = ref_default_transport (session);
 
 	local_outbox =
@@ -1237,8 +1244,10 @@ send_receive (GtkWindow *parent,
 	if (transport != NULL)
 		g_object_unref (transport);
 
-	for (scan = data->infos; scan != NULL; scan = scan->next) {
-		struct _send_info *info = scan->data;
+	scan = g_list_copy (data->infos);
+
+	for (siter = scan; siter != NULL; siter = siter->next) {
+		struct _send_info *info = siter->data;
 
 		if (!CAMEL_IS_SERVICE (info->service))
 			continue;
@@ -1275,6 +1284,8 @@ send_receive (GtkWindow *parent,
 		}
 	}
 
+	g_list_free (scan);
+
 	return send_recv_dialog;
 }
 
-- 
cgit