[gnome-todo] provider-eds: Implement GtdProvider.refresh
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] provider-eds: Implement GtdProvider.refresh
- Date: Sun, 31 Mar 2019 00:12:49 +0000 (UTC)
commit b87f4479cc1874482fc227e14d2f8e6f1610e271
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Mar 30 21:10:10 2019 -0300
provider-eds: Implement GtdProvider.refresh
Fixes https://gitlab.gnome.org/GNOME/gnome-todo/issues/234
plugins/eds/gtd-provider-eds.c | 76 ++++++++++++++++++++++++++++++++++++++++++
plugins/eds/meson.build | 2 +-
2 files changed, 77 insertions(+), 1 deletion(-)
---
diff --git a/plugins/eds/gtd-provider-eds.c b/plugins/eds/gtd-provider-eds.c
index 76b5b77..06a4eda 100644
--- a/plugins/eds/gtd-provider-eds.c
+++ b/plugins/eds/gtd-provider-eds.c
@@ -46,6 +46,7 @@ typedef struct
GCancellable *cancellable;
gint lazy_load_id;
+ gulong minute_changed_handler_id;
} GtdProviderEdsPrivate;
@@ -239,6 +240,35 @@ out:
g_clear_object (&default_source);
}
+static void
+on_minute_changed_cb (GtdClock *clock,
+ GtdProviderEds *self)
+{
+ gtd_provider_refresh (GTD_PROVIDER (self));
+}
+
+static void
+on_source_refreshed_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (user_data);
+ g_autoptr (GError) error = NULL;
+
+ GTD_ENTRY;
+
+ e_source_registry_refresh_backend_finish (priv->source_registry, result, &error);
+
+ if (error)
+ {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("Error refreshing source: %s", error->message);
+ GTD_RETURN ();
+ }
+
+ GTD_EXIT;
+}
+
#define REPORT_ERROR(title,error) \
G_STMT_START \
if (error) \
@@ -455,6 +485,51 @@ gtd_provider_eds_get_enabled (GtdProvider *provider)
return GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->get_enabled (GTD_PROVIDER_EDS (provider));
}
+static void
+gtd_provider_eds_refresh (GtdProvider *provider)
+{
+ g_autoptr (GHashTable) collections = NULL;
+ GtdProviderEdsPrivate *priv;
+ GtdProviderEds *self;
+ GHashTableIter iter;
+ GtdTaskListEds *list;
+
+ GTD_ENTRY;
+
+ g_return_if_fail (GTD_IS_PROVIDER_EDS (provider));
+
+ self = GTD_PROVIDER_EDS (provider);
+ priv = gtd_provider_eds_get_instance_private (self);
+ collections = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+ g_hash_table_iter_init (&iter, priv->task_lists);
+ while (g_hash_table_iter_next (&iter, (gpointer*) &list, NULL))
+ {
+ g_autoptr (ESource) collection = NULL;
+ ESource *source;
+
+ source = gtd_task_list_eds_get_source (list);
+ collection = e_source_registry_find_extension (priv->source_registry,
+ source,
+ E_SOURCE_EXTENSION_COLLECTION);
+
+ if (!collection || g_hash_table_contains (collections, collection))
+ continue;
+
+ GTD_TRACE_MSG ("Refreshing collection %s", e_source_get_uid (collection));
+
+ e_source_registry_refresh_backend (priv->source_registry,
+ e_source_get_uid (collection),
+ priv->cancellable,
+ on_source_refreshed_cb,
+ g_object_ref (self));
+
+ g_hash_table_add (collections, collection);
+ }
+
+ GTD_EXIT;
+}
+
static GIcon*
gtd_provider_eds_get_icon (GtdProvider *provider)
{
@@ -717,6 +792,7 @@ gtd_provider_iface_init (GtdProviderInterface *iface)
iface->get_provider_type = gtd_provider_eds_get_provider_type;
iface->get_description = gtd_provider_eds_get_description;
iface->get_enabled = gtd_provider_eds_get_enabled;
+ iface->refresh = gtd_provider_eds_refresh;
iface->get_icon = gtd_provider_eds_get_icon;
iface->create_task = gtd_provider_eds_create_task;
iface->update_task = gtd_provider_eds_update_task;
diff --git a/plugins/eds/meson.build b/plugins/eds/meson.build
index 6c5cbb6..ea93346 100644
--- a/plugins/eds/meson.build
+++ b/plugins/eds/meson.build
@@ -9,7 +9,7 @@ plugins_ldflags += ['-Wl,--undefined=gtd_plugin_eds_register_types']
eds_plugin_deps = [
dependency('libecal-1.2', version: '>= 3.13.90'),
- dependency('libedataserver-1.2', version: '>= 3.17.1'),
+ dependency('libedataserver-1.2', version: '>= 3.32.0'),
dependency('libical', version: '>= 0.43'),
]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]