diff options
author | Corentin Noël <corentin.noel@collabora.com> | 2020-11-05 11:46:21 +0100 |
---|---|---|
committer | Corentin Noël <corentin.noel@collabora.com> | 2020-11-05 14:00:50 +0100 |
commit | 4f4ea2f45d5e2bffcf446b9fdc1bb65e94982d03 (patch) | |
tree | 909a7d011454fa8930605e591fe61fc511393458 | |
parent | 9d1505cd3518ff32bd03050fd898abf89d31d389 (diff) | |
download | evolution-data-server-tintou/edataserver-webdavdiscoveredsource.tar.gz |
M!48 - e-webdav-discover: Define EWebDAVDiscoveredSource as boxed typetintou/edataserver-webdavdiscoveredsource
This allows to use the e_webdav_discover_sources_* functions from the introspection
Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/merge_requests/48
-rw-r--r-- | src/libedataserver/e-dataserver-autocleanups.h | 1 | ||||
-rw-r--r-- | src/libedataserver/e-webdav-discover.c | 67 | ||||
-rw-r--r-- | src/libedataserver/e-webdav-discover.h | 6 |
3 files changed, 59 insertions, 15 deletions
diff --git a/src/libedataserver/e-dataserver-autocleanups.h b/src/libedataserver/e-dataserver-autocleanups.h index 556058b66..bc3c81ad4 100644 --- a/src/libedataserver/e-dataserver-autocleanups.h +++ b/src/libedataserver/e-dataserver-autocleanups.h @@ -87,6 +87,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(ESourceTaskList, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(ESourceUoa, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(ESourceWeather, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(ESourceWebdav, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(EWebDAVDiscoveredSource, e_webdav_discovered_source_free) G_DEFINE_AUTOPTR_CLEANUP_FUNC(EWebDAVSession, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(EWebDAVResource, e_webdav_resource_free) G_DEFINE_AUTOPTR_CLEANUP_FUNC(EWebDAVPropertyChange, e_webdav_property_change_free) diff --git a/src/libedataserver/e-webdav-discover.c b/src/libedataserver/e-webdav-discover.c index 9f822e079..0aefa5aae 100644 --- a/src/libedataserver/e-webdav-discover.c +++ b/src/libedataserver/e-webdav-discover.c @@ -41,6 +41,8 @@ typedef struct _WebDAVDiscoverData { #define CUSTOM_SUPPORTS_FLAGS (E_WEBDAV_DISCOVER_SUPPORTS_CALENDAR_AUTO_SCHEDULE | E_WEBDAV_DISCOVER_SUPPORTS_SUBSCRIBED_ICALENDAR) +G_DEFINE_BOXED_TYPE (EWebDAVDiscoveredSource, e_webdav_discovered_source, e_webdav_discovered_source_copy, e_webdav_discovered_source_free) + static gboolean e_webdav_discovery_already_discovered (const gchar *href, const GSList *discovered_sources) @@ -416,20 +418,6 @@ e_webdav_discover_context_free (gpointer ptr) g_slice_free (EWebDAVDiscoverContext, context); } -static void -e_webdav_discover_source_free (gpointer ptr) -{ - EWebDAVDiscoveredSource *discovered_source = ptr; - - if (discovered_source) { - g_free (discovered_source->href); - g_free (discovered_source->display_name); - g_free (discovered_source->description); - g_free (discovered_source->color); - g_slice_free (EWebDAVDiscoveredSource, discovered_source); - } -} - /** * e_webdav_discover_free_discovered_sources: * @discovered_sources: (element-type EWebDAVDiscoveredSource): A #GSList of discovered sources @@ -442,7 +430,7 @@ e_webdav_discover_source_free (gpointer ptr) void e_webdav_discover_free_discovered_sources (GSList *discovered_sources) { - g_slist_free_full (discovered_sources, e_webdav_discover_source_free); + g_slist_free_full (discovered_sources, (GDestroyNotify) e_webdav_discovered_source_free); } static void @@ -1044,3 +1032,52 @@ e_webdav_discover_sources_full_sync (ESource *source, return success; } + +/** + * e_webdav_discovered_source_copy: + * @discovered_source: an #EWebDAVDiscoveredSource to copy + * + * Copies the given EWebDAVDiscoveredSource. + * + * Returns: (transfer full): a copy of @discovered_source + * + * Since: 3.40 + **/ +EWebDAVDiscoveredSource * +e_webdav_discovered_source_copy (EWebDAVDiscoveredSource *discovered_source) +{ + EWebDAVDiscoveredSource *copy; + + g_return_val_if_fail (discovered_source != NULL, NULL); + + copy = g_slice_new0 (EWebDAVDiscoveredSource); + copy->href = g_strdup (discovered_source->href); + copy->supports = discovered_source->supports; + copy->display_name = g_strdup (discovered_source->display_name); + copy->description = g_strdup (discovered_source->description); + copy->color = g_strdup (discovered_source->color); + + return copy; +} + + +/** + * e_webdav_discovered_source_free: + * @discovered_source: an #EWebDAVDiscoveredSource to free + * + * Frees the @discovered_source. Function does nothing, when it's %NULL. + * + * Since: 3.40 + **/ +void +e_webdav_discovered_source_free (EWebDAVDiscoveredSource *discovered_source) +{ + if (!discovered_source) + return; + + g_clear_pointer (&discovered_source->href, g_free); + g_clear_pointer (&discovered_source->display_name, g_free); + g_clear_pointer (&discovered_source->description, g_free); + g_clear_pointer (&discovered_source->color, g_free); + g_slice_free (EWebDAVDiscoveredSource, discovered_source); +} diff --git a/src/libedataserver/e-webdav-discover.h b/src/libedataserver/e-webdav-discover.h index a7d4cb22b..82392de22 100644 --- a/src/libedataserver/e-webdav-discover.h +++ b/src/libedataserver/e-webdav-discover.h @@ -27,6 +27,8 @@ #include <libedataserver/e-source.h> #include <libedataserver/e-webdav-session.h> +#define E_TYPE_WEBDAV_DISCOVERED_SOURCE (e_webdav_discovered_source_get_type ()) + G_BEGIN_DECLS typedef enum { @@ -78,6 +80,10 @@ gboolean e_webdav_discover_sources_sync (ESource *source, GCancellable *cancellable, GError **error); +GType e_webdav_discovered_source_get_type (void) G_GNUC_CONST; +EWebDAVDiscoveredSource * e_webdav_discovered_source_copy (EWebDAVDiscoveredSource *discovered_source); +void e_webdav_discovered_source_free (EWebDAVDiscoveredSource *discovered_source); + /** * EWebDAVDiscoverRefSourceFunc: * @user_data: user data, as passed to e_webdav_discover_sources_full() or |