Skip to content
Commits on Source (10)
......@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1)
cmake_policy(VERSION 3.1)
project(evolution-data-server
VERSION 3.44.3
VERSION 3.44.4
LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 14)
set(PROJECT_BUGREPORT "https://gitlab.gnome.org/GNOME/evolution-data-server/issues/")
......
Evolution-Data-Server 3.44.4 2022-08-05
---------------------------------------
Bug Fixes:
I#407 - IMAPx: Unsubscribed folder always removed from the UI
Miscellaneous:
ESoupAuthBearer: Check for token expiration in e_soup_auth_bearer_is_authenticated()
ESoupSession: Avoid downgrade of Bearer (OAuth2) auth for authentication
Check for non-zero value passed to g_flags_get_first_value()
alarm-notify: Use themed icon instead of file icon for notifications
Evolution-Data-Server 3.44.3 2022-07-01
---------------------------------------
......
evolution-data-server (3.44.3-0ubuntu1) jammy; urgency=medium
evolution-data-server (3.44.4-0ubuntu1) jammy; urgency=medium
* New upstream release (LP: #1980545)
......
......@@ -5187,13 +5187,13 @@ e_cal_client_modify_objects_sync (ECalClient *client,
mod_flags = g_string_new (NULL);
flags_class = g_type_class_ref (E_TYPE_CAL_OBJ_MOD_TYPE);
flags_value = g_flags_get_first_value (flags_class, mod);
while (flags_value != NULL) {
for (flags_value = g_flags_get_first_value (flags_class, mod);
flags_value && mod;
flags_value = g_flags_get_first_value (flags_class, mod)) {
if (mod_flags->len > 0)
g_string_append_c (mod_flags, ':');
g_string_append (mod_flags, flags_value->value_nick);
mod &= ~flags_value->value;
flags_value = g_flags_get_first_value (flags_class, mod);
}
strv = g_new0 (gchar *, g_slist_length (icalcomps) + 1);
......@@ -5549,13 +5549,13 @@ e_cal_client_remove_objects_sync (ECalClient *client,
mod_flags = g_string_new (NULL);
flags_class = g_type_class_ref (E_TYPE_CAL_OBJ_MOD_TYPE);
flags_value = g_flags_get_first_value (flags_class, mod);
while (flags_value != NULL) {
for (flags_value = g_flags_get_first_value (flags_class, mod);
flags_value && mod;
flags_value = g_flags_get_first_value (flags_class, mod)) {
if (mod_flags->len > 0)
g_string_append_c (mod_flags, ':');
g_string_append (mod_flags, flags_value->value_nick);
mod &= ~flags_value->value;
flags_value = g_flags_get_first_value (flags_class, mod);
}
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
......
......@@ -3177,12 +3177,20 @@ imapx_store_unsubscribe_folder_sync (CamelSubscribable *subscribable,
success = camel_imapx_conn_manager_unsubscribe_mailbox_sync (conn_man, mailbox, cancellable, error);
if (success) {
CamelFolderInfo *fi;
CamelSettings *settings;
fi = imapx_store_build_folder_info (
CAMEL_IMAPX_STORE (subscribable), folder_name, 0);
camel_subscribable_folder_unsubscribed (subscribable, fi);
camel_folder_info_free (fi);
settings = camel_service_ref_settings (CAMEL_SERVICE (imapx_store));
/* Notify about unsubscribed folder only if showing subscribed folders only */
if (camel_imapx_settings_get_use_subscriptions (CAMEL_IMAPX_SETTINGS (settings))) {
CamelFolderInfo *fi;
fi = imapx_store_build_folder_info (imapx_store, folder_name, 0);
camel_subscribable_folder_unsubscribed (subscribable, fi);
camel_folder_info_free (fi);
}
g_clear_object (&settings);
}
exit:
......
......@@ -120,7 +120,8 @@ e_soup_auth_bearer_is_authenticated (SoupAuth *auth)
g_mutex_lock (&bearer->priv->property_lock);
authenticated = (bearer->priv->access_token != NULL);
authenticated = (bearer->priv->access_token != NULL) &&
!e_soup_auth_bearer_is_expired_locked (bearer);
g_mutex_unlock (&bearer->priv->property_lock);
......@@ -213,6 +214,7 @@ e_soup_auth_bearer_set_access_token (ESoupAuthBearer *bearer,
{
gboolean was_authenticated;
gboolean now_authenticated;
gboolean changed;
g_return_if_fail (E_IS_SOUP_AUTH_BEARER (bearer));
......@@ -220,13 +222,12 @@ e_soup_auth_bearer_set_access_token (ESoupAuthBearer *bearer,
g_mutex_lock (&bearer->priv->property_lock);
if (g_strcmp0 (bearer->priv->access_token, access_token) == 0) {
g_mutex_unlock (&bearer->priv->property_lock);
return;
}
changed = g_strcmp0 (bearer->priv->access_token, access_token) != 0;
g_free (bearer->priv->access_token);
bearer->priv->access_token = g_strdup (access_token);
if (changed) {
g_free (bearer->priv->access_token);
bearer->priv->access_token = g_strdup (access_token);
}
if (expires_in_seconds > 0)
bearer->priv->expiry = time (NULL) + expires_in_seconds - 5;
......@@ -235,12 +236,12 @@ e_soup_auth_bearer_set_access_token (ESoupAuthBearer *bearer,
g_mutex_unlock (&bearer->priv->property_lock);
now_authenticated = soup_auth_is_authenticated (SOUP_AUTH (bearer));
if (changed) {
now_authenticated = soup_auth_is_authenticated (SOUP_AUTH (bearer));
if (was_authenticated != now_authenticated)
g_object_notify (
G_OBJECT (bearer),
SOUP_AUTH_IS_AUTHENTICATED);
if (was_authenticated != now_authenticated)
g_object_notify (G_OBJECT (bearer), "is-authenticated");
}
}
/**
......
......@@ -331,14 +331,19 @@ e_soup_session_authenticate_cb (SoupSession *soup_session,
session = E_SOUP_SESSION (soup_session);
g_mutex_lock (&session->priv->property_lock);
if (E_IS_SOUP_AUTH_BEARER (auth)) {
g_object_ref (auth);
g_warn_if_fail ((gpointer) session->priv->using_bearer_auth == (gpointer) auth);
g_clear_object (&session->priv->using_bearer_auth);
session->priv->using_bearer_auth = E_SOUP_AUTH_BEARER (auth);
} else if (session->priv->using_bearer_auth) {
/* This can mean the bearer auth expired, then a Basic auth is used by the libsoup;
that's not meant to be done here, thus fail early. */
g_mutex_unlock (&session->priv->property_lock);
return;
}
g_mutex_lock (&session->priv->property_lock);
if (retrying && !session->priv->auth_prefilled) {
g_mutex_unlock (&session->priv->property_lock);
return;
......
......@@ -4622,7 +4622,7 @@ e_source_invoke_credentials_required_sync (ESource *source,
flags_class = g_type_class_ref (G_TYPE_TLS_CERTIFICATE_FLAGS);
for (flags_value = g_flags_get_first_value (flags_class, certificate_errors);
flags_value;
flags_value && certificate_errors;
flags_value = g_flags_get_first_value (flags_class, certificate_errors)) {
if (certificate_errors_str->len)
g_string_append_c (certificate_errors_str, ':');
......
......@@ -325,33 +325,16 @@ e_alarm_notify_display (EAlarmNotify *an,
if (!g_hash_table_contains (an->priv->notification_ids, notif_id)) {
GNotification *notification;
GtkIconInfo *icon_info;
GIcon *icon;
gchar *detailed_action;
notification = g_notification_new (_("Reminders"));
g_notification_set_body (notification, description);
icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (), "appointment-soon", 48, 0);
if (icon_info) {
const gchar *filename;
filename = gtk_icon_info_get_filename (icon_info);
if (filename && *filename) {
GFile *file;
GIcon *icon;
file = g_file_new_for_path (filename);
icon = g_file_icon_new (file);
if (icon) {
g_notification_set_icon (notification, icon);
g_object_unref (icon);
}
g_object_unref (file);
}
gtk_icon_info_free (icon_info);
icon = g_themed_icon_new ("appointment-soon");
if (icon) {
g_notification_set_icon (notification, icon);
g_object_unref (icon);
}
detailed_action = g_action_print_detailed_name ("app.show-reminders", NULL);
......