[gnome-todo] eds: Reorganize class hierarchy



commit 9ee327d178c4d7cfa8d75f819fea2813db0b3393
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Jan 18 21:39:46 2018 -0200

    eds: Reorganize class hierarchy
    
    Now GtdProviderEds is the implementer of GtdProvider,
    and we only delegate to the subclasses what's absolutely
    needed.

 plugins/eds/gtd-provider-eds.c   | 399 ++++++++++++++++++++++++++-------------
 plugins/eds/gtd-provider-eds.h   |  38 ++--
 plugins/eds/gtd-provider-goa.c   | 185 +++---------------
 plugins/eds/gtd-provider-local.c | 226 +++-------------------
 4 files changed, 329 insertions(+), 519 deletions(-)
---
diff --git a/plugins/eds/gtd-provider-eds.c b/plugins/eds/gtd-provider-eds.c
index 7a24b20..d097caf 100644
--- a/plugins/eds/gtd-provider-eds.c
+++ b/plugins/eds/gtd-provider-eds.c
@@ -55,10 +55,20 @@ typedef struct _TaskData
 } TaskData;
 
 
-G_DEFINE_TYPE_WITH_PRIVATE (GtdProviderEds, gtd_provider_eds, GTD_TYPE_OBJECT)
+static void          gtd_provider_iface_init                     (GtdProviderInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GtdProviderEds, gtd_provider_eds, GTD_TYPE_OBJECT,
+                         G_ADD_PRIVATE (GtdProviderEds)
+                         G_IMPLEMENT_INTERFACE (GTD_TYPE_PROVIDER, gtd_provider_iface_init))
 
 enum {
   PROP_0,
+  PROP_ENABLED,
+  PROP_DEFAULT_TASKLIST,
+  PROP_DESCRIPTION,
+  PROP_ICON,
+  PROP_ID,
+  PROP_NAME,
   PROP_REGISTRY,
   N_PROPS
 };
@@ -458,41 +468,6 @@ out:
   g_clear_object (&default_source);
 }
 
-static void
-gtd_provider_eds_finalize (GObject *object)
-{
-  GtdProviderEds *self = (GtdProviderEds *)object;
-  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (self);
-
-  g_signal_handlers_disconnect_by_func (priv->source_registry, default_tasklist_changed_cb, self);
-
-  g_clear_pointer (&priv->clients, g_hash_table_destroy);
-  g_clear_object (&priv->credentials_prompter);
-  g_clear_object (&priv->source_registry);
-
-  G_OBJECT_CLASS (gtd_provider_eds_parent_class)->finalize (object);
-}
-
-static void
-gtd_provider_eds_get_property (GObject    *object,
-                               guint       prop_id,
-                               GValue     *value,
-                               GParamSpec *pspec)
-{
-  GtdProviderEds *self = GTD_PROVIDER_EDS (object);
-  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (self);
-
-  switch (prop_id)
-    {
-    case PROP_REGISTRY:
-      g_value_set_object (value, priv->source_registry);
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-    }
-}
-
 static void
 gtd_provider_eds_load_registry (GtdProviderEds  *provider)
 {
@@ -810,83 +785,58 @@ gtd_provider_eds_commit_source_finished (GObject      *registry,
     }
 }
 
-static void
-gtd_provider_eds_set_property (GObject      *object,
-                               guint         prop_id,
-                               const GValue *value,
-                               GParamSpec   *pspec)
-{
-  GtdProviderEds *self = GTD_PROVIDER_EDS (object);
 
-  switch (prop_id)
-    {
-    case PROP_REGISTRY:
-      gtd_provider_eds_set_registry (self, g_value_get_object (value));
-      break;
+/*
+ * GtdProvider iface
+ */
 
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-    }
+static const gchar*
+gtd_provider_eds_get_id (GtdProvider *provider)
+{
+  g_return_val_if_fail (GTD_IS_PROVIDER_EDS (provider), NULL);
+
+  return GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->get_id (GTD_PROVIDER_EDS (provider));
 }
 
-static void
-gtd_provider_eds_class_init (GtdProviderEdsClass *klass)
+static const gchar*
+gtd_provider_eds_get_name (GtdProvider *provider)
 {
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  object_class->finalize = gtd_provider_eds_finalize;
-  object_class->get_property = gtd_provider_eds_get_property;
-  object_class->set_property = gtd_provider_eds_set_property;
+  g_return_val_if_fail (GTD_IS_PROVIDER_EDS (provider), NULL);
 
-  g_object_class_install_property (object_class,
-                                   PROP_REGISTRY,
-                                   g_param_spec_object ("registry",
-                                                        "Source registry",
-                                                        "The EDS source registry object",
-                                                        E_TYPE_SOURCE_REGISTRY,
-                                                        G_PARAM_READABLE | G_PARAM_WRITABLE | 
G_PARAM_CONSTRUCT_ONLY));
+  return GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->get_name (GTD_PROVIDER_EDS (provider));
 }
 
-static void
-gtd_provider_eds_init (GtdProviderEds *self)
+static const gchar*
+gtd_provider_eds_get_description (GtdProvider *provider)
 {
-  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (self);
-
-  /* While it's not ready, we don't load tasklists */
-  gtd_object_set_ready (GTD_OBJECT (self), FALSE);
+  g_return_val_if_fail (GTD_IS_PROVIDER_EDS (provider), NULL);
 
-  /* hash table */
-  priv->clients = g_hash_table_new_full ((GHashFunc) e_source_hash,
-                                         (GEqualFunc) e_source_equal,
-                                         g_object_unref,
-                                         g_object_unref);
+  return GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->get_description (GTD_PROVIDER_EDS 
(provider));
 }
 
-GtdProviderEds*
-gtd_provider_eds_new (ESourceRegistry *registry)
+
+static gboolean
+gtd_provider_eds_get_enabled (GtdProvider *provider)
 {
-  return g_object_new (GTD_TYPE_PROVIDER_EDS,
-                       "registry", registry,
-                       NULL);
+  g_return_val_if_fail (GTD_IS_PROVIDER_EDS (provider), FALSE);
+
+  return GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->get_enabled (GTD_PROVIDER_EDS (provider));
 }
 
-ESourceRegistry*
-gtd_provider_eds_get_registry (GtdProviderEds *provider)
+static GIcon*
+gtd_provider_eds_get_icon (GtdProvider *provider)
 {
-  GtdProviderEdsPrivate *priv;
-
   g_return_val_if_fail (GTD_IS_PROVIDER_EDS (provider), NULL);
 
-  priv = gtd_provider_eds_get_instance_private (provider);
-
-  return priv->source_registry;
+  return GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->get_icon (GTD_PROVIDER_EDS (provider));
 }
 
-void
-gtd_provider_eds_create_task (GtdProviderEds *provider,
-                              GtdTask        *task)
+static void
+gtd_provider_eds_create_task (GtdProvider *provider,
+                              GtdTask     *task)
 {
   GtdProviderEdsPrivate *priv;
+  GtdProviderEds *self;
   GtdTaskListEds *tasklist;
   ECalComponent *component;
   ECalClient *client;
@@ -896,14 +846,15 @@ gtd_provider_eds_create_task (GtdProviderEds *provider,
   g_return_if_fail (GTD_IS_TASK (task));
   g_return_if_fail (GTD_IS_TASK_LIST_EDS (gtd_task_get_list (task)));
 
-  priv = gtd_provider_eds_get_instance_private (provider);
+  self = GTD_PROVIDER_EDS (provider);
+  priv = gtd_provider_eds_get_instance_private (self);
   tasklist = GTD_TASK_LIST_EDS (gtd_task_get_list (task));
   source = gtd_task_list_eds_get_source (tasklist);
   client = g_hash_table_lookup (priv->clients, source);
   component = gtd_task_eds_get_component (GTD_TASK_EDS (task));
 
   /* Temporary data for async operation */
-  data = task_data_new (provider, (gpointer) task);
+  data = task_data_new (self, (gpointer) task);
 
   /* The task is not ready until we finish the operation */
   gtd_object_set_ready (GTD_OBJECT (task), FALSE);
@@ -915,11 +866,12 @@ gtd_provider_eds_create_task (GtdProviderEds *provider,
                               data);
 }
 
-void
-gtd_provider_eds_update_task (GtdProviderEds *provider,
-                              GtdTask        *task)
+static void
+gtd_provider_eds_update_task (GtdProvider *provider,
+                              GtdTask     *task)
 {
   GtdProviderEdsPrivate *priv;
+  GtdProviderEds *self;
   GtdTaskListEds *tasklist;
   ECalComponent *component;
   ECalClient *client;
@@ -929,7 +881,8 @@ gtd_provider_eds_update_task (GtdProviderEds *provider,
   g_return_if_fail (GTD_IS_TASK (task));
   g_return_if_fail (GTD_IS_TASK_LIST_EDS (gtd_task_get_list (task)));
 
-  priv = gtd_provider_eds_get_instance_private (provider);
+  self = GTD_PROVIDER_EDS (provider);
+  priv = gtd_provider_eds_get_instance_private (self);
   tasklist = GTD_TASK_LIST_EDS (gtd_task_get_list (task));
   source = gtd_task_list_eds_get_source (tasklist);
   client = g_hash_table_lookup (priv->clients, source);
@@ -938,7 +891,7 @@ gtd_provider_eds_update_task (GtdProviderEds *provider,
   e_cal_component_commit_sequence (component);
 
   /* Temporary data for async operation */
-  data = task_data_new (provider, (gpointer) task);
+  data = task_data_new (self, (gpointer) task);
 
   /* The task is not ready until we finish the operation */
   gtd_object_set_ready (GTD_OBJECT (task), FALSE);
@@ -951,15 +904,16 @@ gtd_provider_eds_update_task (GtdProviderEds *provider,
                               data);
 }
 
-void
-gtd_provider_eds_remove_task (GtdProviderEds *provider,
-                              GtdTask        *task)
+static void
+gtd_provider_eds_remove_task (GtdProvider *provider,
+                              GtdTask     *task)
 {
 
   GtdProviderEdsPrivate *priv;
-  ECalComponent *component;
-  GtdTaskListEds *tasklist;
   ECalComponentId *id;
+  GtdProviderEds *self;
+  GtdTaskListEds *tasklist;
+  ECalComponent *component;
   ECalClient *client;
   TaskData *data;
   ESource *source;
@@ -967,7 +921,8 @@ gtd_provider_eds_remove_task (GtdProviderEds *provider,
   g_return_if_fail (GTD_IS_TASK (task));
   g_return_if_fail (GTD_IS_TASK_LIST_EDS (gtd_task_get_list (task)));
 
-  priv = gtd_provider_eds_get_instance_private (provider);
+  self = GTD_PROVIDER_EDS (provider);
+  priv = gtd_provider_eds_get_instance_private (self);
   tasklist = GTD_TASK_LIST_EDS (gtd_task_get_list (task));
   source = gtd_task_list_eds_get_source (tasklist);
   client = g_hash_table_lookup (priv->clients, source);
@@ -975,7 +930,7 @@ gtd_provider_eds_remove_task (GtdProviderEds *provider,
   id = e_cal_component_get_id (component);
 
   /* Temporary data for async operation */
-  data = task_data_new (provider, (gpointer) task);
+  data = task_data_new (self, (gpointer) task);
 
   /* The task is not ready until we finish the operation */
   gtd_object_set_ready (GTD_OBJECT (task), FALSE);
@@ -991,18 +946,26 @@ gtd_provider_eds_remove_task (GtdProviderEds *provider,
   e_cal_component_free_id (id);
 }
 
-void
-gtd_provider_eds_create_task_list (GtdProviderEds *provider,
-                                   GtdTaskList    *list)
+static void
+gtd_provider_eds_create_task_list (GtdProvider *provider,
+                                   GtdTaskList *list)
 {
   GtdProviderEdsPrivate *priv;
-  ESource *source;
+  GtdProviderEds *self;
+  ESource *source = NULL;
 
-  g_return_if_fail (GTD_IS_TASK_LIST_EDS (list));
-  g_return_if_fail (gtd_task_list_eds_get_source (GTD_TASK_LIST_EDS (list)));
+  self = GTD_PROVIDER_EDS (provider);
+  priv = gtd_provider_eds_get_instance_private (self);
 
-  priv = gtd_provider_eds_get_instance_private (provider);
-  source = gtd_task_list_eds_get_source (GTD_TASK_LIST_EDS (list));
+  /* Create an ESource */
+  if (GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->create_source)
+    source = GTD_PROVIDER_EDS_CLASS (G_OBJECT_GET_CLASS (provider))->create_source (self);
+
+  if (!source)
+    return;
+
+  /* EDS properties */
+  e_source_set_display_name (source, gtd_task_list_get_name (list));
 
   gtd_object_set_ready (GTD_OBJECT (provider), FALSE);
   e_source_registry_commit_source (priv->source_registry,
@@ -1027,9 +990,9 @@ gtd_provider_eds_create_task_list (GtdProviderEds *provider,
     }
 }
 
-void
-gtd_provider_eds_update_task_list (GtdProviderEds *provider,
-                                   GtdTaskList    *list)
+static void
+gtd_provider_eds_update_task_list (GtdProvider *provider,
+                                   GtdTaskList *list)
 {
 
   GtdProviderEdsPrivate *priv;
@@ -1038,7 +1001,7 @@ gtd_provider_eds_update_task_list (GtdProviderEds *provider,
   g_return_if_fail (GTD_IS_TASK_LIST (list));
   g_return_if_fail (gtd_task_list_eds_get_source (GTD_TASK_LIST_EDS (list)));
 
-  priv = gtd_provider_eds_get_instance_private (provider);
+  priv = gtd_provider_eds_get_instance_private (GTD_PROVIDER_EDS (provider));
   source = gtd_task_list_eds_get_source (GTD_TASK_LIST_EDS (list));
 
   gtd_object_set_ready (GTD_OBJECT (provider), FALSE);
@@ -1047,11 +1010,13 @@ gtd_provider_eds_update_task_list (GtdProviderEds *provider,
                                    NULL,
                                    (GAsyncReadyCallback) gtd_provider_eds_commit_source_finished,
                                    provider);
+
+  g_signal_emit_by_name (provider, "list-changed", list);
 }
 
-void
-gtd_provider_eds_remove_task_list (GtdProviderEds *provider,
-                                   GtdTaskList    *list)
+static void
+gtd_provider_eds_remove_task_list (GtdProvider *provider,
+                                   GtdTaskList *list)
 {
   ESource *source;
 
@@ -1076,24 +1041,26 @@ gtd_provider_eds_remove_task_list (GtdProviderEds *provider,
                        (GAsyncReadyCallback) gtd_provider_eds_remove_source_finished,
                        provider);
     }
+
+  g_signal_emit_by_name (provider, "list-removed", list);
 }
 
-GList*
-gtd_provider_eds_get_task_lists (GtdProviderEds *provider)
+static GList*
+gtd_provider_eds_get_task_lists (GtdProvider *provider)
 {
-  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (provider);
+  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (GTD_PROVIDER_EDS (provider));
 
   return priv->task_lists;
 }
 
-GtdTaskList*
-gtd_provider_eds_get_default_task_list (GtdProviderEds *provider)
+static GtdTaskList*
+gtd_provider_eds_get_default_task_list (GtdProvider *provider)
 {
   GtdProviderEdsPrivate *priv;
   GtdTaskList *default_task_list;
   ESource *default_source;
 
-  priv = gtd_provider_eds_get_instance_private (provider);
+  priv = gtd_provider_eds_get_instance_private (GTD_PROVIDER_EDS (provider));
   default_source = e_source_registry_ref_default_task_list (priv->source_registry);
   default_task_list = g_object_get_data (G_OBJECT (default_source), "task-list");
 
@@ -1108,14 +1075,14 @@ gtd_provider_eds_get_default_task_list (GtdProviderEds *provider)
   return default_task_list;
 }
 
-void
-gtd_provider_eds_set_default_task_list (GtdProviderEds *provider,
-                                        GtdTaskList    *list)
+static void
+gtd_provider_eds_set_default_task_list (GtdProvider *provider,
+                                        GtdTaskList *list)
 {
   GtdProviderEdsPrivate *priv;
   ESource *source;
 
-  priv = gtd_provider_eds_get_instance_private (provider);
+  priv = gtd_provider_eds_get_instance_private (GTD_PROVIDER_EDS (provider));
   source = g_object_get_data (G_OBJECT (list), "task-list");
 
   e_source_registry_set_default_task_list (priv->source_registry, source);
@@ -1123,8 +1090,8 @@ gtd_provider_eds_set_default_task_list (GtdProviderEds *provider,
   g_object_notify (G_OBJECT (provider), "default-task-list");
 }
 
-GtdTask*
-gtd_provider_eds_generate_task (GtdProviderEds *self)
+static GtdTask*
+gtd_provider_eds_generate_task (GtdProvider *self)
 {
   ECalComponent *component;
   GtdTask *task;
@@ -1138,3 +1105,171 @@ gtd_provider_eds_generate_task (GtdProviderEds *self)
 
   return task;
 }
+
+static void
+gtd_provider_iface_init (GtdProviderInterface *iface)
+{
+  iface->get_id = gtd_provider_eds_get_id;
+  iface->get_name = gtd_provider_eds_get_name;
+  iface->get_description = gtd_provider_eds_get_description;
+  iface->get_enabled = gtd_provider_eds_get_enabled;
+  iface->get_icon = gtd_provider_eds_get_icon;
+  iface->create_task = gtd_provider_eds_create_task;
+  iface->update_task = gtd_provider_eds_update_task;
+  iface->remove_task = gtd_provider_eds_remove_task;
+  iface->create_task_list = gtd_provider_eds_create_task_list;
+  iface->update_task_list = gtd_provider_eds_update_task_list;
+  iface->remove_task_list = gtd_provider_eds_remove_task_list;
+  iface->get_task_lists = gtd_provider_eds_get_task_lists;
+  iface->get_default_task_list = gtd_provider_eds_get_default_task_list;
+  iface->set_default_task_list = gtd_provider_eds_set_default_task_list;
+  iface->generate_task = gtd_provider_eds_generate_task;
+}
+
+
+/*
+ * GObject overrides
+ */
+
+static void
+gtd_provider_eds_finalize (GObject *object)
+{
+  GtdProviderEds *self = (GtdProviderEds *)object;
+  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (self);
+
+  g_signal_handlers_disconnect_by_func (priv->source_registry, default_tasklist_changed_cb, self);
+
+  g_clear_pointer (&priv->clients, g_hash_table_destroy);
+  g_clear_object (&priv->credentials_prompter);
+  g_clear_object (&priv->source_registry);
+
+  G_OBJECT_CLASS (gtd_provider_eds_parent_class)->finalize (object);
+}
+
+static void
+gtd_provider_eds_get_property (GObject    *object,
+                               guint       prop_id,
+                               GValue     *value,
+                               GParamSpec *pspec)
+{
+  GtdProvider *provider = GTD_PROVIDER (object);
+  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (GTD_PROVIDER_EDS (object));
+
+
+  switch (prop_id)
+    {
+    case PROP_DEFAULT_TASKLIST:
+      g_value_set_object (value, gtd_provider_eds_get_default_task_list (provider));
+      break;
+
+    case PROP_DESCRIPTION:
+      g_value_set_string (value, gtd_provider_eds_get_description (provider));
+      break;
+
+    case PROP_ENABLED:
+      g_value_set_boolean (value, gtd_provider_eds_get_enabled (provider));
+      break;
+
+    case PROP_ICON:
+      g_value_set_object (value, gtd_provider_eds_get_icon (provider));
+      break;
+
+    case PROP_ID:
+      g_value_set_string (value, gtd_provider_eds_get_id (provider));
+      break;
+
+    case PROP_NAME:
+      g_value_set_string (value, gtd_provider_eds_get_name (provider));
+      break;
+
+    case PROP_REGISTRY:
+      g_value_set_object (value, priv->source_registry);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+gtd_provider_eds_set_property (GObject      *object,
+                               guint         prop_id,
+                               const GValue *value,
+                               GParamSpec   *pspec)
+{
+  GtdProviderEds *self = GTD_PROVIDER_EDS (object);
+
+  switch (prop_id)
+    {
+    case PROP_DEFAULT_TASKLIST:
+      gtd_provider_eds_set_default_task_list (GTD_PROVIDER (self), g_value_get_object (value));
+      break;
+
+    case PROP_REGISTRY:
+      gtd_provider_eds_set_registry (self, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+gtd_provider_eds_class_init (GtdProviderEdsClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = gtd_provider_eds_finalize;
+  object_class->get_property = gtd_provider_eds_get_property;
+  object_class->set_property = gtd_provider_eds_set_property;
+
+  g_object_class_override_property (object_class, PROP_DEFAULT_TASKLIST, "default-task-list");
+  g_object_class_override_property (object_class, PROP_DESCRIPTION, "description");
+  g_object_class_override_property (object_class, PROP_ENABLED, "enabled");
+  g_object_class_override_property (object_class, PROP_ICON, "icon");
+  g_object_class_override_property (object_class, PROP_ID, "id");
+  g_object_class_override_property (object_class, PROP_NAME, "name");
+
+  g_object_class_install_property (object_class,
+                                   PROP_REGISTRY,
+                                   g_param_spec_object ("registry",
+                                                        "Source registry",
+                                                        "The EDS source registry object",
+                                                        E_TYPE_SOURCE_REGISTRY,
+                                                        G_PARAM_READABLE | G_PARAM_WRITABLE | 
G_PARAM_CONSTRUCT_ONLY));
+}
+
+static void
+gtd_provider_eds_init (GtdProviderEds *self)
+{
+  GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (self);
+
+  /* While it's not ready, we don't load tasklists */
+  gtd_object_set_ready (GTD_OBJECT (self), FALSE);
+
+  /* hash table */
+  priv->clients = g_hash_table_new_full ((GHashFunc) e_source_hash,
+                                         (GEqualFunc) e_source_equal,
+                                         g_object_unref,
+                                         g_object_unref);
+}
+
+GtdProviderEds*
+gtd_provider_eds_new (ESourceRegistry *registry)
+{
+  return g_object_new (GTD_TYPE_PROVIDER_EDS,
+                       "registry", registry,
+                       NULL);
+}
+
+ESourceRegistry*
+gtd_provider_eds_get_registry (GtdProviderEds *provider)
+{
+  GtdProviderEdsPrivate *priv;
+
+  g_return_val_if_fail (GTD_IS_PROVIDER_EDS (provider), NULL);
+
+  priv = gtd_provider_eds_get_instance_private (provider);
+
+  return priv->source_registry;
+}
diff --git a/plugins/eds/gtd-provider-eds.h b/plugins/eds/gtd-provider-eds.h
index 59c8226..402db2c 100644
--- a/plugins/eds/gtd-provider-eds.h
+++ b/plugins/eds/gtd-provider-eds.h
@@ -35,41 +35,25 @@ struct _GtdProviderEdsClass
 {
   GtdObjectClass parent;
 
-  gboolean           (*should_load_source)                       (GtdProviderEds     *provider,
-                                                                  ESource            *source);
-};
-
-GtdProviderEds*      gtd_provider_eds_new                        (ESourceRegistry    *registry);
-
-ESourceRegistry*     gtd_provider_eds_get_registry               (GtdProviderEds     *local);
-
-void                 gtd_provider_eds_create_task                (GtdProviderEds     *provider,
-                                                                  GtdTask            *task);
+  const gchar*       (*get_id)                                   (GtdProviderEds     *self);
 
-void                 gtd_provider_eds_update_task                (GtdProviderEds     *provider,
-                                                                  GtdTask            *task);
+  const gchar*       (*get_name)                                 (GtdProviderEds     *self);
 
-void                 gtd_provider_eds_remove_task                (GtdProviderEds     *provider,
-                                                                  GtdTask            *task);
+  const gchar*       (*get_description)                          (GtdProviderEds     *self);
 
-void                 gtd_provider_eds_create_task_list           (GtdProviderEds     *provider,
-                                                                  GtdTaskList        *list);
+  gboolean           (*get_enabled)                              (GtdProviderEds     *self);
 
-void                 gtd_provider_eds_update_task_list           (GtdProviderEds     *provider,
-                                                                  GtdTaskList        *list);
+  GIcon*             (*get_icon)                                 (GtdProviderEds     *self);
 
-void                 gtd_provider_eds_remove_task_list           (GtdProviderEds     *provider,
-                                                                  GtdTaskList        *list);
+  ESource*           (*create_source)                            (GtdProviderEds     *self);
 
-GList*               gtd_provider_eds_get_task_lists             (GtdProviderEds     *provider);
-
-GtdTaskList*         gtd_provider_eds_get_default_task_list      (GtdProviderEds     *provider);
-
-void                 gtd_provider_eds_set_default_task_list      (GtdProviderEds     *provider,
-                                                                  GtdTaskList        *list);
+  gboolean           (*should_load_source)                       (GtdProviderEds     *provider,
+                                                                  ESource            *source);
+};
 
-GtdTask*             gtd_provider_eds_generate_task              (GtdProviderEds     *self);
+GtdProviderEds*      gtd_provider_eds_new                        (ESourceRegistry    *registry);
 
+ESourceRegistry*     gtd_provider_eds_get_registry               (GtdProviderEds     *local);
 G_END_DECLS
 
 #endif /* GTD_PROVIDER_EDS_H */
diff --git a/plugins/eds/gtd-provider-goa.c b/plugins/eds/gtd-provider-goa.c
index 9641130..708ff42 100644
--- a/plugins/eds/gtd-provider-goa.c
+++ b/plugins/eds/gtd-provider-goa.c
@@ -33,171 +33,58 @@ struct _GtdProviderGoa
   gchar                  *id;
 };
 
-static void          gtd_provider_iface_init                     (GtdProviderInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (GtdProviderGoa, gtd_provider_goa, GTD_TYPE_PROVIDER_EDS,
-                         G_IMPLEMENT_INTERFACE (GTD_TYPE_PROVIDER,
-                                                gtd_provider_iface_init))
+G_DEFINE_TYPE (GtdProviderGoa, gtd_provider_goa, GTD_TYPE_PROVIDER_EDS)
 
 enum {
   PROP_0,
   PROP_ACCOUNT,
-  PROP_DEFAULT_TASKLIST,
-  PROP_DESCRIPTION,
-  PROP_ENABLED,
-  PROP_ICON,
-  PROP_ID,
-  PROP_NAME,
   N_PROPS
 };
 
 /*
- * GtdProviderInterface implementation
+ * GtdProviderEds overrides
  */
+
 static const gchar*
-gtd_provider_goa_get_id (GtdProvider *provider)
+gtd_provider_goa_get_id (GtdProviderEds *provider)
 {
-  GtdProviderGoa *self;
-
-  self = GTD_PROVIDER_GOA (provider);
+  GtdProviderGoa *self = GTD_PROVIDER_GOA (provider);
 
   return self->id;
 }
 
 static const gchar*
-gtd_provider_goa_get_name (GtdProvider *provider)
+gtd_provider_goa_get_name (GtdProviderEds *provider)
 {
-  GtdProviderGoa *self;
-
-  self = GTD_PROVIDER_GOA (provider);
+  GtdProviderGoa *self = GTD_PROVIDER_GOA (provider);
 
   return goa_account_get_provider_name (self->account);
 }
 
 static const gchar*
-gtd_provider_goa_get_description (GtdProvider *provider)
+gtd_provider_goa_get_description (GtdProviderEds *provider)
 {
-  GtdProviderGoa *self;
-
-  self = GTD_PROVIDER_GOA (provider);
+  GtdProviderGoa *self = GTD_PROVIDER_GOA (provider);
 
   return goa_account_get_identity (self->account);
 }
 
-
 static gboolean
-gtd_provider_goa_get_enabled (GtdProvider *provider)
+gtd_provider_goa_get_enabled (GtdProviderEds *provider)
 {
-  GtdProviderGoa *self;
-
-  self = GTD_PROVIDER_GOA (provider);
+  GtdProviderGoa *self = GTD_PROVIDER_GOA (provider);
 
   return !goa_account_get_calendar_disabled (self->account);
 }
 
 static GIcon*
-gtd_provider_goa_get_icon (GtdProvider *provider)
+gtd_provider_goa_get_icon (GtdProviderEds *provider)
 {
-  GtdProviderGoa *self;
-
-  self = GTD_PROVIDER_GOA (provider);
+  GtdProviderGoa *self = GTD_PROVIDER_GOA (provider);
 
   return self->icon;
 }
 
-static void
-gtd_provider_goa_create_task (GtdProvider *provider,
-                              GtdTask     *task)
-{
-  gtd_provider_eds_create_task (GTD_PROVIDER_EDS (provider), task);
-}
-
-static void
-gtd_provider_goa_update_task (GtdProvider *provider,
-                              GtdTask     *task)
-{
-  gtd_provider_eds_update_task (GTD_PROVIDER_EDS (provider), task);
-}
-
-static void
-gtd_provider_goa_remove_task (GtdProvider *provider,
-                              GtdTask     *task)
-{
-  gtd_provider_eds_remove_task (GTD_PROVIDER_EDS (provider), task);
-}
-
-static void
-gtd_provider_goa_create_task_list (GtdProvider *provider,
-                                   GtdTaskList *list)
-{
-  gtd_provider_eds_create_task_list (GTD_PROVIDER_EDS (provider), list);
-
-  g_signal_emit_by_name (provider, "list-added", list);
-}
-
-static void
-gtd_provider_goa_update_task_list (GtdProvider *provider,
-                                   GtdTaskList *list)
-{
-  gtd_provider_eds_update_task_list (GTD_PROVIDER_EDS (provider), list);
-
-  g_signal_emit_by_name (provider, "list-changed", list);
-}
-
-static void
-gtd_provider_goa_remove_task_list (GtdProvider *provider,
-                                   GtdTaskList *list)
-{
-  gtd_provider_eds_remove_task_list (GTD_PROVIDER_EDS (provider), list);
-
-  g_signal_emit_by_name (provider, "list-removed", list);
-}
-
-static GList*
-gtd_provider_goa_get_task_lists (GtdProvider *provider)
-{
-  return gtd_provider_eds_get_task_lists (GTD_PROVIDER_EDS (provider));
-}
-
-static GtdTaskList*
-gtd_provider_goa_get_default_task_list (GtdProvider *provider)
-{
-  return gtd_provider_eds_get_default_task_list (GTD_PROVIDER_EDS (provider));
-}
-
-static void
-gtd_provider_goa_set_default_task_list (GtdProvider *provider,
-                                        GtdTaskList *list)
-{
-  gtd_provider_eds_set_default_task_list (GTD_PROVIDER_EDS (provider), list);
-}
-
-static GtdTask*
-gtd_provider_goa_generate_task (GtdProvider *provider)
-{
-  return gtd_provider_eds_generate_task (GTD_PROVIDER_EDS (provider));
-}
-
-static void
-gtd_provider_iface_init (GtdProviderInterface *iface)
-{
-  iface->get_id = gtd_provider_goa_get_id;
-  iface->get_name = gtd_provider_goa_get_name;
-  iface->get_description = gtd_provider_goa_get_description;
-  iface->get_enabled = gtd_provider_goa_get_enabled;
-  iface->get_icon = gtd_provider_goa_get_icon;
-  iface->create_task = gtd_provider_goa_create_task;
-  iface->update_task = gtd_provider_goa_update_task;
-  iface->remove_task = gtd_provider_goa_remove_task;
-  iface->create_task_list = gtd_provider_goa_create_task_list;
-  iface->update_task_list = gtd_provider_goa_update_task_list;
-  iface->remove_task_list = gtd_provider_goa_remove_task_list;
-  iface->get_task_lists = gtd_provider_goa_get_task_lists;
-  iface->get_default_task_list = gtd_provider_goa_get_default_task_list;
-  iface->set_default_task_list = gtd_provider_goa_set_default_task_list;
-  iface->generate_task = gtd_provider_goa_generate_task;
-}
-
 static void
 gtd_provider_goa_set_account (GtdProviderGoa *provider,
                               GoaAccount     *account)
@@ -230,6 +117,11 @@ gtd_provider_goa_set_account (GtdProviderGoa *provider,
     }
 }
 
+
+/*
+ * GObject overrides
+ */
+
 static void
 gtd_provider_goa_finalize (GObject *object)
 {
@@ -250,7 +142,6 @@ gtd_provider_goa_get_property (GObject    *object,
                                GParamSpec *pspec)
 {
   GtdProviderGoa *self = GTD_PROVIDER_GOA (object);
-  GtdProvider *provider = GTD_PROVIDER (object);
 
   switch (prop_id)
     {
@@ -259,30 +150,6 @@ gtd_provider_goa_get_property (GObject    *object,
       g_value_set_object (value, self->account);
       break;
 
-    case PROP_DEFAULT_TASKLIST:
-      g_value_set_object (value, gtd_provider_goa_get_default_task_list (provider));
-      break;
-
-    case PROP_DESCRIPTION:
-      g_value_set_string (value, gtd_provider_goa_get_description (provider));
-      break;
-
-    case PROP_ENABLED:
-      g_value_set_boolean (value, gtd_provider_goa_get_enabled (provider));
-      break;
-
-    case PROP_ICON:
-      g_value_set_object (value, gtd_provider_goa_get_icon (provider));
-      break;
-
-    case PROP_ID:
-      g_value_set_string (value, gtd_provider_goa_get_id (provider));
-      break;
-
-    case PROP_NAME:
-      g_value_set_string (value, gtd_provider_goa_get_name (provider));
-      break;
-
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -302,10 +169,6 @@ gtd_provider_goa_set_property (GObject      *object,
       gtd_provider_goa_set_account (self, g_value_get_object (value));
       break;
 
-    case PROP_DEFAULT_TASKLIST:
-      gtd_provider_goa_set_default_task_list (GTD_PROVIDER (self), g_value_get_object (value));
-      break;
-
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -360,19 +223,17 @@ gtd_provider_goa_class_init (GtdProviderGoaClass *klass)
   GtdProviderEdsClass *eds_class = GTD_PROVIDER_EDS_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  eds_class->get_id = gtd_provider_goa_get_id;
+  eds_class->get_name = gtd_provider_goa_get_name;
+  eds_class->get_description = gtd_provider_goa_get_description;
+  eds_class->get_enabled = gtd_provider_goa_get_enabled;
+  eds_class->get_icon = gtd_provider_goa_get_icon;
   eds_class->should_load_source = gtd_provider_goa_should_load_source;
 
   object_class->finalize = gtd_provider_goa_finalize;
   object_class->get_property = gtd_provider_goa_get_property;
   object_class->set_property = gtd_provider_goa_set_property;
 
-  g_object_class_override_property (object_class, PROP_DEFAULT_TASKLIST, "default-task-list");
-  g_object_class_override_property (object_class, PROP_DESCRIPTION, "description");
-  g_object_class_override_property (object_class, PROP_ENABLED, "enabled");
-  g_object_class_override_property (object_class, PROP_ICON, "icon");
-  g_object_class_override_property (object_class, PROP_ID, "id");
-  g_object_class_override_property (object_class, PROP_NAME, "name");
-
   g_object_class_install_property (object_class,
                                    PROP_ACCOUNT,
                                    g_param_spec_object ("account",
diff --git a/plugins/eds/gtd-provider-local.c b/plugins/eds/gtd-provider-local.c
index 1ff1fdb..333f3e6 100644
--- a/plugins/eds/gtd-provider-local.c
+++ b/plugins/eds/gtd-provider-local.c
@@ -31,88 +31,49 @@ struct _GtdProviderLocal
   GList                  *tasklists;
 };
 
-static void          gtd_provider_iface_init                     (GtdProviderInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (GtdProviderLocal, gtd_provider_local, GTD_TYPE_PROVIDER_EDS,
-                         G_IMPLEMENT_INTERFACE (GTD_TYPE_PROVIDER,
-                                                gtd_provider_iface_init))
-
-enum {
-  PROP_0,
-  PROP_ENABLED,
-  PROP_DEFAULT_TASKLIST,
-  PROP_DESCRIPTION,
-  PROP_ICON,
-  PROP_ID,
-  PROP_NAME,
-  LAST_PROP
-};
+G_DEFINE_TYPE (GtdProviderLocal, gtd_provider_local, GTD_TYPE_PROVIDER_EDS)
+
 
 /*
- * GtdProviderInterface implementation
+ * GtdProviderEds overrides
  */
+
 static const gchar*
-gtd_provider_local_get_id (GtdProvider *provider)
+gtd_provider_local_get_id (GtdProviderEds *provider)
 {
   return "local";
 }
 
 static const gchar*
-gtd_provider_local_get_name (GtdProvider *provider)
+gtd_provider_local_get_name (GtdProviderEds *provider)
 {
   return _("Local");
 }
 
 static const gchar*
-gtd_provider_local_get_description (GtdProvider *provider)
+gtd_provider_local_get_description (GtdProviderEds *provider)
 {
   return _("On This Computer");
 }
 
-
 static gboolean
-gtd_provider_local_get_enabled (GtdProvider *provider)
+gtd_provider_local_get_enabled (GtdProviderEds *provider)
 {
   return TRUE;
 }
 
 static GIcon*
-gtd_provider_local_get_icon (GtdProvider *provider)
+gtd_provider_local_get_icon (GtdProviderEds *provider)
 {
-  GtdProviderLocal *self;
-
-  self = GTD_PROVIDER_LOCAL (provider);
+  GtdProviderLocal *self = GTD_PROVIDER_LOCAL (provider);
 
   return self->icon;
 }
 
-static void
-gtd_provider_local_create_task (GtdProvider *provider,
-                                GtdTask     *task)
-{
-  gtd_provider_eds_create_task (GTD_PROVIDER_EDS (provider), task);
-}
-
-static void
-gtd_provider_local_update_task (GtdProvider *provider,
-                                GtdTask     *task)
-{
-  gtd_provider_eds_update_task (GTD_PROVIDER_EDS (provider), task);
-}
-
-static void
-gtd_provider_local_remove_task (GtdProvider *provider,
-                                GtdTask     *task)
-{
-  gtd_provider_eds_remove_task (GTD_PROVIDER_EDS (provider), task);
-}
-
-static void
-gtd_provider_local_create_task_list (GtdProvider *provider,
-                                     GtdTaskList *list)
+static ESource*
+gtd_provider_local_create_source (GtdProviderEds *provider)
 {
   ESourceExtension *extension;
-  GtdTaskListEds *eds_list;
   ESource *source;
   GError *error;
 
@@ -137,93 +98,16 @@ gtd_provider_local_create_task_list (GtdProvider *provider,
                                       NULL);
 
       g_clear_error (&error);
-      return;
+      return NULL;
     }
 
-  /* EDS properties */
-  e_source_set_display_name (source, gtd_task_list_get_name (list));
-
   /* Make it a local source */
   extension = e_source_get_extension (source, E_SOURCE_EXTENSION_TASK_LIST);
 
   e_source_set_parent (source, "local-stub");
   e_source_backend_set_backend_name (E_SOURCE_BACKEND (extension), "local");
 
-  /* EDS Task list */
-  eds_list = gtd_task_list_eds_new (provider, source);
-
-  gtd_provider_eds_create_task_list (GTD_PROVIDER_EDS (provider), GTD_TASK_LIST (eds_list));
-}
-
-static void
-gtd_provider_local_update_task_list (GtdProvider *provider,
-                                     GtdTaskList *list)
-{
-  gtd_provider_eds_update_task_list (GTD_PROVIDER_EDS (provider), list);
-
-  g_signal_emit_by_name (provider, "list-changed", list);
-}
-
-static void
-gtd_provider_local_remove_task_list (GtdProvider *provider,
-                                     GtdTaskList *list)
-{
-  gtd_provider_eds_remove_task_list (GTD_PROVIDER_EDS (provider), list);
-
-  g_signal_emit_by_name (provider, "list-removed", list);
-}
-
-static GList*
-gtd_provider_local_get_task_lists (GtdProvider *provider)
-{
-  return gtd_provider_eds_get_task_lists (GTD_PROVIDER_EDS (provider));
-}
-
-static GtdTaskList*
-gtd_provider_local_get_default_task_list (GtdProvider *provider)
-{
-  return gtd_provider_eds_get_default_task_list (GTD_PROVIDER_EDS (provider));
-}
-
-static void
-gtd_provider_local_set_default_task_list (GtdProvider *provider,
-                                          GtdTaskList *list)
-{
-  gtd_provider_eds_set_default_task_list (GTD_PROVIDER_EDS (provider), list);
-}
-
-static GtdTask*
-gtd_provider_local_generate_task (GtdProvider *provider)
-{
-  return gtd_provider_eds_generate_task (GTD_PROVIDER_EDS (provider));
-}
-
-static void
-gtd_provider_iface_init (GtdProviderInterface *iface)
-{
-  iface->get_id = gtd_provider_local_get_id;
-  iface->get_name = gtd_provider_local_get_name;
-  iface->get_description = gtd_provider_local_get_description;
-  iface->get_enabled = gtd_provider_local_get_enabled;
-  iface->get_icon = gtd_provider_local_get_icon;
-  iface->create_task = gtd_provider_local_create_task;
-  iface->update_task = gtd_provider_local_update_task;
-  iface->remove_task = gtd_provider_local_remove_task;
-  iface->create_task_list = gtd_provider_local_create_task_list;
-  iface->update_task_list = gtd_provider_local_update_task_list;
-  iface->remove_task_list = gtd_provider_local_remove_task_list;
-  iface->get_task_lists = gtd_provider_local_get_task_lists;
-  iface->get_default_task_list = gtd_provider_local_get_default_task_list;
-  iface->set_default_task_list = gtd_provider_local_set_default_task_list;
-  iface->generate_task = gtd_provider_local_generate_task;
-}
-
-GtdProviderLocal*
-gtd_provider_local_new (ESourceRegistry *registry)
-{
-  return g_object_new (GTD_TYPE_PROVIDER_LOCAL,
-                       "registry", registry,
-                       NULL);
+  return source;
 }
 
 static void
@@ -236,64 +120,6 @@ gtd_provider_local_finalize (GObject *object)
   G_OBJECT_CLASS (gtd_provider_local_parent_class)->finalize (object);
 }
 
-static void
-gtd_provider_local_get_property (GObject    *object,
-                                 guint       prop_id,
-                                 GValue     *value,
-                                 GParamSpec *pspec)
-{
-  GtdProvider *provider = GTD_PROVIDER (object);
-
-  switch (prop_id)
-    {
-    case PROP_DEFAULT_TASKLIST:
-      g_value_set_object (value, gtd_provider_local_get_default_task_list (provider));
-      break;
-
-    case PROP_DESCRIPTION:
-      g_value_set_string (value, gtd_provider_local_get_description (provider));
-      break;
-
-    case PROP_ENABLED:
-      g_value_set_boolean (value, gtd_provider_local_get_enabled (provider));
-      break;
-
-    case PROP_ICON:
-      g_value_set_object (value, gtd_provider_local_get_icon (provider));
-      break;
-
-    case PROP_ID:
-      g_value_set_string (value, gtd_provider_local_get_id (provider));
-      break;
-
-    case PROP_NAME:
-      g_value_set_string (value, gtd_provider_local_get_name (provider));
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-    }
-}
-
-static void
-gtd_provider_local_set_property (GObject      *object,
-                                 guint         prop_id,
-                                 const GValue *value,
-                                 GParamSpec   *pspec)
-{
-  GtdProvider *provider = GTD_PROVIDER (object);
-
-  switch (prop_id)
-    {
-    case PROP_DEFAULT_TASKLIST:
-      gtd_provider_local_set_default_task_list (provider, g_value_get_object (value));
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-    }
-}
-
 static gboolean
 gtd_provider_local_should_load_source (GtdProviderEds *provider,
                                        ESource        *source)
@@ -310,18 +136,15 @@ gtd_provider_local_class_init (GtdProviderLocalClass *klass)
   GtdProviderEdsClass *eds_class = GTD_PROVIDER_EDS_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  eds_class->get_id = gtd_provider_local_get_id;
+  eds_class->get_name = gtd_provider_local_get_name;
+  eds_class->get_description = gtd_provider_local_get_description;
+  eds_class->get_enabled = gtd_provider_local_get_enabled;
+  eds_class->get_icon = gtd_provider_local_get_icon;
+  eds_class->create_source = gtd_provider_local_create_source;
   eds_class->should_load_source = gtd_provider_local_should_load_source;
 
   object_class->finalize = gtd_provider_local_finalize;
-  object_class->get_property = gtd_provider_local_get_property;
-  object_class->set_property = gtd_provider_local_set_property;
-
-  g_object_class_override_property (object_class, PROP_DEFAULT_TASKLIST, "default-task-list");
-  g_object_class_override_property (object_class, PROP_DESCRIPTION, "description");
-  g_object_class_override_property (object_class, PROP_ENABLED, "enabled");
-  g_object_class_override_property (object_class, PROP_ICON, "icon");
-  g_object_class_override_property (object_class, PROP_ID, "id");
-  g_object_class_override_property (object_class, PROP_NAME, "name");
 }
 
 static void
@@ -329,6 +152,13 @@ gtd_provider_local_init (GtdProviderLocal *self)
 {
   gtd_object_set_ready (GTD_OBJECT (self), TRUE);
 
-  /* icon */
   self->icon = G_ICON (g_themed_icon_new_with_default_fallbacks ("computer-symbolic"));
 }
+
+GtdProviderLocal*
+gtd_provider_local_new (ESourceRegistry *registry)
+{
+  return g_object_new (GTD_TYPE_PROVIDER_LOCAL,
+                       "registry", registry,
+                       NULL);
+}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]