[evolution-data-server/gnome-3-38] I#286 - Skip collection account refresh when parts disabled
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-38] I#286 - Skip collection account refresh when parts disabled
- Date: Thu, 7 Jan 2021 17:40:12 +0000 (UTC)
commit b1197d4b85757b5f387e18feda5c487e9e651173
Author: Milan Crha <mcrha redhat com>
Date: Thu Jan 7 18:39:32 2021 +0100
I#286 - Skip collection account refresh when parts disabled
It doesn't make sense to ask the server for existing sources, the less
the user for credentials to login to the server, when all the related
parts are disabled.
Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/286
src/libebackend/e-backend-enums.h | 20 ++++++++++++
src/libebackend/e-collection-backend.c | 47 +++++++++++++++++++++++++++
src/libebackend/e-collection-backend.h | 4 +++
src/libebackend/e-webdav-collection-backend.c | 6 +---
4 files changed, 72 insertions(+), 5 deletions(-)
---
diff --git a/src/libebackend/e-backend-enums.h b/src/libebackend/e-backend-enums.h
index 6fefc40a1..b3803fa0f 100644
--- a/src/libebackend/e-backend-enums.h
+++ b/src/libebackend/e-backend-enums.h
@@ -103,4 +103,24 @@ typedef enum {
E_OFFLINE_STATE_LOCALLY_DELETED
} EOfflineState;
+/**
+ * ECollectionBackendParts:
+ * @E_COLLECTION_BACKEND_PART_NONE: None part.
+ * @E_COLLECTION_BACKEND_PART_CALENDAR: Check the calendar part.
+ * @E_COLLECTION_BACKEND_PART_CONTACTS: Check the contacts part.
+ * @E_COLLECTION_BACKEND_PART_MAIL: Check the mail part.
+ * @E_COLLECTION_BACKEND_PART_ANY: Shortcut to have all parts checked.
+ *
+ * Flags to check whether at least one of the asked for parts is enabled.
+ *
+ * Since: 3.38.3
+ **/
+typedef enum { /*< flags >*/
+ E_COLLECTION_BACKEND_PART_NONE = 0,
+ E_COLLECTION_BACKEND_PART_CALENDAR = 1 << 0,
+ E_COLLECTION_BACKEND_PART_CONTACTS = 1 << 1,
+ E_COLLECTION_BACKEND_PART_MAIL = 1 << 2,
+ E_COLLECTION_BACKEND_PART_ANY = ~0
+} ECollectionBackendParts;
+
#endif /* E_BACKEND_ENUMS_H */
diff --git a/src/libebackend/e-collection-backend.c b/src/libebackend/e-collection-backend.c
index 7be6b8f18..bdc22e42b 100644
--- a/src/libebackend/e-collection-backend.c
+++ b/src/libebackend/e-collection-backend.c
@@ -2083,3 +2083,50 @@ e_collection_backend_thaw_populate (ECollectionBackend *backend)
g_atomic_int_add (&backend->priv->populate_freeze_count, -1);
}
+
+/**
+ * e_collection_backend_get_part_enabled:
+ * @backend: an #ECollectionBackend
+ * @parts: a bit-or of #ECollectionBackendParts with parts to be checked
+ *
+ * Checks whether the @backend has enabled at least of the @parts.
+ *
+ * Returns: %TRUE, when at least one of the @parts is enabled and
+ * the backend's #ESource is enabled as well.
+ *
+ * Since: 3.38.3
+ **/
+gboolean
+e_collection_backend_get_part_enabled (ECollectionBackend *backend,
+ ECollectionBackendParts parts)
+{
+ ESourceCollection *collection_extension = NULL;
+ ESource *source;
+
+ g_return_val_if_fail (E_IS_COLLECTION_BACKEND (backend), FALSE);
+
+ source = e_backend_get_source (E_BACKEND (backend));
+
+ if (!e_source_get_enabled (source))
+ return FALSE;
+
+ if (e_source_has_extension (source, E_SOURCE_EXTENSION_COLLECTION))
+ collection_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_COLLECTION);
+
+ if (!collection_extension)
+ return TRUE;
+
+ if ((parts & E_COLLECTION_BACKEND_PART_CALENDAR) != 0 &&
+ e_source_collection_get_calendar_enabled (collection_extension))
+ return TRUE;
+
+ if ((parts & E_COLLECTION_BACKEND_PART_CONTACTS) != 0 &&
+ e_source_collection_get_contacts_enabled (collection_extension))
+ return TRUE;
+
+ if ((parts & E_COLLECTION_BACKEND_PART_MAIL) != 0 &&
+ e_source_collection_get_mail_enabled (collection_extension))
+ return TRUE;
+
+ return FALSE;
+}
diff --git a/src/libebackend/e-collection-backend.h b/src/libebackend/e-collection-backend.h
index f96a7099f..7f4cf4574 100644
--- a/src/libebackend/e-collection-backend.h
+++ b/src/libebackend/e-collection-backend.h
@@ -23,6 +23,7 @@
#define E_COLLECTION_BACKEND_H
#include <libebackend/e-backend.h>
+#include <libebackend/e-backend-enums.h>
/* Standard GObject macros */
#define E_TYPE_COLLECTION_BACKEND \
@@ -177,6 +178,9 @@ gboolean e_collection_backend_freeze_populate
(ECollectionBackend *backend);
void e_collection_backend_thaw_populate
(ECollectionBackend *backend);
+gboolean e_collection_backend_get_part_enabled
+ (ECollectionBackend *backend,
+ ECollectionBackendParts parts);
G_END_DECLS
diff --git a/src/libebackend/e-webdav-collection-backend.c b/src/libebackend/e-webdav-collection-backend.c
index 7f9880f2f..7f3165244 100644
--- a/src/libebackend/e-webdav-collection-backend.c
+++ b/src/libebackend/e-webdav-collection-backend.c
@@ -299,7 +299,6 @@ webdav_collection_backend_populate (ECollectionBackend *collection)
{
EWebDAVCollectionBackend *webdav_backend = E_WEBDAV_COLLECTION_BACKEND (collection);
ESourceRegistryServer *server;
- ESourceCollection *collection_extension;
ESource *source;
GList *list, *liter;
@@ -335,11 +334,8 @@ webdav_collection_backend_populate (ECollectionBackend *collection)
g_list_free_full (list, g_object_unref);
source = e_backend_get_source (E_BACKEND (collection));
- collection_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_COLLECTION);
- if (e_source_get_enabled (source) && (
- e_source_collection_get_calendar_enabled (collection_extension) ||
- e_source_collection_get_contacts_enabled (collection_extension))) {
+ if (e_collection_backend_get_part_enabled (collection, E_COLLECTION_BACKEND_PART_CALENDAR |
E_COLLECTION_BACKEND_PART_CONTACTS)) {
gboolean needs_credentials = TRUE;
if (e_source_has_extension (source, E_SOURCE_EXTENSION_AUTHENTICATION)) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]