Hello community,
here is the log from the commit of package evolution-data-server for
openSUSE:Factory checked in at 2019-06-24 21:50:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/evolution-data-server (Old)
and /work/SRC/openSUSE:Factory/.evolution-data-server.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "evolution-data-server"
Mon Jun 24 21:50:51 2019 rev:203 rq:710950 version:3.32.3
Changes:
--------
---
/work/SRC/openSUSE:Factory/evolution-data-server/evolution-data-server.changes
2019-05-10 09:16:15.472137047 +0200
+++
/work/SRC/openSUSE:Factory/.evolution-data-server.new.4615/evolution-data-server.changes
2019-06-24 21:50:52.675990456 +0200
@@ -1,0 +2,40 @@
+Mon Jun 17 15:38:16 UTC 2019 - Bjørn Lie <[email protected]>
+
+- Update to version 3.32.3:
+ + [IMAPx]
+ - Fix a leak of CamelMessageInfo when downloading message from
+ a server.
+ - Prefer local search in folders fully synchronized for
+ offline.
+ + EDataBook/EDataCal: Flush GDBus connection on backend property
+ change.
+ + Add workaround for D-Bus property change into get-revision
+ tests.
+ + Expose E-Book/Cal-BackendSExp lock.
+ + Change buffer size argument value in call of
+ icalvalue_decode_ical_string().
+ + Update overdue time immediately after the reminders' window is
+ mapped.
+ + Correct test for file writable test in On This Computer
+ backend.
+ + CamelOperation can be used by other thread while in its
+ finalize().
+ + Change how CamelOfflineStore goes online.
+ + Bugs fixed: glgo#GNOME/evolution-data-server#108,
+ glgo#GNOME/evolution-data-server#112,
+ glgo#GNOME/evolution-data-server#114,
+ glgo#GNOME/evolution-data-server#116,
+ glgo#GNOME/evolution-data-server#123,
+ glgo#GNOME/evolution-data-server#190,
+ glgo#GNOME/evolution-data-server#479.
+- Drop eds-issue-108.patch: Fixed upstream.
+- Use modern cmake_build macro.
+
+-------------------------------------------------------------------
+Tue Jun 4 08:34:20 CEST 2019 - Matej Cepl <[email protected]>
+
+- Add eds-issue-108.patch: Folder changes could be claimed in a
+ wrong folder after APPEND, fixes glgo#GNOME/evolution#296,
+ glgo#GNOME/evolution-data-server#108.
+
+-------------------------------------------------------------------
Old:
----
evolution-data-server-3.32.2.tar.xz
New:
----
evolution-data-server-3.32.3.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ evolution-data-server.spec ++++++
--- /var/tmp/diff_new_pack.X1T5rn/_old 2019-06-24 21:50:53.947991445 +0200
+++ /var/tmp/diff_new_pack.X1T5rn/_new 2019-06-24 21:50:53.971991464 +0200
@@ -30,7 +30,7 @@
%bcond_without introspection
Name: evolution-data-server
-Version: 3.32.2
+Version: 3.32.3
Release: 0
Summary: Evolution Data Server
License: LGPL-2.0-only
@@ -285,7 +285,7 @@
-DENABLE_INTROSPECTION=ON} \
-DENABLE_DBUS_SESSION_TOOL=OFF \
%{nil}
-%make_jobs
+%cmake_build
%install
%cmake_install
++++++ evolution-data-server-3.32.2.tar.xz ->
evolution-data-server-3.32.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/evolution-data-server-3.32.2/CMakeLists.txt
new/evolution-data-server-3.32.3/CMakeLists.txt
--- old/evolution-data-server-3.32.2/CMakeLists.txt 2019-05-06
12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/CMakeLists.txt 2019-06-17
15:21:44.000000000 +0200
@@ -4,7 +4,7 @@
cmake_policy(VERSION 3.1)
project(evolution-data-server
- VERSION 3.32.2
+ VERSION 3.32.3
LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 14)
set(PROJECT_BUGREPORT
"https://gitlab.gnome.org/GNOME/evolution-data-server/issues/")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/evolution-data-server-3.32.2/NEWS
new/evolution-data-server-3.32.3/NEWS
--- old/evolution-data-server-3.32.2/NEWS 2019-05-06 12:16:15.000000000
+0200
+++ new/evolution-data-server-3.32.3/NEWS 2019-06-17 15:21:44.000000000
+0200
@@ -1,3 +1,27 @@
+Evolution-Data-Server 3.32.3 2019-06-17
+---------------------------------------
+
+Bug Fixes:
+ I#108 - [IMAPx] Folder changes could be claimed in a wrong folder after
APPEND (Milan Crha)
+ I#112 - Credentials prompter re-asks for credentials of disabled
accounts (Milan Crha)
+ I#114 - [IMAPx] Option to enable full folder update on metered networks
(Milan Crha)
+ I#116 - [IMAPx] Correct handling of mailbox names (with RFC 6855
extension) (Milan Crha)
+ I#123 - [SMTP] Ignore 8BITMIME extension for Yahoo! servers (Milan Crha)
+ I#190 - Does not show reminders after resume from suspend (Milan Crha)
+ evo-I#479 - Call mail account refresh also after going online (Milan
Crha)
+
+Miscellaneous:
+ [IMAPx] Fix a leak of CamelMessageInfo when downloading message from a
server (Milan Crha)
+ EDataBook/EDataCal: Flush GDBus connection on backend property change
(Milan Crha)
+ Add workaround for D-Bus property change into get-revision tests (Milan
Crha)
+ Expose E-Book/Cal-BackendSExp lock (Milan Crha)
+ Change buffer size argument value in call of
icalvalue_decode_ical_string() (Milan Crha)
+ Update overdue time immediately after the reminders' window is mapped
(Milan Crha)
+ Correct test for file writable test in On This Computer backend (Milan
Crha)
+ CamelOperation can be used by other thread while in its finalize()
(Milan Crha)
+ Change how CamelOfflineStore goes online (Milan Crha)
+ [IMAPx] Prefer local search in folders fully synchronized for offline
(Milan Crha)
+
Evolution-Data-Server 3.32.2 2019-05-06
---------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/addressbook/backends/ldap/e-book-backend-ldap.c
new/evolution-data-server-3.32.3/src/addressbook/backends/ldap/e-book-backend-ldap.c
---
old/evolution-data-server-3.32.2/src/addressbook/backends/ldap/e-book-backend-ldap.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/addressbook/backends/ldap/e-book-backend-ldap.c
2019-06-17 15:21:44.000000000 +0200
@@ -2291,8 +2291,6 @@
if (ldap_error_msg)
ldap_memfree (ldap_error_msg);
- g_warning ("search returned %d\n", ldap_error);
-
if (ldap_error == LDAP_TIMELIMIT_EXCEEDED)
e_data_book_respond_get_contact_list (
op->book,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-book-backend-sexp.c
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-book-backend-sexp.c
---
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-book-backend-sexp.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-book-backend-sexp.c
2019-06-17 15:21:44.000000000 +0200
@@ -45,6 +45,7 @@
ESExp *search_sexp;
gchar *text;
SearchContext *search_context;
+ GRecMutex search_context_lock;
};
struct _SearchContext {
@@ -1090,6 +1091,8 @@
g_free (priv->text);
g_free (priv->search_context);
+ g_rec_mutex_clear (&priv->search_context_lock);
+
/* Chain up to parent's finalize() method. */
G_OBJECT_CLASS (e_book_backend_sexp_parent_class)->finalize (object);
}
@@ -1110,6 +1113,8 @@
{
sexp->priv = E_BOOK_BACKEND_SEXP_GET_PRIVATE (sexp);
sexp->priv->search_context = g_new (SearchContext, 1);
+
+ g_rec_mutex_init (&sexp->priv->search_context_lock);
}
/* 'builtin' functions */
@@ -1218,6 +1223,8 @@
g_return_val_if_fail (E_IS_BOOK_BACKEND_SEXP (sexp), FALSE);
g_return_val_if_fail (E_IS_CONTACT (contact), FALSE);
+ e_book_backend_sexp_lock (sexp);
+
sexp->priv->search_context->contact = g_object_ref (contact);
r = e_sexp_eval (sexp->priv->search_sexp);
@@ -1228,6 +1235,8 @@
e_sexp_result_free (sexp->priv->search_sexp, r);
+ e_book_backend_sexp_unlock (sexp);
+
return retval;
}
@@ -1259,3 +1268,35 @@
return retval;
}
+/**
+ * e_book_backend_sexp_lock:
+ * @sexp: an #EBookBackendSExp
+ *
+ * Locks the @sexp. Other threads cannot use it until
+ * it's unlocked with e_book_backend_sexp_unlock().
+ *
+ * Since: 3.32.3
+ **/
+void
+e_book_backend_sexp_lock (EBookBackendSExp *sexp)
+{
+ g_return_if_fail (E_IS_BOOK_BACKEND_SEXP (sexp));
+
+ g_rec_mutex_lock (&sexp->priv->search_context_lock);
+}
+
+/**
+ * e_book_backend_sexp_unlock:
+ * @sexp: an #EBookBackendSExp
+ *
+ * Unlocks the @sexp, previously locked by e_book_backend_sexp_lock().
+ *
+ * Since: 3.32.3
+ **/
+void
+e_book_backend_sexp_unlock (EBookBackendSExp *sexp)
+{
+ g_return_if_fail (E_IS_BOOK_BACKEND_SEXP (sexp));
+
+ g_rec_mutex_unlock (&sexp->priv->search_context_lock);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-book-backend-sexp.h
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-book-backend-sexp.h
---
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-book-backend-sexp.h
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-book-backend-sexp.h
2019-06-17 15:21:44.000000000 +0200
@@ -84,6 +84,8 @@
gboolean e_book_backend_sexp_match_contact
(EBookBackendSExp *sexp,
EContact *contact);
+void e_book_backend_sexp_lock (EBookBackendSExp *sexp);
+void e_book_backend_sexp_unlock (EBookBackendSExp *sexp);
G_END_DECLS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-data-book-view.c
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-data-book-view.c
---
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-data-book-view.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-data-book-view.c
2019-06-17 15:21:44.000000000 +0200
@@ -223,8 +223,16 @@
{
EDataBookView *view = data;
- if (view->priv->running)
+ if (view->priv->running) {
+ /* To avoid race condition when one thread is starting the
view, while
+ another thread wants to notify about
created/modified/removed objects. */
+ e_book_backend_sexp_lock (view->priv->sexp);
+
e_book_backend_start_view (view->priv->backend, view);
+
+ e_book_backend_sexp_unlock (view->priv->sexp);
+ }
+
g_object_unref (view);
return NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-data-book.c
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-data-book.c
---
old/evolution-data-server-3.32.2/src/addressbook/libedata-book/e-data-book.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/addressbook/libedata-book/e-data-book.c
2019-06-17 15:21:44.000000000 +0200
@@ -1856,6 +1856,12 @@
g_strfreev (strv);
}
+ /* Ensure the property change signal on the D-Bus is invoked
immediately, not on idle */
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON
(dbus_interface));
+
+ if (book->priv->connection && !g_dbus_connection_is_closed
(book->priv->connection))
+ g_dbus_connection_flush_sync (book->priv->connection, NULL,
NULL);
+
/* Disregard anything else. */
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/backends/file/e-cal-backend-file.c
new/evolution-data-server-3.32.3/src/calendar/backends/file/e-cal-backend-file.c
---
old/evolution-data-server-3.32.2/src/calendar/backends/file/e-cal-backend-file.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/calendar/backends/file/e-cal-backend-file.c
2019-06-17 15:21:44.000000000 +0200
@@ -1380,7 +1380,7 @@
g_return_if_fail (str_uri != NULL);
- backend_writable = (g_access (str_uri, W_OK) != 0);
+ backend_writable = (g_access (str_uri, W_OK) == 0);
g_free (str_uri);
}
@@ -1772,7 +1772,7 @@
gsize buf_size;
gchar *buf;
- buf_size = strlen (url);
+ buf_size = strlen (url) + 1;
buf = g_malloc0 (buf_size + 1);
icalvalue_decode_ical_string (url, buf,
buf_size);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libecal/e-cal-component.c
new/evolution-data-server-3.32.3/src/calendar/libecal/e-cal-component.c
--- old/evolution-data-server-3.32.2/src/calendar/libecal/e-cal-component.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/calendar/libecal/e-cal-component.c
2019-06-17 15:21:44.000000000 +0200
@@ -1558,7 +1558,7 @@
*/
icalattach_ref (attachment->attach);
data = icalattach_get_url (attachment->attach);
- buf_size = strlen (data);
+ buf_size = strlen (data) + 1;
buf = g_malloc0 (buf_size + 1);
icalvalue_decode_ical_string (data, buf, buf_size);
} else if (attachment->prop) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libecal/e-reminder-watcher.c
new/evolution-data-server-3.32.3/src/calendar/libecal/e-reminder-watcher.c
--- old/evolution-data-server-3.32.2/src/calendar/libecal/e-reminder-watcher.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/calendar/libecal/e-reminder-watcher.c
2019-06-17 15:21:44.000000000 +0200
@@ -1790,6 +1790,43 @@
}
static gboolean
+e_reminder_watcher_check_wall_clock_time_changed_cb (gpointer user_data)
+{
+ EReminderWatcher *watcher = user_data;
+ gint64 wall_clock_time;
+
+ if (g_source_is_destroyed (g_main_current_source ()))
+ return FALSE;
+
+ g_return_val_if_fail (E_IS_REMINDER_WATCHER (watcher), FALSE);
+
+ #define ADD_SECONDS(to, secs) ((to) + ((secs) * G_USEC_PER_SEC))
+
+ wall_clock_time = g_get_real_time ();
+
+ /* Use one second margin */
+ if (wall_clock_time > ADD_SECONDS
(watcher->priv->expected_wall_clock_time, 1) ||
+ wall_clock_time < ADD_SECONDS
(watcher->priv->expected_wall_clock_time, -1)) {
+ gint64 diff = (wall_clock_time -
watcher->priv->expected_wall_clock_time) / 1000;
+
+ e_reminder_watcher_debug_print ("Current wall-clock time
differs from expected by %" G_GINT64_FORMAT " ms, rescheduling reminders\n",
diff);
+
+ /* To make sure the timer is re-scheduled */
+ watcher->priv->next_trigger = 0;
+
+ e_reminder_watcher_maybe_schedule_next_trigger (watcher, 0);
+
+ wall_clock_time = g_get_real_time ();
+ }
+
+ watcher->priv->expected_wall_clock_time = ADD_SECONDS (wall_clock_time,
60);
+
+ #undef ADD_SECONDS
+
+ return TRUE;
+}
+
+static gboolean
e_reminder_watcher_construct_idle_cb (gpointer user_data)
{
EReminderWatcher *watcher = user_data;
@@ -1815,6 +1852,15 @@
e_source_registry_watcher_reclaim (watcher->priv->registry_watcher);
+ if (!watcher->priv->wall_clock_handler_id) {
+ /* Monotonic time doesn't change during hibernation, while the
+ * wall clock time does, thus check for wall clock time changes
+ * and reschedule alarms when it changes. */
+ watcher->priv->expected_wall_clock_time = g_get_real_time () +
(60 * G_USEC_PER_SEC);
+ watcher->priv->wall_clock_handler_id =
e_named_timeout_add_seconds (60,
+ e_reminder_watcher_check_wall_clock_time_changed_cb,
watcher);
+ }
+
if (!watcher->priv->snoozed)
watcher->priv->snoozed = e_reminder_watcher_reminders_from_key
(watcher, "reminders-snoozed");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-backend-sexp.c
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-backend-sexp.c
---
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-backend-sexp.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-backend-sexp.c
2019-06-17 15:21:44.000000000 +0200
@@ -43,7 +43,7 @@
ESExp *search_sexp;
gchar *text;
SearchContext *search_context;
- GMutex search_context_lock;
+ GRecMutex search_context_lock;
};
struct _SearchContext {
@@ -1128,7 +1128,7 @@
g_object_unref (priv->search_sexp);
g_free (priv->text);
g_free (priv->search_context);
- g_mutex_clear (&priv->search_context_lock);
+ g_rec_mutex_clear (&priv->search_context_lock);
/* Chain up to parent's finalize() method. */
G_OBJECT_CLASS (e_cal_backend_sexp_parent_class)->finalize (object);
@@ -1151,7 +1151,7 @@
sexp->priv = E_CAL_BACKEND_SEXP_GET_PRIVATE (sexp);
sexp->priv->search_context = g_new (SearchContext, 1);
- g_mutex_init (&sexp->priv->search_context_lock);
+ g_rec_mutex_init (&sexp->priv->search_context_lock);
}
/* 'builtin' functions */
@@ -1278,7 +1278,7 @@
g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), FALSE);
g_return_val_if_fail (E_IS_TIMEZONE_CACHE (cache), FALSE);
- g_mutex_lock (&sexp->priv->search_context_lock);
+ e_cal_backend_sexp_lock (sexp);
sexp->priv->search_context->comp = g_object_ref (comp);
sexp->priv->search_context->cache = g_object_ref (cache);
@@ -1292,7 +1292,7 @@
e_sexp_result_free (sexp->priv->search_sexp, r);
- g_mutex_unlock (&sexp->priv->search_context_lock);
+ e_cal_backend_sexp_unlock (sexp);
return retval;
}
@@ -1335,6 +1335,39 @@
}
/**
+ * e_cal_backend_sexp_lock:
+ * @sexp: an #ECalBackendSExp
+ *
+ * Locks the @sexp. Other threads cannot use it until
+ * it's unlocked with e_cal_backend_sexp_unlock().
+ *
+ * Since: 3.32.3
+ **/
+void
+e_cal_backend_sexp_lock (ECalBackendSExp *sexp)
+{
+ g_return_if_fail (E_IS_CAL_BACKEND_SEXP (sexp));
+
+ g_rec_mutex_lock (&sexp->priv->search_context_lock);
+}
+
+/**
+ * e_cal_backend_sexp_unlock:
+ * @sexp: an #ECalBackendSExp
+ *
+ * Unlocks the @sexp, previously locked by e_cal_backend_sexp_lock().
+ *
+ * Since: 3.32.3
+ **/
+void
+e_cal_backend_sexp_unlock (ECalBackendSExp *sexp)
+{
+ g_return_if_fail (E_IS_CAL_BACKEND_SEXP (sexp));
+
+ g_rec_mutex_unlock (&sexp->priv->search_context_lock);
+}
+
+/**
* e_cal_backend_sexp_func_time_now:
* @esexp: An #ESExp object.
* @argc: Number of arguments.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-backend-sexp.h
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-backend-sexp.h
---
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-backend-sexp.h
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-backend-sexp.h
2019-06-17 15:21:44.000000000 +0200
@@ -84,6 +84,8 @@
gboolean e_cal_backend_sexp_match_comp (ECalBackendSExp *sexp,
ECalComponent *comp,
ETimezoneCache *cache);
+void e_cal_backend_sexp_lock (ECalBackendSExp *sexp);
+void e_cal_backend_sexp_unlock (ECalBackendSExp *sexp);
/* Default implementations of time functions for use by subclasses */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-cache.c
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-cache.c
--- old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-cache.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-cache.c
2019-06-17 15:21:44.000000000 +0200
@@ -3419,7 +3419,7 @@
gsize buf_size;
gchar *buf;
- buf_size = strlen (url);
+ buf_size = strlen (url) + 1;
buf = g_malloc0 (buf_size + 1);
icalvalue_decode_ical_string (url, buf,
buf_size);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-meta-backend.c
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-meta-backend.c
---
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-cal-meta-backend.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-cal-meta-backend.c
2019-06-17 15:21:44.000000000 +0200
@@ -2601,7 +2601,7 @@
gsize buf_size;
gchar *buf;
- buf_size = strlen (url);
+ buf_size = strlen (url) + 1;
buf = g_malloc0 (buf_size + 1);
icalvalue_decode_ical_string (url, buf,
buf_size);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-data-cal-view.c
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-data-cal-view.c
---
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-data-cal-view.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-data-cal-view.c
2019-06-17 15:21:44.000000000 +0200
@@ -179,8 +179,16 @@
{
EDataCalView *view = data;
- if (view->priv->started && !view->priv->stopped)
+ if (view->priv->started && !view->priv->stopped) {
+ /* To avoid race condition when one thread is starting the
view, while
+ another thread wants to notify about
created/modified/removed objects. */
+ e_cal_backend_sexp_lock (view->priv->sexp);
+
e_cal_backend_start_view (view->priv->backend, view);
+
+ e_cal_backend_sexp_unlock (view->priv->sexp);
+ }
+
g_object_unref (view);
return NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-data-cal.c
new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-data-cal.c
--- old/evolution-data-server-3.32.2/src/calendar/libedata-cal/e-data-cal.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/calendar/libedata-cal/e-data-cal.c
2019-06-17 15:21:44.000000000 +0200
@@ -2470,6 +2470,12 @@
if (g_str_equal (prop_name, CAL_BACKEND_PROPERTY_DEFAULT_OBJECT))
e_dbus_calendar_set_default_object (dbus_interface, prop_value);
+ /* Ensure the property change signal on the D-Bus is invoked
immediately, not on idle */
+ g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON
(dbus_interface));
+
+ if (cal->priv->connection && !g_dbus_connection_is_closed
(cal->priv->connection))
+ g_dbus_connection_flush_sync (cal->priv->connection, NULL,
NULL);
+
/* Disregard anything else. */
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/camel-mime-message.c
new/evolution-data-server-3.32.3/src/camel/camel-mime-message.c
--- old/evolution-data-server-3.32.2/src/camel/camel-mime-message.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/camel/camel-mime-message.c
2019-06-17 15:21:44.000000000 +0200
@@ -860,13 +860,11 @@
return src;
}
-typedef gboolean (*CamelPartFunc)(CamelMimeMessage *message, CamelMimePart
*part, CamelMimePart *parent_part, gpointer data);
-
static gboolean
message_foreach_part_rec (CamelMimeMessage *msg,
CamelMimePart *part,
CamelMimePart *parent_part,
- CamelPartFunc callback,
+ CamelForeachPartFunc callback,
gpointer data)
{
CamelDataWrapper *containee;
@@ -896,14 +894,27 @@
return go;
}
-/* dont make this public yet, it might need some more thinking ... */
-/* MPZ */
-static void
-camel_mime_message_foreach_part (CamelMimeMessage *msg,
- CamelPartFunc callback,
- gpointer data)
+/**
+ * camel_mime_message_foreach_part:
+ * @message: a #CamelMimeMessage
+ * @callback: (scope call): a #CamelForeachPartFunc callback to call for each
part
+ * @user_data: (closure callback): user data passed to the @callback
+ *
+ * Calls @callback for each part of the @message, including the message itself.
+ * The traverse of the @message parts can be stopped when the @callback
+ * returns %FALSE.
+ *
+ * Since: 3.32.3
+ **/
+void
+camel_mime_message_foreach_part (CamelMimeMessage *message,
+ CamelForeachPartFunc callback,
+ gpointer user_data)
{
- message_foreach_part_rec (msg, (CamelMimePart *) msg, NULL, callback,
data);
+ g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message));
+ g_return_if_fail (callback != NULL);
+
+ message_foreach_part_rec (message, CAMEL_MIME_PART (message), NULL,
callback, user_data);
}
static gboolean
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/camel-mime-message.h
new/evolution-data-server-3.32.3/src/camel/camel-mime-message.h
--- old/evolution-data-server-3.32.2/src/camel/camel-mime-message.h
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/camel/camel-mime-message.h
2019-06-17 15:21:44.000000000 +0200
@@ -119,6 +119,29 @@
const gchar * camel_mime_message_get_source (CamelMimeMessage *message);
/* utility functions */
+
+/**
+ * CamelForeachPartFunc:
+ * @message: a #CamelMimeMessage
+ * @part: a #CamelMimePart, for which the function is called
+ * @parent_part: (nullable): a #CamelMimePart, parent of the @part; can be
%NULL
+ * @user_data: user data, as passed to camel_mime_message_foreach_part()
+ *
+ * Callback used to traverse parts of the @message using
camel_mime_message_foreach_part().
+ *
+ * Returns: %TRUE, when the traverse should continue, %FALSE to stop
+ * traversing parts of the @message
+ *
+ * Since: 3.32.3
+ **/
+typedef gboolean (* CamelForeachPartFunc) (CamelMimeMessage *message,
+ CamelMimePart *part,
+ CamelMimePart *parent_part,
+ gpointer user_data);
+
+void camel_mime_message_foreach_part (CamelMimeMessage *message,
+ CamelForeachPartFunc callback,
+ gpointer user_data);
gboolean camel_mime_message_has_8bit_parts
(CamelMimeMessage *message);
void camel_mime_message_set_best_encoding
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/camel-offline-store.c
new/evolution-data-server-3.32.3/src/camel/camel-offline-store.c
--- old/evolution-data-server-3.32.2/src/camel/camel-offline-store.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/camel/camel-offline-store.c
2019-06-17 15:21:44.000000000 +0200
@@ -153,6 +153,15 @@
{
if (g_strcmp0 (pspec->name, "host-reachable") == 0)
g_object_notify (object, "online");
+ else if (g_strcmp0 (pspec->name, "connection-status") == 0 &&
+ camel_service_get_connection_status (CAMEL_SERVICE (object))
== CAMEL_SERVICE_DISCONNECTED) {
+ CamelOfflineStore *store = CAMEL_OFFLINE_STORE (object);
+
+ if (store->priv->online) {
+ store->priv->online = FALSE;
+ g_object_notify (object, "online");
+ }
+ }
/* Chain up to parent's notify() method. */
G_OBJECT_CLASS (camel_offline_store_parent_class)->
@@ -275,7 +284,8 @@
if (camel_service_get_connection_status (service) ==
CAMEL_SERVICE_CONNECTING)
return TRUE;
- return camel_service_connect_sync (service, cancellable, error);
+ if (!camel_service_connect_sync (service, cancellable, error))
+ return FALSE;
}
if (host_reachable) {
@@ -339,9 +349,11 @@
service, host_reachable, cancellable, error);
}
- store->priv->online = online;
+ if (store->priv->online != online) {
+ store->priv->online = online;
- g_object_notify (G_OBJECT (store), "online");
+ g_object_notify (G_OBJECT (store), "online");
+ }
return success;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/camel-operation.c
new/evolution-data-server-3.32.3/src/camel/camel-operation.c
--- old/evolution-data-server-3.32.2/src/camel/camel-operation.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/camel/camel-operation.c
2019-06-17 15:21:44.000000000 +0200
@@ -148,7 +148,7 @@
}
static void
-operation_finalize (GObject *object)
+operation_dispose (GObject *object)
{
CamelOperationPrivate *priv;
@@ -168,14 +168,14 @@
g_queue_remove (&operation_list, object);
/* Because each StatusNode holds a reference to its
- * CamelOperation, the fact that we're being finalized
+ * CamelOperation, the fact that we're being disposed
* implies the stack should be empty now. */
g_warn_if_fail (g_queue_is_empty (&priv->status_stack));
UNLOCK ();
- /* Chain up to parent's finalize() method. */
- G_OBJECT_CLASS (camel_operation_parent_class)->finalize (object);
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (camel_operation_parent_class)->dispose (object);
}
static void
@@ -186,7 +186,7 @@
g_type_class_add_private (class, sizeof (CamelOperationPrivate));
object_class = G_OBJECT_CLASS (class);
- object_class->finalize = operation_finalize;
+ object_class->dispose = operation_dispose;
signals[STATUS] = g_signal_new (
"status",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-folder.c
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-folder.c
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-folder.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-folder.c
2019-06-17 15:21:44.000000000 +0200
@@ -1408,7 +1408,6 @@
CamelIMAPXStoreInfo *imapx_store_info;
gchar *folder_path = NULL;
gchar *mailbox_name = NULL;
- gchar *pattern;
gboolean success;
g_return_val_if_fail (CAMEL_IS_IMAPX_FOLDER (folder), FALSE);
@@ -1449,13 +1448,9 @@
/* Last resort is to issue a LIST command. Maintainer should
* monitor IMAP logs to make sure this is rarely if ever used. */
- pattern = camel_utf8_utf7 (mailbox_name);
-
/* This creates a mailbox instance from the LIST response. */
conn_man = camel_imapx_store_get_conn_manager (imapx_store);
- success = camel_imapx_conn_manager_list_sync (conn_man, pattern, 0,
cancellable, error);
-
- g_free (pattern);
+ success = camel_imapx_conn_manager_list_sync (conn_man, mailbox_name,
0, cancellable, error);
if (!success)
goto exit;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-input-stream.c
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-input-stream.c
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-input-stream.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-input-stream.c
2019-06-17 15:21:44.000000000 +0200
@@ -46,6 +46,8 @@
guchar *tokenbuf;
guint bufsize;
+
+ gboolean utf8_accept;
};
/* Forward Declarations */
@@ -263,6 +265,7 @@
is->priv->buf = g_malloc (is->priv->bufsize + 1);
is->priv->ptr = is->priv->end = is->priv->buf;
is->priv->tokenbuf = g_malloc (is->priv->bufsize + 1);
+ is->priv->utf8_accept = FALSE;
}
static void
@@ -329,6 +332,32 @@
return is->priv->end - is->priv->ptr;
}
+/*
+ * Returns whether the stream has enabled RFC 6855 extension,
+ * where strings like mailbox names are not encoded in UTF-7,
+ * but they are provided in UTF-8 directly.
+ */
+gboolean
+camel_imapx_input_stream_get_utf8_accept (CamelIMAPXInputStream *is)
+{
+ g_return_val_if_fail (CAMEL_IS_IMAPX_INPUT_STREAM (is), FALSE);
+
+ return is->priv->utf8_accept;
+}
+
+/*
+ * Sets whether the stream has enabled RFC 6855 extension. The default
+ * is FALSE.
+ */
+void
+camel_imapx_input_stream_set_utf8_accept (CamelIMAPXInputStream *is,
+ gboolean utf8_accept)
+{
+ g_return_if_fail (CAMEL_IS_IMAPX_INPUT_STREAM (is));
+
+ is->priv->utf8_accept = utf8_accept;
+}
+
/* FIXME: these should probably handle it themselves,
* and get rid of the token interface? */
gboolean
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-input-stream.h
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-input-stream.h
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-input-stream.h
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-input-stream.h
2019-06-17 15:21:44.000000000 +0200
@@ -79,6 +79,11 @@
GInputStream * camel_imapx_input_stream_new (GInputStream *base_stream);
gint camel_imapx_input_stream_buffered
(CamelIMAPXInputStream *is);
+gboolean camel_imapx_input_stream_get_utf8_accept
+ (CamelIMAPXInputStream *is);
+void camel_imapx_input_stream_set_utf8_accept
+ (CamelIMAPXInputStream *is,
+ gboolean utf8_accept);
camel_imapx_token_t
camel_imapx_input_stream_token (CamelIMAPXInputStream *is,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-search.c
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-search.c
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-search.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-search.c
2019-06-17 15:21:44.000000000 +0200
@@ -701,7 +701,8 @@
* @search: a #CamelIMAPXSearch
*
* Returns a #CamelIMAPXStore to use for server-side searches,
- * or %NULL when the store is offline.
+ * or %NULL when the store is offline or when the current folder
+ * is synchronized for offline use.
*
* The returned #CamelIMAPXStore is referenced for thread-safety and
* must be unreferenced with g_object_unref() when finished with it.
@@ -719,8 +720,27 @@
imapx_store = g_weak_ref_get (&search->priv->imapx_store);
- if (imapx_store && !camel_offline_store_get_online (CAMEL_OFFLINE_STORE
(imapx_store)))
- g_clear_object (&imapx_store);
+ if (imapx_store) {
+ if (!camel_offline_store_get_online (CAMEL_OFFLINE_STORE
(imapx_store))) {
+ g_clear_object (&imapx_store);
+ } else {
+ CamelFolder *folder;
+
+ folder = camel_folder_search_get_folder
(CAMEL_FOLDER_SEARCH (search));
+
+ if (CAMEL_IS_OFFLINE_FOLDER (folder) &&
camel_offline_folder_can_downsync (CAMEL_OFFLINE_FOLDER (folder))) {
+ CamelSettings *settings;
+
+ settings = camel_service_ref_settings
(CAMEL_SERVICE (imapx_store));
+
+ /* Downloads everything for the offline usage,
thus search in the local cache only */
+ if (settings &&
!camel_offline_settings_get_limit_by_age (CAMEL_OFFLINE_SETTINGS (settings)))
+ g_clear_object (&imapx_store);
+
+ g_clear_object (&settings);
+ }
+ }
+ }
return imapx_store;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-server.c
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-server.c
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-server.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-server.c
2019-06-17 15:21:44.000000000 +0200
@@ -3408,6 +3408,9 @@
g_mutex_lock (&is->priv->stream_lock);
is->priv->utf8_accept = TRUE;
+
+ if (CAMEL_IS_IMAPX_INPUT_STREAM (is->priv->input_stream))
+ camel_imapx_input_stream_set_utf8_accept
(CAMEL_IMAPX_INPUT_STREAM (is->priv->input_stream), TRUE);
}
if (CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, NAMESPACE)) {
@@ -4352,6 +4355,7 @@
data_size = camel_message_info_get_size (mi);
use_multi_fetch = data_size > MULTI_SIZE &&
camel_imapx_settings_get_use_multi_fetch (settings);
g_object_unref (settings);
+ g_clear_object (&mi);
g_warn_if_fail (is->priv->get_message_stream == NULL);
@@ -4848,6 +4852,7 @@
if (camel_folder_change_info_changed
(dest_changes)) {
camel_folder_summary_touch
(destination_summary);
camel_folder_summary_save
(destination_summary, NULL);
+ imapx_update_store_summary
(destination_folder);
camel_folder_changed
(destination_folder, dest_changes);
}
@@ -5103,6 +5108,7 @@
if (ic->status && ic->status->condition == IMAPX_APPENDUID) {
c (is->priv->tagprefix, "Got appenduid %u %u\n",
(guint32) ic->status->u.appenduid.uidvalidity, ic->status->u.appenduid.uid);
if (ic->status->u.appenduid.uidvalidity == uidvalidity)
{
+ CamelFolderChangeInfo *dest_changes;
gchar *uid;
uid = g_strdup_printf ("%u",
ic->status->u.appenduid.uid);
@@ -5123,11 +5129,13 @@
camel_folder_summary_add
(camel_folder_get_folder_summary (folder), clone, TRUE);
- g_mutex_lock (&is->priv->changes_lock);
- camel_folder_change_info_add_uid
(is->priv->changes, camel_message_info_get_uid (clone));
- g_mutex_unlock (&is->priv->changes_lock);
+ dest_changes = camel_folder_change_info_new ();
+ camel_folder_change_info_add_uid (dest_changes,
camel_message_info_get_uid (clone));
camel_folder_summary_save
(camel_folder_get_folder_summary (folder), NULL);
+ imapx_update_store_summary (folder);
+ camel_folder_changed (folder, dest_changes);
+ camel_folder_change_info_free (dest_changes);
if (appended_uid)
*appended_uid = uid;
@@ -5450,12 +5458,25 @@
camel_imapx_server_skip_old_flags_update (CamelStore *store)
{
CamelSession *session;
+ CamelSettings *settings;
GNetworkMonitor *network_monitor;
gboolean skip_old_flags_update = FALSE;
if (!CAMEL_IS_STORE (store))
return FALSE;
+ settings = camel_service_ref_settings (CAMEL_SERVICE (store));
+ if (settings) {
+ gboolean allow_update;
+
+ allow_update =
camel_imapx_settings_get_full_update_on_metered_network (CAMEL_IMAPX_SETTINGS
(settings));
+
+ g_object_unref (settings);
+
+ if (allow_update)
+ return FALSE;
+ }
+
session = camel_service_ref_session (CAMEL_SERVICE (store));
if (!session)
return skip_old_flags_update;
@@ -6386,7 +6407,7 @@
camel_folder_summary_remove_uids
(folder_summary, removed);
camel_folder_summary_save (folder_summary,
NULL);
-
+ imapx_update_store_summary (folder);
camel_folder_changed (folder, changes);
camel_folder_change_info_free (changes);
@@ -6410,29 +6431,33 @@
gboolean
camel_imapx_server_list_sync (CamelIMAPXServer *is,
- const gchar *pattern,
+ const gchar *in_pattern,
CamelStoreGetFolderInfoFlags flags,
GCancellable *cancellable,
GError **error)
{
CamelIMAPXCommand *ic;
+ gchar *utf7_pattern = NULL;
gboolean success;
g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
- g_return_val_if_fail (pattern != NULL, FALSE);
+ g_return_val_if_fail (in_pattern != NULL, FALSE);
g_warn_if_fail (is->priv->list_responses_hash == NULL);
g_warn_if_fail (is->priv->list_responses == NULL);
g_warn_if_fail (is->priv->lsub_responses == NULL);
+ if (!camel_imapx_server_get_utf8_accept (is))
+ utf7_pattern = camel_utf8_utf7 (in_pattern);
+
if (is->priv->list_return_opts != NULL) {
ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_LIST, "LIST
\"\" %s RETURN (%t)",
- pattern, is->priv->list_return_opts);
+ utf7_pattern ? utf7_pattern : in_pattern,
is->priv->list_return_opts);
} else {
is->priv->list_responses_hash = g_hash_table_new
(camel_strcase_hash, camel_strcase_equal);
ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_LIST, "LIST
\"\" %s",
- pattern);
+ utf7_pattern ? utf7_pattern : in_pattern);
}
success = camel_imapx_server_process_command_sync (is, ic, _("Error
fetching folders"), cancellable, error);
@@ -6441,13 +6466,15 @@
if (success && !is->priv->list_return_opts) {
ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_LSUB, "LSUB
\"\" %s",
- pattern);
+ utf7_pattern ? utf7_pattern : in_pattern);
success = camel_imapx_server_process_command_sync (is, ic,
_("Error fetching subscribed folders"), cancellable, error);
camel_imapx_command_unref (ic);
}
+ g_free (utf7_pattern);
+
if (is->priv->list_responses_hash) {
CamelIMAPXStore *imapx_store;
GSList *link;
@@ -6503,17 +6530,11 @@
camel_imapx_command_unref (ic);
if (success) {
- gchar *utf7_pattern;
-
- utf7_pattern = camel_utf8_utf7 (mailbox_name);
-
/* List the new mailbox so we trigger our untagged
* LIST handler. This simulates being notified of
* a newly-created mailbox, so we can just let the
* callback functions handle the bookkeeping. */
- success = camel_imapx_server_list_sync (is, utf7_pattern, 0,
cancellable, error);
-
- g_free (utf7_pattern);
+ success = camel_imapx_server_list_sync (is, mailbox_name, 0,
cancellable, error);
}
return success;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-settings.c
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-settings.c
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-settings.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-settings.c
2019-06-17 15:21:44.000000000 +0200
@@ -50,6 +50,7 @@
gboolean use_subscriptions;
gboolean ignore_other_users_namespace;
gboolean ignore_shared_folders_namespace;
+ gboolean full_update_on_metered_network;
CamelSortType fetch_order;
};
@@ -81,7 +82,8 @@
PROP_USE_SHELL_COMMAND,
PROP_USE_SUBSCRIPTIONS,
PROP_IGNORE_OTHER_USERS_NAMESPACE,
- PROP_IGNORE_SHARED_FOLDERS_NAMESPACE
+ PROP_IGNORE_SHARED_FOLDERS_NAMESPACE,
+ PROP_FULL_UPDATE_ON_METERED_NETWORK
};
G_DEFINE_TYPE_WITH_CODE (
@@ -253,6 +255,12 @@
CAMEL_IMAPX_SETTINGS (object),
g_value_get_boolean (value));
return;
+
+ case PROP_FULL_UPDATE_ON_METERED_NETWORK:
+ camel_imapx_settings_set_full_update_on_metered_network
(
+ CAMEL_IMAPX_SETTINGS (object),
+ g_value_get_boolean (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -446,6 +454,13 @@
camel_imapx_settings_get_ignore_shared_folders_namespace (
CAMEL_IMAPX_SETTINGS (object)));
return;
+
+ case PROP_FULL_UPDATE_ON_METERED_NETWORK:
+ g_value_set_boolean (
+ value,
+
camel_imapx_settings_get_full_update_on_metered_network (
+ CAMEL_IMAPX_SETTINGS (object)));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -787,6 +802,19 @@
G_PARAM_CONSTRUCT |
G_PARAM_EXPLICIT_NOTIFY |
G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_FULL_UPDATE_ON_METERED_NETWORK,
+ g_param_spec_boolean (
+ "full-update-on-metered-network",
+ "Full Update On Metered Network",
+ "Whether can do full folder update even on metered
network",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_EXPLICIT_NOTIFY |
+ G_PARAM_STATIC_STRINGS));
}
static void
@@ -1886,3 +1914,47 @@
g_object_notify (G_OBJECT (settings), "use-subscriptions");
}
+/**
+ * camel_imapx_settings_get_full_update_on_metered_network:
+ * @settings: a #CamelIMAPXSettings
+ *
+ * Returns whether to allow full folder update on metered network. With
+ * this off the folder update skips updates of the known messages, which
+ * can lead to not removing removed messages or not updating flags of
+ * the old messages. The option is meant to save bandwidth usage on
+ * the metered network.
+ *
+ * Returns: whether to allow full folder update on metered network
+ *
+ * Since: 3.32.3
+ **/
+gboolean
+camel_imapx_settings_get_full_update_on_metered_network (CamelIMAPXSettings
*settings)
+{
+ g_return_val_if_fail (CAMEL_IS_IMAPX_SETTINGS (settings), FALSE);
+
+ return settings->priv->full_update_on_metered_network;
+}
+
+/**
+ * camel_imapx_settings_set_full_update_on_metered_network:
+ * @settings: a #CamelIMAPXSettings
+ * @full_update_on_metered_network: whether to allow it
+ *
+ * Sets whether to allow full folder update on metered network.
+ *
+ * Since: 3.32.3
+ **/
+void
+camel_imapx_settings_set_full_update_on_metered_network (CamelIMAPXSettings
*settings,
+ gboolean
full_update_on_metered_network)
+{
+ g_return_if_fail (CAMEL_IS_IMAPX_SETTINGS (settings));
+
+ if (settings->priv->full_update_on_metered_network ==
full_update_on_metered_network)
+ return;
+
+ settings->priv->full_update_on_metered_network =
full_update_on_metered_network;
+
+ g_object_notify (G_OBJECT (settings), "full-update-on-metered-network");
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-settings.h
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-settings.h
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-settings.h
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-settings.h
2019-06-17 15:21:44.000000000 +0200
@@ -171,6 +171,11 @@
void camel_imapx_settings_set_use_subscriptions
(CamelIMAPXSettings *settings,
gboolean use_subscriptions);
+gboolean camel_imapx_settings_get_full_update_on_metered_network
+ (CamelIMAPXSettings *settings);
+void camel_imapx_settings_set_full_update_on_metered_network
+ (CamelIMAPXSettings *settings,
+ gboolean
full_update_on_metered_network);
G_END_DECLS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-store.c
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-store.c
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-store.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-store.c
2019-06-17 15:21:44.000000000 +0200
@@ -1605,7 +1605,6 @@
CamelIMAPXNamespaceResponse *namespace_response;
CamelIMAPXNamespace *namespace;
gchar *mailbox_name;
- gchar *utf7_mailbox_name;
gchar *pattern;
gchar separator;
gboolean success = FALSE;
@@ -1630,15 +1629,13 @@
separator = camel_imapx_namespace_get_separator (namespace);
mailbox_name = g_strdelimit (g_strdup (folder_path), "/", separator);
- utf7_mailbox_name = camel_utf8_utf7 (mailbox_name);
- pattern = g_strdup_printf ("%s*", utf7_mailbox_name);
+ pattern = g_strdup_printf ("%s*", mailbox_name);
success = fetch_folder_info_for_pattern (
conn_man, namespace, pattern, flags,
folder_info_results, cancellable, error);
g_free (pattern);
- g_free (utf7_mailbox_name);
g_free (mailbox_name);
exit:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-utils.c
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-utils.c
---
old/evolution-data-server-3.32.2/src/camel/providers/imapx/camel-imapx-utils.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/imapx/camel-imapx-utils.c
2019-06-17 15:21:44.000000000 +0200
@@ -2963,7 +2963,10 @@
if (!success)
return NULL;
- mailbox_name = camel_utf7_utf8 ((gchar *) token);
+ if (camel_imapx_input_stream_get_utf8_accept (stream))
+ mailbox_name = g_strdup ((const gchar *) token);
+ else
+ mailbox_name = camel_utf7_utf8 ((const gchar *) token);
camel_imapx_normalize_mailbox (mailbox_name, separator);
@@ -3251,7 +3254,10 @@
if (!success)
goto fail;
- mailbox_name = camel_utf7_utf8 ((gchar *) token);
+ if (camel_imapx_input_stream_get_utf8_accept (stream))
+ mailbox_name = g_strdup ((const gchar *) token);
+ else
+ mailbox_name = camel_utf7_utf8 ((const gchar *) token);
while (TRUE) {
/* Peek at the next token, and break
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/camel/providers/smtp/camel-smtp-transport.c
new/evolution-data-server-3.32.3/src/camel/providers/smtp/camel-smtp-transport.c
---
old/evolution-data-server-3.32.2/src/camel/providers/smtp/camel-smtp-transport.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/camel/providers/smtp/camel-smtp-transport.c
2019-06-17 15:21:44.000000000 +0200
@@ -77,6 +77,7 @@
static gboolean smtp_helo (CamelSmtpTransport
*transport,
CamelStreamBuffer *istream,
CamelStream *ostream,
+ gboolean ignore_8bitmime,
GCancellable *cancellable,
GError **error);
static gboolean smtp_mail (CamelSmtpTransport
*transport,
@@ -178,6 +179,7 @@
GIOStream *tls_stream;
gchar *respbuf = NULL;
gboolean success = TRUE;
+ gboolean ignore_8bitmime;
gchar *host;
if (!CAMEL_SERVICE_CLASS (camel_smtp_transport_parent_class)->
@@ -247,9 +249,11 @@
} while (*(respbuf+3) == '-'); /* if we got "220-" then loop again */
g_free (respbuf);
+ ignore_8bitmime = host && camel_strstrcase (host, "yahoo.com");
+
/* Try sending EHLO */
transport->flags |= CAMEL_SMTP_TRANSPORT_IS_ESMTP;
- if (!smtp_helo (transport, istream, ostream, cancellable, error)) {
+ if (!smtp_helo (transport, istream, ostream, ignore_8bitmime,
cancellable, error)) {
if (!transport->connected) {
success = FALSE;
goto exit;
@@ -259,7 +263,7 @@
g_clear_error (error);
transport->flags &= ~CAMEL_SMTP_TRANSPORT_IS_ESMTP;
- if (!smtp_helo (transport, istream, ostream, cancellable,
error)) {
+ if (!smtp_helo (transport, istream, ostream, ignore_8bitmime,
cancellable, error)) {
success = FALSE;
goto exit;
}
@@ -331,7 +335,7 @@
/* We are supposed to re-EHLO after a successful STARTTLS to
* re-fetch any supported extensions. */
- if (!smtp_helo (transport, istream, ostream, cancellable, error)) {
+ if (!smtp_helo (transport, istream, ostream, ignore_8bitmime,
cancellable, error)) {
success = FALSE;
}
@@ -855,6 +859,25 @@
}
static gboolean
+message_has_8bit_or_qp_part_cb (CamelMimeMessage *message,
+ CamelMimePart *part,
+ CamelMimePart *parent_part,
+ gpointer user_data)
+{
+ CamelTransferEncoding encoding;
+ gint *has8bit = user_data;
+
+ /* check this part, and stop as soon as we are done */
+ encoding = camel_mime_part_get_encoding (part);
+
+ *has8bit = encoding == CAMEL_TRANSFER_ENCODING_8BIT ||
+ encoding == CAMEL_TRANSFER_ENCODING_BINARY ||
+ encoding == CAMEL_TRANSFER_ENCODING_QUOTEDPRINTABLE;
+
+ return !(*has8bit);
+}
+
+static gboolean
smtp_transport_send_to_sync (CamelTransport *transport,
CamelMimeMessage *message,
CamelAddress *from,
@@ -867,7 +890,7 @@
CamelInternetAddress *cia;
CamelStreamBuffer *istream;
CamelStream *ostream;
- gboolean has_8bit_parts;
+ gboolean has_8bit_parts = FALSE;
const gchar *addr;
gint i, len;
@@ -897,8 +920,8 @@
camel_operation_push_message (cancellable, _("Sending message"));
- /* find out if the message has 8bit mime parts */
- has_8bit_parts = camel_mime_message_has_8bit_parts (message);
+ /* find out if the message has 8bit mime parts; quoted-printable are
reencoded to 8bit too */
+ camel_mime_message_foreach_part (message,
message_has_8bit_or_qp_part_cb, &has_8bit_parts);
/* If the connection needs a ReSET, then do so */
if (smtp_transport->need_rset &&
@@ -1358,10 +1381,12 @@
smtp_helo (CamelSmtpTransport *transport,
CamelStreamBuffer *istream,
CamelStream *ostream,
+ gboolean ignore_8bitmime,
GCancellable *cancellable,
GError **error)
{
gchar *name = NULL, *cmdbuf = NULL, *respbuf = NULL;
+ gboolean first_line = TRUE;
const gchar *token;
GResolver *resolver;
GInetAddress *address;
@@ -1446,9 +1471,17 @@
token = respbuf + 4;
+ if (first_line) {
+ ignore_8bitmime = ignore_8bitmime || camel_strstrcase
(token, "yahoo.com") != NULL;
+ first_line = FALSE;
+ }
+
if (transport->flags & CAMEL_SMTP_TRANSPORT_IS_ESMTP) {
if (!g_ascii_strncasecmp (token, "8BITMIME", 8)) {
- transport->flags |=
CAMEL_SMTP_TRANSPORT_8BITMIME;
+ if (ignore_8bitmime)
+ d (fprintf (stderr, "[SMTP] Ignoring
8BITMIME extension\n"));
+ else
+ transport->flags |=
CAMEL_SMTP_TRANSPORT_8BITMIME;
} else if (!g_ascii_strncasecmp (token,
"ENHANCEDSTATUSCODES", 19)) {
transport->flags |=
CAMEL_SMTP_TRANSPORT_ENHANCEDSTATUSCODES;
} else if (!g_ascii_strncasecmp (token, "STARTTLS", 8))
{
@@ -1505,7 +1538,7 @@
/* we gotta tell the smtp server who we are. (our email addy) */
gchar *cmdbuf, *respbuf = NULL;
- if (transport->flags & CAMEL_SMTP_TRANSPORT_8BITMIME && has_8bit_parts)
+ if ((transport->flags & CAMEL_SMTP_TRANSPORT_8BITMIME) &&
has_8bit_parts)
cmdbuf = g_strdup_printf ("MAIL FROM:<%s> BODY=8BITMIME\r\n",
sender);
else
cmdbuf = g_strdup_printf ("MAIL FROM:<%s>\r\n", sender);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/libedataserverui/e-credentials-prompter.c
new/evolution-data-server-3.32.3/src/libedataserverui/e-credentials-prompter.c
---
old/evolution-data-server-3.32.2/src/libedataserverui/e-credentials-prompter.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/src/libedataserverui/e-credentials-prompter.c
2019-06-17 15:21:44.000000000 +0200
@@ -1572,9 +1572,9 @@
* @prompter: an #ECredentialsPrompter
* @source: an #ESource
*
- * Continues a credential prompt for @source. Returns, whether anything wil be
done.
+ * Continues a credential prompt for @source. Returns, whether anything will
be done.
* The %FALSE either means that the @source<!-- -->'s connection status is not
- * the %E_SOURCE_CONNECTION_STATUS_AWAITING_CREDENTIALS.
+ * the %E_SOURCE_CONNECTION_STATUS_AWAITING_CREDENTIALS or it is disabled.
*
* Returns: Whether continues with the credentials prompt.
*
@@ -1587,7 +1587,8 @@
g_return_val_if_fail (E_IS_CREDENTIALS_PROMPTER (prompter), FALSE);
g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
- if (e_source_get_connection_status (source) !=
E_SOURCE_CONNECTION_STATUS_AWAITING_CREDENTIALS)
+ if (e_source_get_connection_status (source) !=
E_SOURCE_CONNECTION_STATUS_AWAITING_CREDENTIALS ||
+ !e_source_registry_check_enabled (prompter->priv->registry, source))
return FALSE;
e_source_get_last_credentials_required_arguments (source,
prompter->priv->cancellable,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/src/libedataserverui/e-reminders-widget.c
new/evolution-data-server-3.32.3/src/libedataserverui/e-reminders-widget.c
--- old/evolution-data-server-3.32.2/src/libedataserverui/e-reminders-widget.c
2019-05-06 12:16:15.000000000 +0200
+++ new/evolution-data-server-3.32.3/src/libedataserverui/e-reminders-widget.c
2019-06-17 15:21:44.000000000 +0200
@@ -438,6 +438,8 @@
reminders->priv->overdue_update_id = g_timeout_add_seconds
(until_minute,
reminders_widget_overdue_update_cb, reminders);
+
+ reminders_widget_overdue_update (reminders);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/tests/libebook/client/test-book-client-get-revision.c
new/evolution-data-server-3.32.3/tests/libebook/client/test-book-client-get-revision.c
---
old/evolution-data-server-3.32.2/tests/libebook/client/test-book-client-get-revision.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/tests/libebook/client/test-book-client-get-revision.c
2019-06-17 15:21:44.000000000 +0200
@@ -48,6 +48,19 @@
if (!e_client_get_backend_property_sync (E_CLIENT (client),
CLIENT_BACKEND_PROPERTY_REVISION, &revision_after, NULL, &error))
g_error ("Error getting book revision: %s", error->message);
+ /* Sometimes, kind of rarely, the D-Bus property change is not
delivered on time,
+ thus give it some time to be received and processed. */
+ if (g_strcmp0 (revision_before, revision_after) == 0) {
+ g_message (" D-Bus property 'revision' change not received
yet, trying to wait a bit");
+
+ g_usleep (G_USEC_PER_SEC / 2);
+
+ g_clear_pointer (&revision_after, g_free);
+
+ if (!e_client_get_backend_property_sync (E_CLIENT (client),
CLIENT_BACKEND_PROPERTY_REVISION, &revision_after, NULL, &error))
+ g_error ("Error getting book revision: %s",
error->message);
+ }
+
g_assert (revision_before);
g_assert (revision_after);
g_assert_cmpstr (revision_before, !=, revision_after);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/evolution-data-server-3.32.2/tests/libecal/client/test-cal-client-get-revision.c
new/evolution-data-server-3.32.3/tests/libecal/client/test-cal-client-get-revision.c
---
old/evolution-data-server-3.32.2/tests/libecal/client/test-cal-client-get-revision.c
2019-05-06 12:16:15.000000000 +0200
+++
new/evolution-data-server-3.32.3/tests/libecal/client/test-cal-client-get-revision.c
2019-06-17 15:21:44.000000000 +0200
@@ -54,6 +54,19 @@
&revision_after, NULL, &error))
g_error ("Error getting calendar revision: %s", error->message);
+ /* Sometimes, kind of rarely, the D-Bus property change is not
delivered on time,
+ thus give it some time to be received and processed. */
+ if (g_strcmp0 (revision_before, revision_after) == 0) {
+ g_message (" D-Bus property 'revision' change not received
yet, trying to wait a bit");
+
+ g_usleep (G_USEC_PER_SEC / 2);
+
+ g_clear_pointer (&revision_after, g_free);
+
+ if (!e_client_get_backend_property_sync (E_CLIENT (client),
CLIENT_BACKEND_PROPERTY_REVISION, &revision_after, NULL, &error))
+ g_error ("Error getting calendar revision: %s",
error->message);
+ }
+
g_assert (revision_before);
g_assert (revision_after);
g_assert_cmpstr (revision_before, !=, revision_after);