[evolution-ews/gnome-3-36] I#102 - Hidden folders are displayed normally in the UI
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews/gnome-3-36] I#102 - Hidden folders are displayed normally in the UI
- Date: Thu, 28 May 2020 09:09:34 +0000 (UTC)
commit 614a8596fc326f95acaa6da701ecfbb229019208
Author: Milan Crha <mcrha redhat com>
Date: Thu May 28 11:09:06 2020 +0200
I#102 - Hidden folders are displayed normally in the UI
Closes https://gitlab.gnome.org/GNOME/evolution-ews/-/issues/102
src/collection/e-ews-backend.c | 32 ++------------------------------
src/server/e-ews-connection.c | 38 +++++++++++++++++++++++++-------------
src/server/e-ews-folder.c | 21 ++++++++++++++++++++-
src/server/e-ews-folder.h | 3 +--
4 files changed, 48 insertions(+), 46 deletions(-)
---
diff --git a/src/collection/e-ews-backend.c b/src/collection/e-ews-backend.c
index ea7c7518..474deab3 100644
--- a/src/collection/e-ews-backend.c
+++ b/src/collection/e-ews-backend.c
@@ -225,32 +225,6 @@ ews_backend_sync_authentication (EEwsBackend *ews_backend,
e_source_authentication_get_user (coll_authentication_extension));
}
-static gboolean
-ews_backend_is_uuid_like_name (const gchar *name)
-{
- const gchar *uuid_mask = "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}";
- const gchar *ptr, *msk_ptr;
- gint len;
-
- if (!name || *name != '{')
- return FALSE;
-
- len = strlen (name);
- if (name[len - 1] != '}' || len != strlen (uuid_mask))
- return FALSE;
-
- for (ptr = name, msk_ptr = uuid_mask; *ptr && *msk_ptr; ptr++, msk_ptr++) {
- if (*msk_ptr == 'X') {
- if (!g_ascii_isxdigit (*ptr))
- break;
- } else if (*msk_ptr != *ptr) {
- break;
- }
- }
-
- return *msk_ptr == *ptr && !*msk_ptr;
-}
-
static ESource *
ews_backend_new_child (EEwsBackend *backend,
EEwsFolder *folder)
@@ -268,11 +242,9 @@ ews_backend_new_child (EEwsBackend *backend,
display_name = e_ews_folder_get_name (folder);
- if (e_ews_folder_get_folder_type (folder) == E_EWS_FOLDER_TYPE_CONTACTS &&
- ews_backend_is_uuid_like_name (display_name)) {
- /* Ignore address books with UUID-like name */
+ /* Hide on-the-server hidden folders */
+ if (e_ews_folder_get_is_hidden (folder))
return NULL;
- }
collection_backend = E_COLLECTION_BACKEND (backend);
source = e_collection_backend_new_child (collection_backend, fid->id);
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index 55660237..5b810821 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -1187,32 +1187,38 @@ sync_xxx_response_cb (ESoapParameter *subparam,
for (subparam1 = e_soap_parameter_get_first_child_by_name (node, "Create");
subparam1 != NULL;
subparam1 = e_soap_parameter_get_next_child_by_name (subparam1, "Create")) {
- EEwsFolder *folder;
+ GObject *object;
- folder = parser (subparam1);
- if (folder)
- items_created = g_slist_append (items_created, folder);
+ object = parser (subparam1);
+ if (object && (!E_IS_EWS_FOLDER (object) || !e_ews_folder_get_is_hidden (E_EWS_FOLDER
(object))))
+ items_created = g_slist_append (items_created, object);
+ else
+ g_clear_object (&object);
}
for (subparam1 = e_soap_parameter_get_first_child_by_name (node, "Update");
subparam1 != NULL;
subparam1 = e_soap_parameter_get_next_child_by_name (subparam1, "Update")) {
- EEwsFolder *folder;
+ GObject *object;
- folder = parser (subparam1);
- if (folder)
- items_updated = g_slist_append (items_updated, folder);
+ object = parser (subparam1);
+ if (object && (!E_IS_EWS_FOLDER (object) || !e_ews_folder_get_is_hidden (E_EWS_FOLDER
(object))))
+ items_updated = g_slist_append (items_updated, object);
+ else
+ g_clear_object (&object);
}
/* Exchange 2007SP1 introduced <ReadFlagChange> which is basically identical
* to <Update>; no idea why they thought it was a good idea. */
for (subparam1 = e_soap_parameter_get_first_child_by_name (node, "ReadFlagChange");
subparam1 != NULL;
subparam1 = e_soap_parameter_get_next_child_by_name (subparam1, "ReadFlagChange")) {
- EEwsFolder *folder;
+ GObject *object;
- folder = parser (subparam1);
- if (folder)
- items_updated = g_slist_append (items_updated, folder);
+ object = parser (subparam1);
+ if (object && (!E_IS_EWS_FOLDER (object) || !e_ews_folder_get_is_hidden (E_EWS_FOLDER
(object))))
+ items_updated = g_slist_append (items_updated, object);
+ else
+ g_clear_object (&object);
}
for (subparam1 = e_soap_parameter_get_first_child_by_name (node, "Delete");
@@ -5130,7 +5136,13 @@ e_ews_connection_sync_folder_hierarchy (EEwsConnection *cnc,
TRUE);
e_soap_message_start_element (msg, "FolderShape", "messages", NULL);
e_ews_message_write_string_parameter (msg, "BaseShape", NULL, "AllProperties");
- e_soap_message_end_element (msg);
+ e_soap_message_start_element (msg, "AdditionalProperties", NULL, NULL);
+ e_soap_message_start_element (msg, "ExtendedFieldURI", NULL, NULL);
+ e_soap_message_add_attribute (msg, "PropertyTag", "4340", NULL, NULL); /* PidTagAttributeHidden */
+ e_soap_message_add_attribute (msg, "PropertyType", "Boolean", NULL, NULL);
+ e_soap_message_end_element (msg); /* ExtendedFieldURI */
+ e_soap_message_end_element (msg); /* AdditionalProperties */
+ e_soap_message_end_element (msg); /* FolderShape */
if (sync_state)
e_ews_message_write_string_parameter (msg, "SyncState", "messages", sync_state);
diff --git a/src/server/e-ews-folder.c b/src/server/e-ews-folder.c
index 65830fc7..e8f77590 100644
--- a/src/server/e-ews-folder.c
+++ b/src/server/e-ews-folder.c
@@ -47,6 +47,7 @@ struct _EEwsFolderPrivate {
gboolean foreign;
gchar *foreign_mail;
gboolean is_public;
+ gboolean is_hidden;
};
static void
@@ -110,6 +111,7 @@ e_ews_folder_init (EEwsFolder *folder)
folder->priv->folder_type = E_EWS_FOLDER_TYPE_UNKNOWN;
folder->priv->foreign = FALSE;
folder->priv->is_public = FALSE;
+ folder->priv->is_hidden = FALSE;
}
static gboolean
@@ -214,10 +216,19 @@ e_ews_folder_set_from_soap_parameter (EEwsFolder *folder,
subparam1 = e_soap_parameter_get_first_child_by_name (subparam, "ExtendedFieldURI");
if (subparam1) {
prop_tag = e_soap_parameter_get_property (subparam1, "PropertyTag");
- if (g_strcmp0 (prop_tag, "0xe08") == 0) {
+ if (prop_tag && g_ascii_strcasecmp (prop_tag, "0xe08") == 0) {
subparam1 = e_soap_parameter_get_first_child_by_name (subparam, "Value");
if (subparam1)
priv->size = e_soap_parameter_get_int_value (subparam1);
+ } else if (prop_tag && g_ascii_strcasecmp (prop_tag, "0x10f4") == 0) { /*
PidTagAttributeHidden */
+ subparam1 = e_soap_parameter_get_first_child_by_name (subparam, "Value");
+ if (subparam1) {
+ gchar *value;
+
+ value = e_soap_parameter_get_string_value (subparam1);
+ priv->is_hidden = g_strcmp0 (value, "true") == 0;
+ g_free (value);
+ }
}
g_free (prop_tag);
}
@@ -474,6 +485,14 @@ e_ews_folder_set_parent_id (EEwsFolder *folder,
priv->parent_fid = parent_fid;
}
+gboolean
+e_ews_folder_get_is_hidden (EEwsFolder *folder)
+{
+ g_return_val_if_fail (E_IS_EWS_FOLDER (folder), FALSE);
+
+ return folder->priv->is_hidden;
+}
+
EEwsFolderType
e_ews_folder_get_folder_type (const EEwsFolder *folder)
{
diff --git a/src/server/e-ews-folder.h b/src/server/e-ews-folder.h
index f07957e9..baab181b 100644
--- a/src/server/e-ews-folder.h
+++ b/src/server/e-ews-folder.h
@@ -74,8 +74,7 @@ guint32 e_ews_folder_get_total_count (const EEwsFolder *folder);
guint32 e_ews_folder_get_unread_count (const EEwsFolder *folder);
guint32 e_ews_folder_get_child_count (const EEwsFolder *folder);
guint64 e_ews_folder_get_size (const EEwsFolder *folder);
-gboolean e_ews_folder_get_is_writable (const EEwsFolder *folder);
-void e_ews_folder_set_is_writable (EEwsFolder *folder, gboolean writable);
+gboolean e_ews_folder_get_is_hidden (EEwsFolder *folder);
EEwsFolderType e_ews_folder_get_folder_type (const EEwsFolder *folder);
void e_ews_folder_set_folder_type (EEwsFolder *folder, EEwsFolderType folder_type);
gboolean e_ews_folder_get_foreign (const EEwsFolder *folder);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]