[evolution-data-server/gnome-3-22] Bug 779156 - [IMAPx] Not listening for changes after resume from suspend



commit 7b16c312ec0e946f4d4eb526cdd393db4730f961
Author: Milan Crha <mcrha redhat com>
Date:   Tue Feb 28 14:34:19 2017 +0100

    Bug 779156 - [IMAPx] Not listening for changes after resume from suspend

 camel/providers/imapx/camel-imapx-conn-manager.c |   47 ++++++++++++++++++++++
 camel/providers/imapx/camel-imapx-conn-manager.h |    5 ++
 camel/providers/imapx/camel-imapx-store.c        |   17 +++++++-
 3 files changed, 68 insertions(+), 1 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-conn-manager.c 
b/camel/providers/imapx/camel-imapx-conn-manager.c
index c8bda8b..9ad1c31 100644
--- a/camel/providers/imapx/camel-imapx-conn-manager.c
+++ b/camel/providers/imapx/camel-imapx-conn-manager.c
@@ -1344,6 +1344,53 @@ camel_imapx_conn_manager_run_job_sync (CamelIMAPXConnManager *conn_man,
 }
 
 static gboolean
+imapx_conn_manager_noop_run_sync (CamelIMAPXJob *job,
+                                 CamelIMAPXServer *server,
+                                 GCancellable *cancellable,
+                                 GError **error)
+{
+       CamelIMAPXMailbox *mailbox;
+       gboolean success;
+       GError *local_error = NULL;
+
+       g_return_val_if_fail (job != NULL, FALSE);
+       g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (server), FALSE);
+
+       mailbox = camel_imapx_job_get_mailbox (job);
+       g_return_val_if_fail (CAMEL_IS_IMAPX_MAILBOX (mailbox), FALSE);
+
+       success = camel_imapx_server_noop_sync (server, mailbox, cancellable, &local_error);
+
+       camel_imapx_job_set_result (job, success, NULL, local_error, NULL);
+
+       if (local_error)
+               g_propagate_error (error, local_error);
+
+       return success;
+}
+
+gboolean
+camel_imapx_conn_manager_noop_sync (CamelIMAPXConnManager *conn_man,
+                                   CamelIMAPXMailbox *mailbox,
+                                   GCancellable *cancellable,
+                                   GError **error)
+{
+       CamelIMAPXJob *job;
+       gboolean success;
+
+       g_return_val_if_fail (CAMEL_IS_IMAPX_CONN_MANAGER (conn_man), FALSE);
+
+       job = camel_imapx_job_new (CAMEL_IMAPX_JOB_NOOP, mailbox,
+               imapx_conn_manager_noop_run_sync, NULL, NULL);
+
+       success = camel_imapx_conn_manager_run_job_sync (conn_man, job, NULL, cancellable, error);
+
+       camel_imapx_job_unref (job);
+
+       return success;
+}
+
+static gboolean
 imapx_conn_manager_nothing_matches (CamelIMAPXJob *job,
                                    CamelIMAPXJob *other_job)
 {
diff --git a/camel/providers/imapx/camel-imapx-conn-manager.h 
b/camel/providers/imapx/camel-imapx-conn-manager.h
index f0edd54..f649aa3 100644
--- a/camel/providers/imapx/camel-imapx-conn-manager.h
+++ b/camel/providers/imapx/camel-imapx-conn-manager.h
@@ -86,6 +86,11 @@ gboolean     camel_imapx_conn_manager_run_job_sync
                                                 CamelIMAPXJobMatchesFunc finish_before_job,
                                                 GCancellable *cancellable,
                                                 GError **error);
+gboolean       camel_imapx_conn_manager_noop_sync
+                                               (CamelIMAPXConnManager *conn_man,
+                                                CamelIMAPXMailbox *mailbox,
+                                                GCancellable *cancellable,
+                                                GError **error);
 gboolean       camel_imapx_conn_manager_list_sync
                                                (CamelIMAPXConnManager *conn_man,
                                                 const gchar *pattern,
diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c
index d00b103..61f02de 100644
--- a/camel/providers/imapx/camel-imapx-store.c
+++ b/camel/providers/imapx/camel-imapx-store.c
@@ -781,6 +781,7 @@ imapx_connect_sync (CamelService *service,
                     GError **error)
 {
        CamelIMAPXStore *imapx_store;
+       CamelIMAPXMailbox *mailbox;
 
        /* Chain up to parent's method. */
        if (!CAMEL_SERVICE_CLASS (camel_imapx_store_parent_class)->connect_sync (service, cancellable, error))
@@ -788,7 +789,21 @@ imapx_connect_sync (CamelService *service,
 
        imapx_store = CAMEL_IMAPX_STORE (service);
 
-       return camel_imapx_conn_manager_connect_sync (imapx_store->priv->conn_man, cancellable, error);
+       if (!camel_imapx_conn_manager_connect_sync (imapx_store->priv->conn_man, cancellable, error))
+               return FALSE;
+
+       mailbox = camel_imapx_store_ref_mailbox (imapx_store, "INBOX");
+       if (mailbox) {
+               /* To eventually start IDLE/NOTIFY listener */
+               if (!camel_imapx_conn_manager_noop_sync (imapx_store->priv->conn_man, mailbox, cancellable, 
error)) {
+                       g_clear_object (&mailbox);
+                       return FALSE;
+               }
+
+               g_clear_object (&mailbox);
+       }
+
+       return TRUE;
 }
 
 static gboolean


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