Hello community,

here is the log from the commit of package evolution-data-server for 
openSUSE:Factory checked in at 2017-02-19 00:38:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/evolution-data-server (Old)
 and      /work/SRC/openSUSE:Factory/.evolution-data-server.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "evolution-data-server"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/evolution-data-server/evolution-data-server.changes  
    2017-01-23 11:21:25.761678810 +0100
+++ 
/work/SRC/openSUSE:Factory/.evolution-data-server.new/evolution-data-server.changes
 2017-02-19 00:38:27.906086560 +0100
@@ -1,0 +2,13 @@
+Mon Feb 13 12:51:48 UTC 2017 - [email protected]
+
+- Update to version 3.22.5:
+  + Ignore errors when getting message for a body-contains search.
+  + Fix a ref/unref imbalance of CamelIMAPXStoreInfo.
+  + Fix a memory leak in camel_imapx_server_append_message_sync().
+  + Unable to add additional Google calendar.
+  + [IMAPx] Avoid unneeded full flags folder update when no changes
+    made.
+  + Bugs fixed: bgo#777431, bgo#777695, bgo#777781, bgo#778222,
+    bgo#778069, bgo#778265.
+
+-------------------------------------------------------------------

Old:
----
  evolution-data-server-3.22.4.tar.xz

New:
----
  evolution-data-server-3.22.5.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ evolution-data-server.spec ++++++
--- /var/tmp/diff_new_pack.GbNMmR/_old  2017-02-19 00:38:28.557994877 +0100
+++ /var/tmp/diff_new_pack.GbNMmR/_new  2017-02-19 00:38:28.561994314 +0100
@@ -33,7 +33,7 @@
 
 Name:           evolution-data-server
 %define _evo_version 3.22
-Version:        3.22.4
+Version:        3.22.5
 Release:        0
 Summary:        Evolution Data Server
 License:        LGPL-2.1+

++++++ evolution-data-server-3.22.4.tar.xz -> 
evolution-data-server-3.22.5.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/evolution-data-server-3.22.4/NEWS 
new/evolution-data-server-3.22.5/NEWS
--- old/evolution-data-server-3.22.4/NEWS       2017-01-16 12:38:20.000000000 
+0100
+++ new/evolution-data-server-3.22.5/NEWS       2017-02-13 12:39:48.000000000 
+0100
@@ -1,3 +1,21 @@
+Evolution-Data-Server 3.22.5 2017-02-13
+---------------------------------------
+
+Bug Fixes:
+       Bug 777431 - [IMAPx] Gmail's BODY search returns only whole word 
matches (Milan Crha)
+       Bug 777695 - [ECalClient] Produce CRLF line endings in iCalendar string 
(Tim Ruffing)
+       Bug 777781 - Unfold header values before comparing them (Milan Crha)
+       Bug 778222 - Fix a build break with gperf 3.1 (Milan Crha)
+       Bug 778069 - UI not updated after IMAP NOTIFY notifications (Milan Crha)
+       Bug 778265 - Serialize access to underlying NNTP stream (Milan Crha)
+
+Miscellaneous:
+       Ignore errors when getting message for a body-contains search (Milan 
Crha)
+       Fix a ref/unref imbalance of CamelIMAPXStoreInfo (Milan Crha)
+       Fix a memory leak in camel_imapx_server_append_message_sync() (Milan 
Crha)
+       Unable to add additional Google calendar (Milan Crha)
+       [IMAPx] Avoid unneeded full flags folder update when no changes made 
(Milan Crha)
+
 Evolution-Data-Server 3.22.4 2017-01-16
 ---------------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/calendar/libecal/e-cal-client.c 
new/evolution-data-server-3.22.5/calendar/libecal/e-cal-client.c
--- old/evolution-data-server-3.22.4/calendar/libecal/e-cal-client.c    
2017-01-05 15:41:18.000000000 +0100
+++ new/evolution-data-server-3.22.5/calendar/libecal/e-cal-client.c    
2017-01-26 14:00:24.000000000 +0100
@@ -3470,10 +3470,10 @@
        vcal_string = g_string_new (NULL);
        g_string_append (
                vcal_string,
-               "BEGIN:VCALENDAR\n"
-               "PRODID:-//Ximian//NONSGML Evolution Calendar//EN\n"
-               "VERSION:2.0\n"
-               "METHOD:PUBLISH\n");
+               "BEGIN:VCALENDAR\r\n"
+               "PRODID:-//Ximian//NONSGML Evolution Calendar//EN\r\n"
+               "VERSION:2.0\r\n"
+               "METHOD:PUBLISH\r\n");
 
        /* Now concatenate all the timezone strings. This also frees the
         * timezone strings as it goes. */
@@ -3485,7 +3485,7 @@
        /* If there were any timezones to send, create a complete VCALENDAR,
         * else just send the VEVENT/VTODO string. */
        g_string_append (vcal_string, obj_string);
-       g_string_append (vcal_string, "END:VCALENDAR\n");
+       g_string_append (vcal_string, "END:VCALENDAR\r\n");
        g_free (obj_string);
 
        obj_string = g_string_free (vcal_string, FALSE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/camel-folder-search.c 
new/evolution-data-server-3.22.5/camel/camel-folder-search.c
--- old/evolution-data-server-3.22.4/camel/camel-folder-search.c        
2016-09-19 10:00:48.000000000 +0200
+++ new/evolution-data-server-3.22.5/camel/camel-folder-search.c        
2017-01-18 11:20:08.000000000 +0100
@@ -75,6 +75,8 @@
         * This saves us having to perform more complex UID life cycle 
management
         * and the overhead from the additional refs/unrefs it would require. */
        GPtrArray *owned_pstrings;
+
+       gboolean only_cached_messages;
 };
 
 typedef enum {
@@ -269,13 +271,28 @@
 }
 
 static CamelMimeMessage *
+search_get_message_sync (CamelFolderSearch *search,
+                        CamelFolder *folder,
+                        const gchar *uid,
+                        GCancellable *cancellable)
+{
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SEARCH (search), NULL);
+       g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
+       g_return_val_if_fail (uid != NULL, NULL);
+
+       if (camel_folder_search_get_only_cached_messages (search))
+               return camel_folder_get_message_cached (folder, uid, 
cancellable);
+
+       return camel_folder_get_message_sync (folder, uid, cancellable, NULL);
+}
+
+static CamelMimeMessage *
 get_current_message (CamelFolderSearch *search)
 {
        if (!search || !search->folder || !search->current)
                return NULL;
 
-       return camel_folder_get_message_sync (
-               search->folder, search->current->uid, 
search->priv->cancellable, NULL);
+       return search_get_message_sync (search, search->folder, 
search->current->uid, search->priv->cancellable);
 }
 
 static CamelSExpResult *
@@ -576,7 +593,8 @@
 }
 
 static gboolean
-match_words_message (CamelFolder *folder,
+match_words_message (CamelFolderSearch *search,
+                    CamelFolder *folder,
                      const gchar *uid,
                      struct _camel_search_words *words,
                      GCancellable *cancellable,
@@ -589,7 +607,7 @@
        if (g_cancellable_set_error_if_cancelled (cancellable, error))
                return truth;
 
-       msg = camel_folder_get_message_sync (folder, uid, cancellable, error);
+       msg = search_get_message_sync (search, folder, uid, cancellable);
        if (msg) {
                mask = 0;
                truth = match_words_1message ((CamelDataWrapper *) msg, words, 
&mask, cancellable);
@@ -622,7 +640,7 @@
                for (i = 0; i < indexed->len && !g_cancellable_is_cancelled 
(cancellable); i++) {
                        const gchar *uid = g_ptr_array_index (indexed, i);
 
-                       if (match_words_message (
+                       if (match_words_message (search,
                                        search->folder, uid, words,
                                        cancellable, error))
                                g_ptr_array_add (matches, (gchar *) uid);
@@ -635,7 +653,7 @@
                for (i = 0; i < v->len && !g_cancellable_is_cancelled 
(cancellable); i++) {
                        gchar *uid = g_ptr_array_index (v, i);
 
-                       if (match_words_message (
+                       if (match_words_message (search,
                                search->folder, uid, words,
                                cancellable, error))
                                g_ptr_array_add (matches, (gchar *) uid);
@@ -1079,7 +1097,7 @@
                                                                error);
                                        } else {
                                                /* TODO: cache current message 
incase of multiple body search terms */
-                                               truth = match_words_message (
+                                               truth = match_words_message 
(search,
                                                        search->folder,
                                                        
camel_message_info_get_uid (search->current),
                                                        words,
@@ -1181,8 +1199,7 @@
                        for (i = 0; i < v->len && !g_cancellable_is_cancelled 
(search->priv->cancellable); i++) {
                                gchar *uid = g_ptr_array_index (v, i);
 
-                               message = camel_folder_get_message_sync (
-                                       search->folder, uid, 
search->priv->cancellable, NULL);
+                               message = search_get_message_sync (search, 
search->folder, uid, search->priv->cancellable);
                                if (message) {
                                        if (camel_search_message_body_contains 
((CamelDataWrapper *) message, &pattern)) {
                                                g_ptr_array_add 
(r->value.ptrarray, uid);
@@ -1698,6 +1715,7 @@
 camel_folder_search_init (CamelFolderSearch *search)
 {
        search->priv = CAMEL_FOLDER_SEARCH_GET_PRIVATE (search);
+       search->priv->only_cached_messages = FALSE;
        search->sexp = camel_sexp_new ();
 }
 
@@ -1735,6 +1753,44 @@
 }
 
 /**
+ * camel_folder_search_set_only_cached_messages:
+ * @search: a #CamelFolderSearch
+ * @only_cached_messages: a value to set
+ *
+ * Sets whether only locally cached messages can be searched. The default
+ * value is %FALSE, which means that when a message is required and it is
+ * not available locally, then it is downloaded from the server, if possible.
+ *
+ * Since: 3.22.5
+ **/
+void
+camel_folder_search_set_only_cached_messages (CamelFolderSearch *search,
+                                             gboolean only_cached_messages)
+{
+       g_return_if_fail (CAMEL_IS_FOLDER_SEARCH (search));
+
+       search->priv->only_cached_messages = only_cached_messages;
+}
+
+/**
+ * camel_folder_search_get_only_cached_messages:
+ * @search: a #CamelFolderSearch
+ *
+ * Returns: Whether only cached messages can be searched. See
+ *    camel_folder_search_set_only_cached_messages() for more
+ *    information what it means.
+ *
+ * Since: 3.22.5
+ **/
+gboolean
+camel_folder_search_get_only_cached_messages (CamelFolderSearch *search)
+{
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SEARCH (search), FALSE);
+
+       return search->priv->only_cached_messages;
+}
+
+/**
  * camel_folder_search_set_folder:
  * @search:
  * @folder: A folder.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/camel-folder-search.h 
new/evolution-data-server-3.22.5/camel/camel-folder-search.h
--- old/evolution-data-server-3.22.4/camel/camel-folder-search.h        
2016-03-21 08:34:20.000000000 +0100
+++ new/evolution-data-server-3.22.5/camel/camel-folder-search.h        
2017-01-18 11:16:20.000000000 +0100
@@ -268,6 +268,11 @@
 GType          camel_folder_search_get_type    (void) G_GNUC_CONST;
 CamelFolderSearch *
                camel_folder_search_new         (void);
+void           camel_folder_search_set_only_cached_messages
+                                               (CamelFolderSearch *search,
+                                                gboolean only_cached_messages);
+gboolean       camel_folder_search_get_only_cached_messages
+                                               (CamelFolderSearch *search);
 
 /* XXX This stuff currently gets cleared when you run a search.
  *     What on earth was i thinking ... */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/evolution-data-server-3.22.4/camel/camel-folder.c 
new/evolution-data-server-3.22.5/camel/camel-folder.c
--- old/evolution-data-server-3.22.4/camel/camel-folder.c       2016-12-07 
22:03:26.000000000 +0100
+++ new/evolution-data-server-3.22.5/camel/camel-folder.c       2017-01-18 
11:15:14.000000000 +0100
@@ -3022,7 +3022,7 @@
                                GError **error)
 {
        CamelFolderClass *class;
-       CamelMimeMessage *message = NULL;
+       CamelMimeMessage *message;
 
        g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
        g_return_val_if_fail (message_uid != NULL, NULL);
@@ -3038,21 +3038,14 @@
                message_uid, camel_service_get_display_name (CAMEL_SERVICE 
(camel_folder_get_parent_store (folder))),
                camel_folder_get_full_name (folder));
 
-       if (class->get_message_cached) {
-               /* Return cached message, if available locally; this should
-                * not do any network I/O, only check if message is already
-                * downloaded and return it quicker, not being blocked by
-                * the folder's lock.  Returning NULL is not considered as
-                * an error, it just means that the message is still
-                * to-be-downloaded. */
-               message = class->get_message_cached (
-                       folder, message_uid, cancellable);
-       }
+       message = camel_folder_get_message_cached (folder, message_uid, 
cancellable);
 
        if (message == NULL) {
                /* Recover from a dropped connection, unless we're offline. */
-               if (!folder_maybe_connect_sync (folder, cancellable, error))
+               if (!folder_maybe_connect_sync (folder, cancellable, error)) {
+                       camel_operation_pop_message (cancellable);
                        return NULL;
+               }
 
                camel_folder_lock (folder);
 
@@ -3094,6 +3087,42 @@
        return message;
 }
 
+/**
+ * camel_folder_get_message_cached:
+ * @folder: a #CamelFolder
+ * @message_uid: the message UID
+ * @cancellable: optional #GCancellable object, or %NULL
+ *
+ * Gets the message corresponding to @message_uid from the @folder cache,
+ * if available locally. This should not do any network I/O, only check
+ * if message is already downloaded and return it quickly, not being
+ * blocked by the folder's lock. Returning NULL is not considered as
+ * an error, it just means that the message is still to-be-downloaded.
+ *
+ * Note: This function is called automatically within 
camel_folder_get_message_sync().
+ *
+ * Returns: (transfer full) (nullable): a cached #CamelMimeMessage 
corresponding
+ *    to the requested UID
+ *
+ * Since: 3.22.5
+ **/
+CamelMimeMessage *
+camel_folder_get_message_cached (CamelFolder *folder,
+                                const gchar *message_uid,
+                                GCancellable *cancellable)
+{
+       CamelFolderClass *class;
+
+       g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
+       g_return_val_if_fail (message_uid != NULL, NULL);
+
+       class = CAMEL_FOLDER_GET_CLASS (folder);
+       if (!class->get_message_cached)
+               return NULL;
+
+       return class->get_message_cached (folder, message_uid, cancellable);
+}
+
 /* Helper for camel_folder_get_message() */
 static void
 folder_get_message_thread (GTask *task,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/evolution-data-server-3.22.4/camel/camel-folder.h 
new/evolution-data-server-3.22.5/camel/camel-folder.h
--- old/evolution-data-server-3.22.4/camel/camel-folder.h       2016-09-19 
10:00:48.000000000 +0200
+++ new/evolution-data-server-3.22.5/camel/camel-folder.h       2017-01-18 
11:15:14.000000000 +0100
@@ -437,6 +437,10 @@
                camel_folder_get_message_finish (CamelFolder *folder,
                                                 GAsyncResult *result,
                                                 GError **error);
+CamelMimeMessage *
+               camel_folder_get_message_cached (CamelFolder *folder,
+                                                const gchar *message_uid,
+                                                GCancellable *cancellable);
 CamelFolderQuotaInfo *
                camel_folder_get_quota_info_sync
                                                (CamelFolder *folder,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/camel-search-private.c 
new/evolution-data-server-3.22.5/camel/camel-search-private.c
--- old/evolution-data-server-3.22.4/camel/camel-search-private.c       
2016-09-19 10:00:48.000000000 +0200
+++ new/evolution-data-server-3.22.5/camel/camel-search-private.c       
2017-01-26 17:27:52.000000000 +0100
@@ -443,9 +443,13 @@
        const guchar *ptr;
        gint truth = FALSE, i;
        CamelInternetAddress *cia;
-       gchar *v, *vdom, *mdom;
+       gchar *v, *vdom, *mdom, *unfolded;
        gunichar c;
 
+       unfolded = camel_header_unfold (value);
+       if (unfolded)
+               value = unfolded;
+
        ptr = (const guchar *) value;
        while ((c = camel_utf8_getc (&ptr)) && g_unichar_isspace (c))
                value = (const gchar *) ptr;
@@ -477,8 +481,10 @@
        case CAMEL_SEARCH_TYPE_ADDRESS_ENCODED:
        case CAMEL_SEARCH_TYPE_ADDRESS:
                /* Possible simple case to save some work if we can. */
-               if (header_match (value, match, how))
-                       return TRUE;
+               if (header_match (value, match, how)) {
+                       truth = TRUE;
+                       break;
+               }
 
                /* Now we decode any addresses, and try
                 * as-is matches on name and address parts. */
@@ -497,6 +503,8 @@
                break;
        }
 
+       g_free (unfolded);
+
        return truth;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-search.c 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-search.c
--- old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-search.c 
2016-09-19 10:00:48.000000000 +0200
+++ new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-search.c 
2017-01-18 11:15:14.000000000 +0100
@@ -350,6 +350,7 @@
        CamelSExpResult *result;
        GString *criteria;
        GPtrArray *words;
+       gboolean is_gmail;
 
        /* Always do body-search server-side */
        if (imapx_search->priv->local_data_search) {
@@ -390,10 +391,73 @@
 
        result = imapx_search_process_criteria (sexp, search, imapx_store, 
criteria, "BODY", words, G_STRFUNC);
 
+       is_gmail = camel_imapx_store_is_gmail_server (imapx_store);
+
        g_string_free (criteria, TRUE);
        g_ptr_array_free (words, TRUE);
        g_object_unref (imapx_store);
 
+       if (is_gmail && result && (result->type == CAMEL_SEXP_RES_ARRAY_PTR || 
(result->type == CAMEL_SEXP_RES_BOOL && !result->value.boolean))) {
+               /* Gmail returns BODY matches on whole words only, which is not 
it should be,
+                  thus try also locally cached messages to provide any better 
results. */
+               gboolean was_only_cached_messages;
+               CamelSExpResult *cached_result;
+
+               was_only_cached_messages = 
camel_folder_search_get_only_cached_messages (search);
+               camel_folder_search_set_only_cached_messages (search, TRUE);
+
+               cached_result = CAMEL_FOLDER_SEARCH_CLASS 
(camel_imapx_search_parent_class)->body_contains (sexp, argc, argv, search);
+
+               camel_folder_search_set_only_cached_messages (search, 
was_only_cached_messages);
+
+               if (cached_result && cached_result->type == result->type) {
+                       if (result->type == CAMEL_SEXP_RES_BOOL) {
+                               result->value.boolean = 
cached_result->value.boolean;
+                       } else {
+                               /* Merge the two UID arrays */
+                               GHashTable *merge;
+                               GHashTableIter iter;
+                               GPtrArray *array;
+                               gpointer key;
+                               guint ii;
+
+                               /* UID-s are strings from the string pool, thus 
can be compared directly */
+                               merge = g_hash_table_new (g_direct_hash, 
g_direct_equal);
+
+                               array = result->value.ptrarray;
+                               for (ii = 0; array && ii < array->len; ii++) {
+                                       gpointer uid = g_ptr_array_index 
(array, ii);
+
+                                       if (uid)
+                                               g_hash_table_insert (merge, 
uid, NULL);
+                               }
+
+                               array = cached_result->value.ptrarray;
+                               for (ii = 0; array && ii < array->len; ii++) {
+                                       gpointer uid = g_ptr_array_index 
(array, ii);
+
+                                       if (uid)
+                                               g_hash_table_insert (merge, 
uid, NULL);
+                               }
+
+                               array = g_ptr_array_new_full (g_hash_table_size 
(merge), (GDestroyNotify) camel_pstring_free);
+
+                               g_hash_table_iter_init (&iter, merge);
+                               while (g_hash_table_iter_next (&iter, &key, 
NULL)) {
+                                       g_ptr_array_add (array, (gpointer) 
camel_pstring_strdup (key));
+                               }
+
+                               g_hash_table_destroy (merge);
+
+                               g_ptr_array_unref (result->value.ptrarray);
+
+                               result->value.ptrarray = array;
+                       }
+               }
+
+               camel_sexp_result_free (sexp, cached_result);
+       }
+
        return result;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-server.c 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-server.c
--- old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-server.c 
2017-01-09 14:51:05.000000000 +0100
+++ new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-server.c 
2017-02-10 16:45:11.000000000 +0100
@@ -1685,6 +1685,10 @@
        if (mailbox != NULL) {
                camel_imapx_mailbox_handle_status_response (mailbox, response);
                camel_imapx_store_emit_mailbox_updated (imapx_store, mailbox);
+
+               if (camel_imapx_server_is_in_idle (is))
+                       g_signal_emit (is, signals[REFRESH_MAILBOX], 0, 
mailbox);
+
                g_object_unref (mailbox);
        }
 
@@ -1771,7 +1775,7 @@
 
        is->priv->context->sinfo = imapx_parse_status (
                CAMEL_IMAPX_INPUT_STREAM (input_stream),
-               mailbox, cancellable, error);
+               mailbox, TRUE, cancellable, error);
 
        g_clear_object (&mailbox);
 
@@ -2362,7 +2366,7 @@
 
        ic->status = imapx_parse_status (
                CAMEL_IMAPX_INPUT_STREAM (input_stream),
-               mailbox, cancellable, error);
+               mailbox, FALSE, cancellable, error);
 
        g_clear_object (&mailbox);
 
@@ -4738,6 +4742,7 @@
                g_object_unref (folder);
        }
 
+       camel_message_info_unref (info);
        g_free (path);
 
        return success;
@@ -5079,7 +5084,6 @@
        }
 
        if (is->priv->use_qresync && imapx_summary->modseq > 0 && uidvalidity > 
0) {
-               imapx_summary->modseq = highestmodseq;
                if (total != messages ||
                    camel_folder_summary_get_unread_count (folder->summary) != 
unseen ||
                    imapx_summary->modseq != highestmodseq) {
@@ -5094,6 +5098,12 @@
                                imapx_summary->modseq,
                                highestmodseq);
                } else {
+                       imapx_summary->uidnext = uidnext;
+
+                       camel_folder_summary_touch (folder->summary);
+                       camel_folder_summary_save_to_db (folder->summary, NULL);
+                       imapx_update_store_summary (folder);
+
                        c (
                                is->priv->tagprefix,
                                "OK, after QRESYNC we're still in sync. "
@@ -5130,6 +5140,13 @@
        if (success && uidl != 1)
                success = imapx_server_fetch_changes (is, mailbox, folder, 
known_uids, 0, uidl, cancellable, error);
 
+       if (success) {
+               imapx_summary->modseq = highestmodseq;
+               imapx_summary->uidnext = uidnext;
+
+               camel_folder_summary_touch (folder->summary);
+       }
+
        g_mutex_lock (&is->priv->changes_lock);
 
        changes = is->priv->changes;
@@ -5170,11 +5187,11 @@
                camel_folder_summary_free_array (array);
        }
 
-       if (camel_folder_change_info_changed (changes)) {
-               camel_folder_summary_save_to_db (folder->summary, NULL);
-               imapx_update_store_summary (folder);
+       camel_folder_summary_save_to_db (folder->summary, NULL);
+       imapx_update_store_summary (folder);
+
+       if (camel_folder_change_info_changed (changes))
                camel_folder_changed (folder, changes);
-       }
 
        camel_folder_change_info_free (changes);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-store-summary.c
 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-store-summary.c
--- 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-store-summary.c
  2016-03-21 08:34:20.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-store-summary.c
  2017-01-27 10:04:15.000000000 +0100
@@ -325,6 +325,8 @@
        return (CamelIMAPXStoreInfo *) match;
 }
 
+/* The returned CamelIMAPXStoreInfo is referenced, unref it with
+   camel_store_summary_info_unref() when no longer needed */
 CamelIMAPXStoreInfo *
 camel_imapx_store_summary_add_from_mailbox (CamelStoreSummary *summary,
                                             CamelIMAPXMailbox *mailbox)
@@ -341,11 +343,8 @@
        separator = camel_imapx_mailbox_get_separator (mailbox);
 
        info = camel_imapx_store_summary_mailbox (summary, mailbox_name);
-       if (info != NULL) {
-               camel_store_summary_info_unref (
-                       summary, (CamelStoreInfo *) info);
+       if (info != NULL)
                return info;
-       }
 
        folder_path = camel_imapx_mailbox_to_folder_path (
                mailbox_name, separator);
@@ -357,6 +356,8 @@
 
        g_return_val_if_fail (info != NULL, NULL);
 
+       camel_store_summary_info_ref (summary, (CamelStoreInfo *) info);
+
        info->mailbox_name = g_strdup (mailbox_name);
        info->separator = separator;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-store.c 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-store.c
--- old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-store.c  
2016-09-19 10:00:48.000000000 +0200
+++ new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-store.c  
2017-01-27 10:04:15.000000000 +0100
@@ -468,6 +468,8 @@
        folder_path = camel_imapx_mailbox_to_folder_path (mailbox_name, 
separator);
        fi = imapx_store_build_folder_info (store, folder_path, 
(CamelFolderInfoFlags) flags);
 
+       camel_store_summary_info_unref (store->summary, (CamelStoreInfo *) si);
+
        /* Figure out which signals to emit, if any. */
        if (use_subscriptions || camel_imapx_namespace_get_category 
(camel_imapx_mailbox_get_namespace (mailbox)) != 
CAMEL_IMAPX_NAMESPACE_PERSONAL) {
                /* If we are honoring folder subscriptions, then
@@ -1218,6 +1220,8 @@
 
        /* Takes ownership of the CamelFolderInfo. */
        g_hash_table_insert (folder_info_results, g_strdup (mailbox_name), fi);
+
+       camel_store_summary_info_unref (imapx_store->summary, (CamelStoreInfo 
*) si);
 }
 
 static gboolean
@@ -2258,15 +2262,15 @@
        return success;
 }
 
-static gboolean
-imapx_is_gmail_server (CamelService *service)
+gboolean
+camel_imapx_store_is_gmail_server (CamelIMAPXStore *imapx_store)
 {
        CamelSettings *settings;
        gboolean is_gmail = FALSE;
 
-       g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
+       g_return_val_if_fail (CAMEL_IS_IMAPX_STORE (imapx_store), FALSE);
 
-       settings = camel_service_ref_settings (service);
+       settings = camel_service_ref_settings (CAMEL_SERVICE (imapx_store));
        if (CAMEL_IS_NETWORK_SETTINGS (settings)) {
                gchar *host;
 
@@ -2536,7 +2540,7 @@
 
        /* Skip changing Sent folder for GMail, because GMail stores sent 
messages
           automatically, thus it would make doubled copies on the server. */
-       if (!imapx_is_gmail_server (CAMEL_SERVICE (store))) {
+       if (!camel_imapx_store_is_gmail_server (imapx_store)) {
                imapx_check_initial_setup_group (imapx_store, finfo, save_setup,
                        CAMEL_IMAPX_LIST_ATTR_SENT,
                        CAMEL_STORE_SETUP_SENT_FOLDER, NULL, NULL,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-store.h 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-store.h
--- old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-store.h  
2015-09-21 11:19:59.000000000 +0200
+++ new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-store.h  
2017-01-18 11:15:14.000000000 +0100
@@ -75,6 +75,8 @@
 };
 
 GType          camel_imapx_store_get_type      (void);
+gboolean       camel_imapx_store_is_gmail_server
+                                               (CamelIMAPXStore *store);
 CamelIMAPXConnManager *
                camel_imapx_store_get_conn_manager
                                                (CamelIMAPXStore *store);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-tokenise.h 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-tokenise.h
--- 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-tokenise.h   
    2016-10-11 22:38:53.000000000 +0200
+++ 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-tokenise.h   
    2017-02-06 18:37:25.000000000 +0100
@@ -30,7 +30,6 @@
 
 #line 3 "camel-imapx-tokens.txt"
 struct _imapx_keyword {const gchar *name; camel_imapx_id_t id; };
-struct _imapx_keyword *imapx_tokenise_struct (register const char *str, 
register unsigned int len);
 
 #define TOTAL_KEYWORDS 58
 #define MIN_WORD_LENGTH 2
@@ -93,137 +92,137 @@
   static struct _imapx_keyword wordlist[] =
     {
       {""}, {""},
-#line 43 "camel-imapx-tokens.txt"
+#line 42 "camel-imapx-tokens.txt"
       {"OK",                   IMAPX_OK},
       {""}, {""},
-#line 31 "camel-imapx-tokens.txt"
+#line 30 "camel-imapx-tokens.txt"
       {"INUSE",                        IMAPX_INUSE},
       {""},
-#line 25 "camel-imapx-tokens.txt"
+#line 24 "camel-imapx-tokens.txt"
       {"EXPUNGE",              IMAPX_EXPUNGE},
-#line 22 "camel-imapx-tokens.txt"
+#line 21 "camel-imapx-tokens.txt"
       {"ENVELOPE",             IMAPX_ENVELOPE},
-#line 44 "camel-imapx-tokens.txt"
+#line 43 "camel-imapx-tokens.txt"
       {"OVERQUOTA",            IMAPX_OVERQUOTA},
-#line 50 "camel-imapx-tokens.txt"
+#line 49 "camel-imapx-tokens.txt"
       {"READ-WRITE",           IMAPX_READ_WRITE},
-#line 53 "camel-imapx-tokens.txt"
+#line 52 "camel-imapx-tokens.txt"
       {"RFC822.SIZE",          IMAPX_RFC822_SIZE},
-#line 30 "camel-imapx-tokens.txt"
+#line 29 "camel-imapx-tokens.txt"
       {"INTERNALDATE",         IMAPX_INTERNALDATE},
-#line 52 "camel-imapx-tokens.txt"
+#line 51 "camel-imapx-tokens.txt"
       {"RFC822.HEADER",                IMAPX_RFC822_HEADER},
       {""},
-#line 6 "camel-imapx-tokens.txt"
+#line 5 "camel-imapx-tokens.txt"
       {"ALERT",                        IMAPX_ALERT},
-#line 51 "camel-imapx-tokens.txt"
+#line 50 "camel-imapx-tokens.txt"
       {"RECENT",                       IMAPX_RECENT},
-#line 39 "camel-imapx-tokens.txt"
+#line 38 "camel-imapx-tokens.txt"
       {"NO",                   IMAPX_NO},
-#line 14 "camel-imapx-tokens.txt"
+#line 13 "camel-imapx-tokens.txt"
       {"BYE",                  IMAPX_BYE},
-#line 57 "camel-imapx-tokens.txt"
+#line 56 "camel-imapx-tokens.txt"
       {"TRYCREATE",            IMAPX_TRYCREATE},
-#line 45 "camel-imapx-tokens.txt"
+#line 44 "camel-imapx-tokens.txt"
       {"PARSE",                        IMAPX_PARSE},
-#line 54 "camel-imapx-tokens.txt"
+#line 53 "camel-imapx-tokens.txt"
       {"RFC822.TEXT",          IMAPX_RFC822_TEXT},
-#line 38 "camel-imapx-tokens.txt"
+#line 37 "camel-imapx-tokens.txt"
       {"NEWNAME",              IMAPX_NEWNAME},
       {""},
-#line 37 "camel-imapx-tokens.txt"
+#line 36 "camel-imapx-tokens.txt"
       {"NAMESPACE",            IMAPX_NAMESPACE},
       {""},
-#line 15 "camel-imapx-tokens.txt"
+#line 14 "camel-imapx-tokens.txt"
       {"CANNOT",                       IMAPX_CANNOT},
       {""},
-#line 13 "camel-imapx-tokens.txt"
+#line 12 "camel-imapx-tokens.txt"
       {"BODYSTRUCTURE",                IMAPX_BODYSTRUCTURE},
-#line 49 "camel-imapx-tokens.txt"
+#line 48 "camel-imapx-tokens.txt"
       {"READ-ONLY",            IMAPX_READ_ONLY},
       {""}, {""},
-#line 24 "camel-imapx-tokens.txt"
+#line 23 "camel-imapx-tokens.txt"
       {"EXPIRED",              IMAPX_EXPIRED},
-#line 63 "camel-imapx-tokens.txt"
+#line 62 "camel-imapx-tokens.txt"
       {"VANISHED",             IMAPX_VANISHED},
-#line 10 "camel-imapx-tokens.txt"
+#line 9 "camel-imapx-tokens.txt"
       {"APPENDUID",            IMAPX_APPENDUID},
-#line 20 "camel-imapx-tokens.txt"
+#line 19 "camel-imapx-tokens.txt"
       {"CORRUPTION",           IMAPX_CORRUPTION},
-#line 41 "camel-imapx-tokens.txt"
+#line 40 "camel-imapx-tokens.txt"
       {"NONEXISTENT",          IMAPX_NONEXISTENT},
-#line 18 "camel-imapx-tokens.txt"
+#line 17 "camel-imapx-tokens.txt"
       {"CONTACTADMIN",         IMAPX_CONTACTADMIN},
-#line 26 "camel-imapx-tokens.txt"
+#line 25 "camel-imapx-tokens.txt"
       {"EXPUNGEISSUED",                IMAPX_EXPUNGEISSUED},
-#line 12 "camel-imapx-tokens.txt"
+#line 11 "camel-imapx-tokens.txt"
       {"BODY",                 IMAPX_BODY},
-#line 16 "camel-imapx-tokens.txt"
+#line 15 "camel-imapx-tokens.txt"
       {"CAPABILITY",           IMAPX_CAPABILITY},
-#line 21 "camel-imapx-tokens.txt"
+#line 20 "camel-imapx-tokens.txt"
       {"CLOSED",                       IMAPX_CLOSED},
-#line 19 "camel-imapx-tokens.txt"
+#line 18 "camel-imapx-tokens.txt"
       {"COPYUID",              IMAPX_COPYUID},
-#line 11 "camel-imapx-tokens.txt"
+#line 10 "camel-imapx-tokens.txt"
       {"BAD",                  IMAPX_BAD},
-#line 9 "camel-imapx-tokens.txt"
-      {"AUTHORIZATIONFAILED",  IMAPX_AUTHORIZATIONFAILED},
 #line 8 "camel-imapx-tokens.txt"
+      {"AUTHORIZATIONFAILED",  IMAPX_AUTHORIZATIONFAILED},
+#line 7 "camel-imapx-tokens.txt"
       {"AUTHENTICATIONFAILED", IMAPX_AUTHENTICATIONFAILED},
-#line 60 "camel-imapx-tokens.txt"
+#line 59 "camel-imapx-tokens.txt"
       {"UNAVAILABLE",          IMAPX_UNAVAILABLE},
       {""},
-#line 40 "camel-imapx-tokens.txt"
+#line 39 "camel-imapx-tokens.txt"
       {"NOMODSEQ",             IMAPX_NOMODSEQ},
-#line 33 "camel-imapx-tokens.txt"
-      {"LIST",                 IMAPX_LIST},
 #line 32 "camel-imapx-tokens.txt"
+      {"LIST",                 IMAPX_LIST},
+#line 31 "camel-imapx-tokens.txt"
       {"LIMIT",                        IMAPX_LIMIT},
-#line 23 "camel-imapx-tokens.txt"
+#line 22 "camel-imapx-tokens.txt"
       {"EXISTS",                       IMAPX_EXISTS},
-#line 62 "camel-imapx-tokens.txt"
+#line 61 "camel-imapx-tokens.txt"
       {"UIDNEXT",              IMAPX_UIDNEXT},
       {""},
-#line 34 "camel-imapx-tokens.txt"
+#line 33 "camel-imapx-tokens.txt"
       {"LSUB",                 IMAPX_LSUB},
-#line 48 "camel-imapx-tokens.txt"
+#line 47 "camel-imapx-tokens.txt"
       {"PRIVACYREQUIRED",      IMAPX_PRIVACYREQUIRED},
-#line 61 "camel-imapx-tokens.txt"
+#line 60 "camel-imapx-tokens.txt"
       {"UNSEEN",                       IMAPX_UNSEEN},
-#line 47 "camel-imapx-tokens.txt"
+#line 46 "camel-imapx-tokens.txt"
       {"PREAUTH",              IMAPX_PREAUTH},
-#line 7 "camel-imapx-tokens.txt"
+#line 6 "camel-imapx-tokens.txt"
       {"ALREADYEXISTS",                IMAPX_ALREADYEXISTS},
-#line 17 "camel-imapx-tokens.txt"
+#line 16 "camel-imapx-tokens.txt"
       {"CLIENTBUG",            IMAPX_CLIENTBUG},
-#line 27 "camel-imapx-tokens.txt"
+#line 26 "camel-imapx-tokens.txt"
       {"FETCH",                        IMAPX_FETCH},
-#line 42 "camel-imapx-tokens.txt"
+#line 41 "camel-imapx-tokens.txt"
       {"NOPERM",                       IMAPX_NOPERM},
       {""},
-#line 58 "camel-imapx-tokens.txt"
+#line 57 "camel-imapx-tokens.txt"
       {"UID",                  IMAPX_UID},
       {""}, {""},
-#line 59 "camel-imapx-tokens.txt"
+#line 58 "camel-imapx-tokens.txt"
       {"UIDVALIDITY",          IMAPX_UIDVALIDITY},
       {""}, {""}, {""},
-#line 28 "camel-imapx-tokens.txt"
+#line 27 "camel-imapx-tokens.txt"
       {"FLAGS",                        IMAPX_FLAGS},
-#line 36 "camel-imapx-tokens.txt"
+#line 35 "camel-imapx-tokens.txt"
       {"MODSEQ",                       IMAPX_MODSEQ},
       {""},
-#line 29 "camel-imapx-tokens.txt"
+#line 28 "camel-imapx-tokens.txt"
       {"HIGHESTMODSEQ",                IMAPX_HIGHESTMODSEQ},
-#line 46 "camel-imapx-tokens.txt"
+#line 45 "camel-imapx-tokens.txt"
       {"PERMANENTFLAGS",               IMAPX_PERMANENTFLAGS},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
       {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 35 "camel-imapx-tokens.txt"
+#line 34 "camel-imapx-tokens.txt"
       {"MESSAGES",             IMAPX_MESSAGES},
-#line 55 "camel-imapx-tokens.txt"
+#line 54 "camel-imapx-tokens.txt"
       {"SERVERBUG",            IMAPX_SERVERBUG},
       {""},
-#line 56 "camel-imapx-tokens.txt"
+#line 55 "camel-imapx-tokens.txt"
       {"STATUS",                       IMAPX_STATUS}
     };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-tokens.txt 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-tokens.txt
--- 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-tokens.txt   
    2014-03-24 10:07:52.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-tokens.txt   
    2017-02-06 18:36:09.000000000 +0100
@@ -1,7 +1,6 @@
 /* This contains all of the keywords we care about.  These
    can be converted to an id very efficiently */
 struct _imapx_keyword {const gchar *name; camel_imapx_id_t id; };
-struct _imapx_keyword *imapx_tokenise_struct (register const char *str, 
register unsigned int len);
 %%
 ALERT,                 IMAPX_ALERT
 ALREADYEXISTS,         IMAPX_ALREADYEXISTS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-utils.c 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-utils.c
--- old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-utils.c  
2016-09-19 10:00:48.000000000 +0200
+++ new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-utils.c  
2017-02-10 16:26:43.000000000 +0100
@@ -2391,6 +2391,7 @@
 struct _status_info *
 imapx_parse_status (CamelIMAPXInputStream *stream,
                     CamelIMAPXMailbox *mailbox,
+                   gboolean is_ok_no_bad,
                     GCancellable *cancellable,
                     GError **error)
 {
@@ -2503,7 +2504,9 @@
                                break;
 
                        case IMAPX_UNSEEN:
-                               success = imapx_parse_status_unseen (
+                               /* Ignore UNSEEN in OK/NO/BAD, because it's not 
count of unseen
+                                  messages, but the sequence number of the 
first unseen message. */
+                               success = is_ok_no_bad || 
imapx_parse_status_unseen (
                                        stream, mailbox, cancellable, error);
                                break;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-utils.h 
new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-utils.h
--- old/evolution-data-server-3.22.4/camel/providers/imapx/camel-imapx-utils.h  
2016-03-21 08:34:20.000000000 +0100
+++ new/evolution-data-server-3.22.5/camel/providers/imapx/camel-imapx-utils.h  
2017-02-10 16:26:43.000000000 +0100
@@ -300,6 +300,7 @@
 struct _status_info *
                imapx_parse_status              (CamelIMAPXInputStream *stream,
                                                 CamelIMAPXMailbox *mailbox,
+                                                gboolean is_ok_no_bad,
                                                 GCancellable *cancellable,
                                                 GError **error);
 struct _status_info *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/nntp/camel-nntp-stream.c 
new/evolution-data-server-3.22.5/camel/providers/nntp/camel-nntp-stream.c
--- old/evolution-data-server-3.22.4/camel/providers/nntp/camel-nntp-stream.c   
2015-03-23 07:41:04.000000000 +0100
+++ new/evolution-data-server-3.22.5/camel/providers/nntp/camel-nntp-stream.c   
2017-02-13 10:19:44.000000000 +0100
@@ -60,6 +60,8 @@
        g_free (stream->buf);
        g_free (stream->linebuf);
 
+       g_rec_mutex_clear (&stream->lock);
+
        /* Chain up to parent's finalize () method. */
        G_OBJECT_CLASS (camel_nntp_stream_parent_class)->finalize (object);
 }
@@ -111,8 +113,12 @@
        guchar *p, *e, c;
        gint state;
 
-       if (is->mode != CAMEL_NNTP_STREAM_DATA || n == 0)
+       g_rec_mutex_lock (&is->lock);
+
+       if (is->mode != CAMEL_NNTP_STREAM_DATA || n == 0) {
+               g_rec_mutex_unlock (&is->lock);
                return 0;
+       }
 
        o = buffer;
        oe = buffer + n;
@@ -127,8 +133,10 @@
        case 0:         /* start of line, always read at least 3 chars */
                while (e - p < 3) {
                        is->ptr = p;
-                       if (nntp_stream_fill (is, cancellable, error) == -1)
+                       if (nntp_stream_fill (is, cancellable, error) == -1) {
+                               g_rec_mutex_unlock (&is->lock);
                                return -1;
+                       }
                        p = is->ptr;
                        e = is->end;
                }
@@ -137,6 +145,7 @@
                                is->ptr = p + 3;
                                is->mode = CAMEL_NNTP_STREAM_EOD;
                                is->state = 0;
+                               g_rec_mutex_unlock (&is->lock);
                                return o - buffer;
                        }
                        p++;
@@ -150,8 +159,10 @@
                                /* end of input sentinal check */
                                if (p > e) {
                                        is->ptr = e;
-                                       if (nntp_stream_fill (is, cancellable, 
error) == -1)
+                                       if (nntp_stream_fill (is, cancellable, 
error) == -1) {
+                                               g_rec_mutex_unlock (&is->lock);
                                                return -1;
+                                       }
                                        p = is->ptr;
                                        e = is->end;
                                } else {
@@ -169,6 +180,8 @@
        is->ptr = p;
        is->state = state;
 
+       g_rec_mutex_unlock (&is->lock);
+
        return o - buffer;
 }
 
@@ -180,8 +193,13 @@
                    GError **error)
 {
        CamelNNTPStream *is = (CamelNNTPStream *) stream;
+       gssize written;
+
+       g_rec_mutex_lock (&is->lock);
+       written = camel_stream_write (is->source, buffer, n, cancellable, 
error);
+       g_rec_mutex_unlock (&is->lock);
 
-       return camel_stream_write (is->source, buffer, n, cancellable, error);
+       return written;
 }
 
 static gint
@@ -241,6 +259,8 @@
 
        is->state = 0;
        is->mode = CAMEL_NNTP_STREAM_LINE;
+
+       g_rec_mutex_init (&is->lock);
 }
 
 CamelNNTPStream *
@@ -270,7 +290,10 @@
        g_return_val_if_fail (data != NULL, -1);
        g_return_val_if_fail (len != NULL, -1);
 
+       g_rec_mutex_lock (&is->lock);
+
        if (is->mode == CAMEL_NNTP_STREAM_EOD) {
+               g_rec_mutex_unlock (&is->lock);
                *data = is->linebuf;
                *len = 0;
                return 0;
@@ -287,8 +310,10 @@
                /* need at least 3 chars in buffer */
                while (e - p < 3) {
                        is->ptr = p;
-                       if (nntp_stream_fill (is, cancellable, error) == -1)
+                       if (nntp_stream_fill (is, cancellable, error) == -1) {
+                               g_rec_mutex_unlock (&is->lock);
                                return -1;
+                       }
                        p = is->ptr;
                        e = is->end;
                }
@@ -304,6 +329,8 @@
 
                                dd (printf ("NNTP_STREAM_LINE (END)\n"));
 
+                               g_rec_mutex_unlock (&is->lock);
+
                                return 0;
                        }
                        p++;
@@ -317,8 +344,10 @@
                                /* sentinal? */
                                if (p> e) {
                                        is->ptr = e;
-                                       if (nntp_stream_fill (is, cancellable, 
error) == -1)
+                                       if (nntp_stream_fill (is, cancellable, 
error) == -1) {
+                                               g_rec_mutex_unlock (&is->lock);
                                                return -1;
+                                       }
                                        p = is->ptr;
                                        e = is->end;
                                } else {
@@ -327,6 +356,8 @@
                                        *len = o - is->linebuf;
                                        *o = 0;
 
+                                       g_rec_mutex_unlock (&is->lock);
+
                                        dd (printf ("NNTP_STREAM_LINE (%d): 
'%s'\n", *len, *data));
 
                                        return 1;
@@ -344,6 +375,8 @@
                oe = is->lineend - 1;
                o = is->linebuf + oldlen;
        }
+
+       g_rec_mutex_unlock (&is->lock);
 }
 
 /* returns -1 on error, 0 if last lot of data, >0 if more remaining */
@@ -363,11 +396,15 @@
 
        *len = 0;
 
+       g_rec_mutex_lock (&is->lock);
+
        max = is->end - is->ptr;
        if (max == 0) {
                max = nntp_stream_fill (is, cancellable, error);
-               if (max <= 0)
+               if (max <= 0) {
+                       g_rec_mutex_unlock (&is->lock);
                        return max;
+               }
        }
 
        *start = is->ptr;
@@ -378,6 +415,8 @@
        *len = max;
        is->ptr += max;
 
+       g_rec_mutex_unlock (&is->lock);
+
        return end == NULL ? 1 : 0;
 }
 
@@ -407,10 +446,15 @@
 
        *len = 0;
 
-       if (is->mode == CAMEL_NNTP_STREAM_EOD)
+       g_rec_mutex_lock (&is->lock);
+
+       if (is->mode == CAMEL_NNTP_STREAM_EOD) {
+               g_rec_mutex_unlock (&is->lock);
                return 0;
+       }
 
        if (is->mode == CAMEL_NNTP_STREAM_LINE) {
+               g_rec_mutex_unlock (&is->lock);
                g_warning ("nntp_stream reading data in line mode\n");
                return 0;
        }
@@ -421,8 +465,10 @@
 
        while (e - p < 3) {
                is->ptr = p;
-               if (nntp_stream_fill (is, cancellable, error) == -1)
+               if (nntp_stream_fill (is, cancellable, error) == -1) {
+                       g_rec_mutex_unlock (&is->lock);
                        return -1;
+               }
                p = is->ptr;
                e = is->end;
        }
@@ -440,6 +486,7 @@
                                        *start = s;
                                        is->mode = CAMEL_NNTP_STREAM_EOD;
                                        is->state = 0;
+                                       g_rec_mutex_unlock (&is->lock);
 
                                        return 0;
                                }
@@ -454,6 +501,7 @@
                                        *len = p-s;
                                        *start = s;
                                        is->state = 1;
+                                       g_rec_mutex_unlock (&is->lock);
 
                                        return 1;
                                }
@@ -479,6 +527,7 @@
        *len = p-s;
        *start = s;
 
+       g_rec_mutex_unlock (&is->lock);
+
        return 1;
 }
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/camel/providers/nntp/camel-nntp-stream.h 
new/evolution-data-server-3.22.5/camel/providers/nntp/camel-nntp-stream.h
--- old/evolution-data-server-3.22.4/camel/providers/nntp/camel-nntp-stream.h   
2015-03-23 07:41:04.000000000 +0100
+++ new/evolution-data-server-3.22.5/camel/providers/nntp/camel-nntp-stream.h   
2017-02-13 10:19:44.000000000 +0100
@@ -61,6 +61,8 @@
 
        guchar *buf, *ptr, *end;
        guchar *linebuf, *lineptr, *lineend;
+
+       GRecMutex lock;
 };
 
 struct _CamelNNTPStreamClass {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/evolution-data-server-3.22.4/configure 
new/evolution-data-server-3.22.5/configure
--- old/evolution-data-server-3.22.4/configure  2017-01-16 12:39:11.000000000 
+0100
+++ new/evolution-data-server-3.22.5/configure  2017-02-13 12:40:38.000000000 
+0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for evolution-data-server 3.22.4.
+# Generated by GNU Autoconf 2.69 for evolution-data-server 3.22.5.
 #
 # Report bugs to 
<http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution-Data-Server>.
 #
@@ -651,8 +651,8 @@
 # Identity of this package.
 PACKAGE_NAME='evolution-data-server'
 PACKAGE_TARNAME='evolution-data-server'
-PACKAGE_VERSION='3.22.4'
-PACKAGE_STRING='evolution-data-server 3.22.4'
+PACKAGE_VERSION='3.22.5'
+PACKAGE_STRING='evolution-data-server 3.22.5'
 
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution-Data-Server'
 PACKAGE_URL=''
 
@@ -1788,7 +1788,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures evolution-data-server 3.22.4 to adapt to many kinds of 
systems.
+\`configure' configures evolution-data-server 3.22.5 to adapt to many kinds of 
systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1859,7 +1859,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of evolution-data-server 
3.22.4:";;
+     short | recursive ) echo "Configuration of evolution-data-server 
3.22.5:";;
    esac
   cat <<\_ACEOF
 
@@ -2138,7 +2138,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-evolution-data-server configure 3.22.4
+evolution-data-server configure 3.22.5
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2724,7 +2724,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by evolution-data-server $as_me 3.22.4, which was
+It was created by evolution-data-server $as_me 3.22.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3587,7 +3587,7 @@
 
 # Define the identity of the package.
  PACKAGE='evolution-data-server'
- VERSION='3.22.4'
+ VERSION='3.22.5'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3888,7 +3888,7 @@
 
 EDS_MAJOR_VERSION=3
 EDS_MINOR_VERSION=22
-EDS_MICRO_VERSION=4
+EDS_MICRO_VERSION=5
 
 
 
@@ -27987,7 +27987,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by evolution-data-server $as_me 3.22.4, which was
+This file was extended by evolution-data-server $as_me 3.22.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -28053,7 +28053,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-evolution-data-server config.status 3.22.4
+evolution-data-server config.status 3.22.5
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/evolution-data-server-3.22.4/configure.ac 
new/evolution-data-server-3.22.5/configure.ac
--- old/evolution-data-server-3.22.4/configure.ac       2016-12-12 
15:51:20.000000000 +0100
+++ new/evolution-data-server-3.22.5/configure.ac       2017-01-16 
12:47:11.000000000 +0100
@@ -2,7 +2,7 @@
 dnl Evolution-Data-Server version
 m4_define([eds_major_version], [3])
 m4_define([eds_minor_version], [22])
-m4_define([eds_micro_version], [4])
+m4_define([eds_micro_version], [5])
 
 m4_define([eds_version],
        [eds_major_version.eds_minor_version.eds_micro_version])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/camel/html/CamelFolder.html 
new/evolution-data-server-3.22.5/docs/reference/camel/html/CamelFolder.html
--- old/evolution-data-server-3.22.4/docs/reference/camel/html/CamelFolder.html 
2017-01-16 12:44:23.000000000 +0100
+++ new/evolution-data-server-3.22.5/docs/reference/camel/html/CamelFolder.html 
2017-02-13 12:46:27.000000000 +0100
@@ -525,6 +525,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a class="link" href="CamelMimeMessage.html" title="CamelMimeMessage"><span 
class="returnvalue">CamelMimeMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="CamelFolder.html#camel-folder-get-message-cached" 
title="camel_folder_get_message_cached ()">camel_folder_get_message_cached</a> 
<span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="CamelFolder.html#CamelFolderQuotaInfo"><span 
class="returnvalue">CamelFolderQuotaInfo</span></a> *
 </td>
 <td class="function_name">
@@ -3010,6 +3018,56 @@
 </div>
 <hr>
 <div class="refsect2">
+<a 
name="camel-folder-get-message-cached"></a><h3>camel_folder_get_message_cached 
()</h3>
+<pre class="programlisting"><a class="link" href="CamelMimeMessage.html" 
title="CamelMimeMessage"><span class="returnvalue">CamelMimeMessage</span></a> *
+camel_folder_get_message_cached (<em class="parameter"><code><a class="link" 
href="CamelFolder.html" title="CamelFolder"><span 
class="type">CamelFolder</span></a> *folder</code></em>,
+                                 <em class="parameter"><code>const <a 
href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span 
class="type">gchar</span></a> *message_uid</code></em>,
+                                 <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/gioGCancellable.html#GCancellable-struct"><span 
class="type">GCancellable</span></a> *cancellable</code></em>);</pre>
+<p>Gets the message corresponding to <em 
class="parameter"><code>message_uid</code></em>
+ from the <em class="parameter"><code>folder</code></em>
+ cache,
+if available locally. This should not do any network I/O, only check
+if message is already downloaded and return it quickly, not being
+blocked by the folder's lock. Returning NULL is not considered as
+an error, it just means that the message is still to-be-downloaded.</p>
+<p>Note: This function is called automatically within <a class="link" 
href="CamelFolder.html#camel-folder-get-message-sync" 
title="camel_folder_get_message_sync ()"><code 
class="function">camel_folder_get_message_sync()</code></a>.</p>
+<div class="refsect3">
+<a name="camel-folder-get-message-cached.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>folder</p></td>
+<td class="parameter_description"><p>a <a class="link" href="CamelFolder.html" 
title="CamelFolder"><span class="type">CamelFolder</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>message_uid</p></td>
+<td class="parameter_description"><p>the message UID</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>cancellable</p></td>
+<td class="parameter_description"><p>optional <a 
href="/usr/share/gtk-doc/html/gioGCancellable.html#GCancellable-struct"><span 
class="type">GCancellable</span></a> object, or <a 
href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code 
class="literal">NULL</code></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="camel-folder-get-message-cached.returns"></a><h4>Returns</h4>
+<p> a cached <a class="link" href="CamelMimeMessage.html" 
title="CamelMimeMessage"><span class="type">CamelMimeMessage</span></a> 
corresponding
+to the requested UID. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is 
done."><span class="acronym">transfer full</span></acronym>][<acronym 
title="NULL may be passed as the value in, out, in-out; or as a return 
value."><span class="acronym">nullable</span></acronym>]</span></p>
+</div>
+<p class="since">Since: 3.22.5</p>
+</div>
+<hr>
+<div class="refsect2">
 <a 
name="camel-folder-get-quota-info-sync"></a><h3>camel_folder_get_quota_info_sync
 ()</h3>
 <pre class="programlisting"><a class="link" 
href="CamelFolder.html#CamelFolderQuotaInfo"><span 
class="returnvalue">CamelFolderQuotaInfo</span></a> *
 camel_folder_get_quota_info_sync (<em class="parameter"><code><a class="link" 
href="CamelFolder.html" title="CamelFolder"><span 
class="type">CamelFolder</span></a> *folder</code></em>,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/camel/html/CamelFolderSearch.html
 
new/evolution-data-server-3.22.5/docs/reference/camel/html/CamelFolderSearch.html
--- 
old/evolution-data-server-3.22.4/docs/reference/camel/html/CamelFolderSearch.html
   2017-01-16 12:44:23.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/docs/reference/camel/html/CamelFolderSearch.html
   2017-02-13 12:46:27.000000000 +0100
@@ -53,6 +53,22 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
+<a class="link" 
href="CamelFolderSearch.html#camel-folder-search-set-only-cached-messages" 
title="camel_folder_search_set_only_cached_messages 
()">camel_folder_search_set_only_cached_messages</a> <span 
class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="CamelIMAPXServer.html#gboolean" title="gboolean 
()"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" 
href="CamelFolderSearch.html#camel-folder-search-get-only-cached-messages" 
title="camel_folder_search_get_only_cached_messages 
()">camel_folder_search_get_only_cached_messages</a> <span 
class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
 <a class="link" href="CamelFolderSearch.html#camel-folder-search-set-folder" 
title="camel_folder_search_set_folder ()">camel_folder_search_set_folder</a> 
<span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -143,6 +159,69 @@
 </div>
 <hr>
 <div class="refsect2">
+<a 
name="camel-folder-search-set-only-cached-messages"></a><h3>camel_folder_search_set_only_cached_messages
 ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+camel_folder_search_set_only_cached_messages
+                               (<em class="parameter"><code><a class="link" 
href="CamelFolderSearch.html" title="CamelFolderSearch"><span 
class="type">CamelFolderSearch</span></a> *search</code></em>,
+                                <em class="parameter"><code><a class="link" 
href="CamelIMAPXServer.html#gboolean" title="gboolean ()"><span 
class="type">gboolean</span></a> only_cached_messages</code></em>);</pre>
+<p>Sets whether only locally cached messages can be searched. The default
+value is <a 
href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code 
class="literal">FALSE</code></a>, which means that when a message is required 
and it is
+not available locally, then it is downloaded from the server, if possible.</p>
+<div class="refsect3">
+<a 
name="camel-folder-search-set-only-cached-messages.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>search</p></td>
+<td class="parameter_description"><p>a <a class="link" 
href="CamelFolderSearch.html" title="CamelFolderSearch"><span 
class="type">CamelFolderSearch</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>only_cached_messages</p></td>
+<td class="parameter_description"><p>a value to set</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 3.22.5</p>
+</div>
+<hr>
+<div class="refsect2">
+<a 
name="camel-folder-search-get-only-cached-messages"></a><h3>camel_folder_search_get_only_cached_messages
 ()</h3>
+<pre class="programlisting"><a class="link" 
href="CamelIMAPXServer.html#gboolean" title="gboolean ()"><span 
class="returnvalue">gboolean</span></a>
+camel_folder_search_get_only_cached_messages
+                               (<em class="parameter"><code><a class="link" 
href="CamelFolderSearch.html" title="CamelFolderSearch"><span 
class="type">CamelFolderSearch</span></a> *search</code></em>);</pre>
+<div class="refsect3">
+<a 
name="camel-folder-search-get-only-cached-messages.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>search</p></td>
+<td class="parameter_description"><p>a <a class="link" 
href="CamelFolderSearch.html" title="CamelFolderSearch"><span 
class="type">CamelFolderSearch</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a 
name="camel-folder-search-get-only-cached-messages.returns"></a><h4>Returns</h4>
+<p> Whether only cached messages can be searched. See
+<a class="link" 
href="CamelFolderSearch.html#camel-folder-search-set-only-cached-messages" 
title="camel_folder_search_set_only_cached_messages ()"><code 
class="function">camel_folder_search_set_only_cached_messages()</code></a> for 
more
+information what it means.</p>
+</div>
+<p class="since">Since: 3.22.5</p>
+</div>
+<hr>
+<div class="refsect2">
 <a 
name="camel-folder-search-set-folder"></a><h3>camel_folder_search_set_folder 
()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 camel_folder_search_set_folder (<em class="parameter"><code><a class="link" 
href="CamelFolderSearch.html" title="CamelFolderSearch"><span 
class="type">CamelFolderSearch</span></a> *search</code></em>,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/camel/html/CamelIMAPXStore.html 
new/evolution-data-server-3.22.5/docs/reference/camel/html/CamelIMAPXStore.html
--- 
old/evolution-data-server-3.22.4/docs/reference/camel/html/CamelIMAPXStore.html 
    2017-01-16 12:44:23.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/docs/reference/camel/html/CamelIMAPXStore.html 
    2017-02-13 12:46:27.000000000 +0100
@@ -44,6 +44,14 @@
 <tbody>
 <tr>
 <td class="function_type">
+<a class="link" href="CamelIMAPXServer.html#gboolean" title="gboolean 
()"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="CamelIMAPXStore.html#camel-imapx-store-is-gmail-server" 
title="camel_imapx_store_is_gmail_server 
()">camel_imapx_store_is_gmail_server</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="CamelIMAPXConnManager.html" 
title="CamelIMAPXConnManager"><span 
class="returnvalue">CamelIMAPXConnManager</span></a> *
 </td>
 <td class="function_name">
@@ -216,6 +224,12 @@
 <div class="refsect1">
 <a name="CamelIMAPXStore.functions_details"></a><h2>Functions</h2>
 <div class="refsect2">
+<a 
name="camel-imapx-store-is-gmail-server"></a><h3>camel_imapx_store_is_gmail_server
 ()</h3>
+<pre class="programlisting"><a class="link" 
href="CamelIMAPXServer.html#gboolean" title="gboolean ()"><span 
class="returnvalue">gboolean</span></a>
+camel_imapx_store_is_gmail_server (<em class="parameter"><code><a class="link" 
href="CamelIMAPXStore.html" title="CamelIMAPXStore"><span 
class="type">CamelIMAPXStore</span></a> *store</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a 
name="camel-imapx-store-get-conn-manager"></a><h3>camel_imapx_store_get_conn_manager
 ()</h3>
 <pre class="programlisting"><a class="link" href="CamelIMAPXConnManager.html" 
title="CamelIMAPXConnManager"><span 
class="returnvalue">CamelIMAPXConnManager</span></a> *
 camel_imapx_store_get_conn_manager (<em class="parameter"><code><a 
class="link" href="CamelIMAPXStore.html" title="CamelIMAPXStore"><span 
class="type">CamelIMAPXStore</span></a> *store</code></em>);</pre>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/camel/html/api-index-full.html 
new/evolution-data-server-3.22.5/docs/reference/camel/html/api-index-full.html
--- 
old/evolution-data-server-3.22.4/docs/reference/camel/html/api-index-full.html  
    2017-01-16 12:44:23.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/docs/reference/camel/html/api-index-full.html  
    2017-02-13 12:46:27.000000000 +0100
@@ -1581,6 +1581,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="CamelFolder.html#camel-folder-get-message-cached" 
title="camel_folder_get_message_cached ()">camel_folder_get_message_cached</a>, 
function in <a class="link" href="CamelFolder.html" 
title="CamelFolder">CamelFolder</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="CamelFolder.html#camel-folder-get-message-count" 
title="camel_folder_get_message_count ()">camel_folder_get_message_count</a>, 
function in <a class="link" href="CamelFolder.html" 
title="CamelFolder">CamelFolder</a>
 </dt>
 <dd></dd>
@@ -1741,6 +1745,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" 
href="CamelFolderSearch.html#camel-folder-search-get-only-cached-messages" 
title="camel_folder_search_get_only_cached_messages 
()">camel_folder_search_get_only_cached_messages</a>, function in <a 
class="link" href="CamelFolderSearch.html" 
title="CamelFolderSearch">CamelFolderSearch</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="CamelFolderSearch.html#camel-folder-search-new" 
title="camel_folder_search_new ()">camel_folder_search_new</a>, function in <a 
class="link" href="CamelFolderSearch.html" 
title="CamelFolderSearch">CamelFolderSearch</a>
 </dt>
 <dd></dd>
@@ -1757,6 +1765,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" 
href="CamelFolderSearch.html#camel-folder-search-set-only-cached-messages" 
title="camel_folder_search_set_only_cached_messages 
()">camel_folder_search_set_only_cached_messages</a>, function in <a 
class="link" href="CamelFolderSearch.html" 
title="CamelFolderSearch">CamelFolderSearch</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="CamelFolderSearch.html#camel-folder-search-set-summary" 
title="camel_folder_search_set_summary ()">camel_folder_search_set_summary</a>, 
function in <a class="link" href="CamelFolderSearch.html" 
title="CamelFolderSearch">CamelFolderSearch</a>
 </dt>
 <dd></dd>
@@ -3728,6 +3740,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="CamelIMAPXStore.html#camel-imapx-store-is-gmail-server" 
title="camel_imapx_store_is_gmail_server 
()">camel_imapx_store_is_gmail_server</a>, function in <a class="link" 
href="CamelIMAPXStore.html" title="CamelIMAPXStore">CamelIMAPXStore</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="CamelIMAPXStore.html#camel-imapx-store-list-mailboxes" 
title="camel_imapx_store_list_mailboxes 
()">camel_imapx_store_list_mailboxes</a>, function in <a class="link" 
href="CamelIMAPXStore.html" title="CamelIMAPXStore">CamelIMAPXStore</a>
 </dt>
 <dd></dd>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/camel/html/camel.devhelp2 
new/evolution-data-server-3.22.5/docs/reference/camel/html/camel.devhelp2
--- old/evolution-data-server-3.22.4/docs/reference/camel/html/camel.devhelp2   
2017-01-16 12:44:23.000000000 +0100
+++ new/evolution-data-server-3.22.5/docs/reference/camel/html/camel.devhelp2   
2017-02-13 12:46:27.000000000 +0100
@@ -768,6 +768,7 @@
     <keyword type="function" name="camel_folder_get_message_sync ()" 
link="CamelFolder.html#camel-folder-get-message-sync" since="3.0"/>
     <keyword type="function" name="camel_folder_get_message ()" 
link="CamelFolder.html#camel-folder-get-message" since="3.0"/>
     <keyword type="function" name="camel_folder_get_message_finish ()" 
link="CamelFolder.html#camel-folder-get-message-finish" since="3.0"/>
+    <keyword type="function" name="camel_folder_get_message_cached ()" 
link="CamelFolder.html#camel-folder-get-message-cached" since="3.22.5"/>
     <keyword type="function" name="camel_folder_get_quota_info_sync ()" 
link="CamelFolder.html#camel-folder-get-quota-info-sync" since="3.2"/>
     <keyword type="function" name="camel_folder_get_quota_info ()" 
link="CamelFolder.html#camel-folder-get-quota-info" since="3.2"/>
     <keyword type="function" name="camel_folder_get_quota_info_finish ()" 
link="CamelFolder.html#camel-folder-get-quota-info-finish" since="3.2"/>
@@ -815,6 +816,8 @@
     <keyword type="signal" name="The “deleted” signal" 
link="CamelFolder.html#CamelFolder-deleted"/>
     <keyword type="signal" name="The “renamed” signal" 
link="CamelFolder.html#CamelFolder-renamed"/>
     <keyword type="function" name="camel_folder_search_new ()" 
link="CamelFolderSearch.html#camel-folder-search-new"/>
+    <keyword type="function" 
name="camel_folder_search_set_only_cached_messages ()" 
link="CamelFolderSearch.html#camel-folder-search-set-only-cached-messages" 
since="3.22.5"/>
+    <keyword type="function" 
name="camel_folder_search_get_only_cached_messages ()" 
link="CamelFolderSearch.html#camel-folder-search-get-only-cached-messages" 
since="3.22.5"/>
     <keyword type="function" name="camel_folder_search_set_folder ()" 
link="CamelFolderSearch.html#camel-folder-search-set-folder"/>
     <keyword type="function" name="camel_folder_search_set_summary ()" 
link="CamelFolderSearch.html#camel-folder-search-set-summary"/>
     <keyword type="function" name="camel_folder_search_set_body_index ()" 
link="CamelFolderSearch.html#camel-folder-search-set-body-index"/>
@@ -2053,6 +2056,7 @@
     <keyword type="property" name="The “use-real-trash-path” property" 
link="CamelIMAPXSettings.html#CamelIMAPXSettings--use-real-trash-path"/>
     <keyword type="property" name="The “use-shell-command” property" 
link="CamelIMAPXSettings.html#CamelIMAPXSettings--use-shell-command"/>
     <keyword type="property" name="The “use-subscriptions” property" 
link="CamelIMAPXSettings.html#CamelIMAPXSettings--use-subscriptions"/>
+    <keyword type="function" name="camel_imapx_store_is_gmail_server ()" 
link="CamelIMAPXStore.html#camel-imapx-store-is-gmail-server"/>
     <keyword type="function" name="camel_imapx_store_get_conn_manager ()" 
link="CamelIMAPXStore.html#camel-imapx-store-get-conn-manager"/>
     <keyword type="function" name="camel_imapx_store_set_connecting_server ()" 
link="CamelIMAPXStore.html#camel-imapx-store-set-connecting-server"/>
     <keyword type="function" 
name="camel_imapx_store_is_connecting_concurrent_connection ()" 
link="CamelIMAPXStore.html#camel-imapx-store-is-connecting-concurrent-connection"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/eds/html/eds-eds-version.html 
new/evolution-data-server-3.22.5/docs/reference/eds/html/eds-eds-version.html
--- 
old/evolution-data-server-3.22.4/docs/reference/eds/html/eds-eds-version.html   
    2017-01-16 12:44:22.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/docs/reference/eds/html/eds-eds-version.html   
    2017-02-13 12:46:27.000000000 +0100
@@ -204,7 +204,7 @@
 <hr>
 <div class="refsect2">
 <a name="EDS-MICRO-VERSION:CAPS"></a><h3>EDS_MICRO_VERSION</h3>
-<pre class="programlisting">#define EDS_MICRO_VERSION 4
+<pre class="programlisting">#define EDS_MICRO_VERSION 5
 </pre>
 <p>The micro version number of the Evolution-Data-Server library.  Like
 <a class="link" href="eds-eds-version.html#eds-micro-version" 
title="eds_micro_version"><code 
class="function">eds_micro_version()</code></a>, but from the headers used at 
application compile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/eds/html/index.html 
new/evolution-data-server-3.22.5/docs/reference/eds/html/index.html
--- old/evolution-data-server-3.22.4/docs/reference/eds/html/index.html 
2017-01-16 12:44:22.000000000 +0100
+++ new/evolution-data-server-3.22.5/docs/reference/eds/html/index.html 
2017-02-13 12:46:27.000000000 +0100
@@ -15,7 +15,7 @@
 <div class="titlepage">
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" 
cellspacing="0"><tr><th valign="middle"><p class="title">Evolution-Data-Server 
Reference Manual</p></th></tr></table></div>
-<div><p class="releaseinfo">Reference Manual for evolution-data-server 3.22.4
+<div><p class="releaseinfo">Reference Manual for evolution-data-server 3.22.5
 </p></div>
 <div><div class="abstract">
 <p class="title"><b>Abstract</b></p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/docs/reference/eds/version.xml 
new/evolution-data-server-3.22.5/docs/reference/eds/version.xml
--- old/evolution-data-server-3.22.4/docs/reference/eds/version.xml     
2017-01-16 12:39:25.000000000 +0100
+++ new/evolution-data-server-3.22.5/docs/reference/eds/version.xml     
2017-02-13 12:40:53.000000000 +0100
@@ -1 +1 @@
-evolution-data-server 3.22.4
+evolution-data-server 3.22.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/libedataserver/e-source-credentials-provider-impl-google.c
 
new/evolution-data-server-3.22.5/libedataserver/e-source-credentials-provider-impl-google.c
--- 
old/evolution-data-server-3.22.4/libedataserver/e-source-credentials-provider-impl-google.c
 2016-10-10 10:04:28.000000000 +0200
+++ 
new/evolution-data-server-3.22.5/libedataserver/e-source-credentials-provider-impl-google.c
 2017-02-06 11:19:38.000000000 +0100
@@ -398,10 +398,17 @@
 
        secret = e_named_parameters_get (credentials, 
E_SOURCE_CREDENTIAL_GOOGLE_SECRET);
        if (!secret) {
-               g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, 
_("Failed to get Google secret from credentials"));
+               if (error && !*error)
+                       g_set_error_literal (error, G_IO_ERROR, 
G_IO_ERROR_FAILED, _("Failed to get Google secret from credentials"));
+
                return FALSE;
        }
 
+       /* The caller can have set an error from the secret lookup,
+          which are propagated, but otherwise a success is reported. */
+       if (error && *error)
+               g_clear_error (error);
+
        if (!e_source_credentials_google_util_decode_from_secret (secret, 
E_GOOGLE_SECRET_REFRESH_TOKEN, &refresh_token, NULL) ||
            !refresh_token || !*refresh_token) {
                g_free (refresh_token);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/libedataserver/eds-version.h 
new/evolution-data-server-3.22.5/libedataserver/eds-version.h
--- old/evolution-data-server-3.22.4/libedataserver/eds-version.h       
2017-01-16 12:39:24.000000000 +0100
+++ new/evolution-data-server-3.22.5/libedataserver/eds-version.h       
2017-02-13 12:40:52.000000000 +0100
@@ -49,7 +49,7 @@
  * time, rather than from the library linked against at application run
  * time.
  **/
-#define EDS_MICRO_VERSION 4
+#define EDS_MICRO_VERSION 5
 
 /**
  * EDS_CHECK_VERSION:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/libedataserverui/e-webdav-discover-widget.c 
new/evolution-data-server-3.22.5/libedataserverui/e-webdav-discover-widget.c
--- 
old/evolution-data-server-3.22.4/libedataserverui/e-webdav-discover-widget.c    
    2016-12-16 09:52:26.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/libedataserverui/e-webdav-discover-widget.c    
    2017-02-06 11:19:38.000000000 +0100
@@ -723,6 +723,7 @@
                        rd = NULL;
                } else if (g_cancellable_is_cancelled (rd->cancellable) ||
                    (!g_error_matches (local_error, G_IO_ERROR, 
G_IO_ERROR_PERMISSION_DENIED) &&
+                   !g_error_matches (local_error, G_IO_ERROR, 
G_IO_ERROR_NOT_FOUND) &&
                    !g_error_matches (local_error, SOUP_HTTP_ERROR, 
SOUP_STATUS_UNAUTHORIZED) &&
                    !g_error_matches (local_error, SOUP_HTTP_ERROR, 
SOUP_STATUS_FORBIDDEN))) {
                        g_simple_async_result_take_error (rd->simple, 
local_error);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/evolution-data-server-3.22.4/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
 
new/evolution-data-server-3.22.5/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
--- 
old/evolution-data-server-3.22.4/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
   2017-01-16 12:44:21.000000000 +0100
+++ 
new/evolution-data-server-3.22.5/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
   2017-02-13 12:46:25.000000000 +0100
@@ -94,4 +94,4 @@
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=evolution-data-server
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=3.22.4
+X-GNOME-Bugzilla-Version=3.22.5


Reply via email to