[gnome-todo] provider: Make API synchronous



commit 83f9da89541e003884e83dc42c05e7cae4701897
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Tue Jan 30 17:31:48 2018 -0200

    provider: Make API synchronous
    
    This is temporary, until we find a good way to
    handle it asynchronously.

 plugins/eds/gtd-provider-eds.c           | 169 ++++++++-----------------------
 plugins/todo-txt/gtd-provider-todo-txt.c |  36 ++++---
 plugins/todoist/gtd-provider-todoist.c   |  36 ++++---
 src/engine/gtd-manager.c                 |  82 +++++++++++++--
 src/gtd-application.c                    |   2 +-
 src/gtd-dnd-row.c                        |   5 +-
 src/interfaces/gtd-provider.c            |  60 +++++++----
 src/interfaces/gtd-provider.h            |  50 ++++++---
 src/provider/gtd-provider-popover.c      |   2 +-
 9 files changed, 247 insertions(+), 195 deletions(-)
---
diff --git a/plugins/eds/gtd-provider-eds.c b/plugins/eds/gtd-provider-eds.c
index c406f9d..0f237c8 100644
--- a/plugins/eds/gtd-provider-eds.c
+++ b/plugins/eds/gtd-provider-eds.c
@@ -590,8 +590,10 @@ gtd_provider_eds_get_icon (GtdProvider *provider)
 }
 
 static void
-gtd_provider_eds_create_task (GtdProvider *provider,
-                              GtdTask     *task)
+gtd_provider_eds_create_task (GtdProvider   *provider,
+                              GtdTask       *task,
+                              GCancellable  *cancellable,
+                              GError       **error)
 {
   g_autofree gchar *new_uid = NULL;
   GtdProviderEdsPrivate *priv;
@@ -600,7 +602,6 @@ gtd_provider_eds_create_task (GtdProvider *provider,
   ECalComponent *component;
   ECalClient *client;
   ESource *source;
-  GError *error;
 
   g_return_if_fail (GTD_IS_TASK (task));
   g_return_if_fail (GTD_IS_TASK_LIST_EDS (gtd_task_get_list (task)));
@@ -611,26 +612,17 @@ gtd_provider_eds_create_task (GtdProvider *provider,
   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));
-  error = NULL;
 
   /* The task is not ready until we finish the operation */
   gtd_object_set_ready (GTD_OBJECT (task), FALSE);
 
-  e_cal_client_create_object_sync (client,
-                                   e_cal_component_get_icalcomponent (component),
-                                   &new_uid,
-                                   NULL, // We won't cancel the operation
-                                   &error);
-
-  if (error)
+  if (!e_cal_client_create_object_sync (client,
+                                        e_cal_component_get_icalcomponent (component),
+                                        &new_uid,
+                                        cancellable,
+                                        error))
     {
-      gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                      _("Error removing task"),
-                                      error->message,
-                                      NULL,
-                                      NULL);
       gtd_task_list_remove_task (gtd_task_get_list (task), task);
-      g_clear_error (&error);
     }
   else
     {
@@ -647,8 +639,10 @@ gtd_provider_eds_create_task (GtdProvider *provider,
 }
 
 static void
-gtd_provider_eds_update_task (GtdProvider *provider,
-                              GtdTask     *task)
+gtd_provider_eds_update_task (GtdProvider   *provider,
+                              GtdTask       *task,
+                              GCancellable  *cancellable,
+                              GError       **error)
 {
   GtdProviderEdsPrivate *priv;
   GtdProviderEds *self;
@@ -656,7 +650,6 @@ gtd_provider_eds_update_task (GtdProvider *provider,
   ECalComponent *component;
   ECalClient *client;
   ESource *source;
-  GError *error;
 
   g_return_if_fail (GTD_IS_TASK (task));
   g_return_if_fail (GTD_IS_TASK_LIST_EDS (gtd_task_get_list (task)));
@@ -667,7 +660,6 @@ gtd_provider_eds_update_task (GtdProvider *provider,
   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));
-  error = NULL;
 
   e_cal_component_commit_sequence (component);
 
@@ -677,25 +669,17 @@ gtd_provider_eds_update_task (GtdProvider *provider,
   e_cal_client_modify_object_sync (client,
                                    e_cal_component_get_icalcomponent (component),
                                    E_CAL_OBJ_MOD_THIS,
-                                   NULL, // We won't cancel the operation
-                                   &error);
-
-  if (error)
-    {
-      gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                      _("Error updating task"),
-                                      error->message,
-                                      NULL,
-                                      NULL);
-      g_clear_error (&error);
-    }
+                                   cancellable,
+                                   error);
 
   gtd_object_set_ready (GTD_OBJECT (task), TRUE);
 }
 
 static void
-gtd_provider_eds_remove_task (GtdProvider *provider,
-                              GtdTask     *task)
+gtd_provider_eds_remove_task (GtdProvider   *provider,
+                              GtdTask       *task,
+                              GCancellable  *cancellable,
+                              GError       **error)
 {
 
   GtdProviderEdsPrivate *priv;
@@ -705,7 +689,6 @@ gtd_provider_eds_remove_task (GtdProvider *provider,
   ECalComponent *component;
   ECalClient *client;
   ESource *source;
-  GError *error;
 
   g_return_if_fail (GTD_IS_TASK (task));
   g_return_if_fail (GTD_IS_TASK_LIST_EDS (gtd_task_get_list (task)));
@@ -717,7 +700,6 @@ gtd_provider_eds_remove_task (GtdProvider *provider,
   client = g_hash_table_lookup (priv->clients, source);
   component = gtd_task_eds_get_component (GTD_TASK_EDS (task));
   id = e_cal_component_get_id (component);
-  error = NULL;
 
   /* The task is not ready until we finish the operation */
   gtd_object_set_ready (GTD_OBJECT (task), FALSE);
@@ -726,36 +708,26 @@ gtd_provider_eds_remove_task (GtdProvider *provider,
                                    id->uid,
                                    id->rid,
                                    E_CAL_OBJ_MOD_THIS,
-                                   NULL, // We won't cancel the operation
-                                   &error);
+                                   cancellable,
+                                   error);
 
   gtd_object_set_ready (GTD_OBJECT (task), TRUE);
 
-  if (error)
-    {
-      gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                      _("Error removing task"),
-                                      error->message,
-                                      NULL,
-                                      NULL);
-      g_clear_error (&error);
-    }
-
   e_cal_component_free_id (id);
 }
 
 static void
-gtd_provider_eds_create_task_list (GtdProvider *provider,
-                                   GtdTaskList *list)
+gtd_provider_eds_create_task_list (GtdProvider   *provider,
+                                   GtdTaskList   *list,
+                                   GCancellable  *cancellable,
+                                   GError       **error)
 {
   GtdProviderEdsPrivate *priv;
   GtdProviderEds *self;
   ESource *source;
-  GError *error;
 
   self = GTD_PROVIDER_EDS (provider);
   priv = gtd_provider_eds_get_instance_private (self);
-  error = NULL;
   source = NULL;
 
   /* Create an ESource */
@@ -769,72 +741,35 @@ gtd_provider_eds_create_task_list (GtdProvider *provider,
   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_sync (priv->source_registry, source, NULL, &error);
-
-  if (error)
-    {
-      gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                      _("Error creating task list"),
-                                      error->message,
-                                      NULL,
-                                      NULL);
-      g_clear_error (&error);
-    }
-
-  if (e_source_get_remote_creatable (source))
-    {
-      ESource *parent;
-
-      parent = e_source_registry_ref_source (priv->source_registry, e_source_get_parent (source));
 
-      e_source_remote_create_sync (parent, source, NULL, &error);
-
-      if (error)
-        {
-          gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                          _("Error creating remote task list"),
-                                          error->message,
-                                          NULL,
-                                          NULL);
-          g_clear_error (&error);
-        }
-
-      g_object_unref (parent);
-    }
+  e_source_registry_commit_source_sync (priv->source_registry,
+                                        source,
+                                        cancellable,
+                                        error);
 
   gtd_object_set_ready (GTD_OBJECT (list), TRUE);
 }
 
 static void
-gtd_provider_eds_update_task_list (GtdProvider *provider,
-                                   GtdTaskList *list)
+gtd_provider_eds_update_task_list (GtdProvider   *provider,
+                                   GtdTaskList   *list,
+                                   GCancellable  *cancellable,
+                                   GError       **error)
 {
   GtdProviderEdsPrivate *priv;
   ESource *source;
-  GError *error;
 
   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 (GTD_PROVIDER_EDS (provider));
   source = gtd_task_list_eds_get_source (GTD_TASK_LIST_EDS (list));
-  error = NULL;
 
   gtd_object_set_ready (GTD_OBJECT (provider), FALSE);
   e_source_registry_commit_source_sync (priv->source_registry,
                                         source,
-                                        NULL,
-                                        &error);
-
-  if (error)
-    {
-      gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                      _("Error updating task list"),
-                                      error->message,
-                                      NULL,
-                                      NULL);
-      g_clear_error (&error);
-    }
+                                        cancellable,
+                                        error);
 
   gtd_object_set_ready (GTD_OBJECT (provider), TRUE);
 
@@ -842,11 +777,12 @@ gtd_provider_eds_update_task_list (GtdProvider *provider,
 }
 
 static void
-gtd_provider_eds_remove_task_list (GtdProvider *provider,
-                                   GtdTaskList *list)
+gtd_provider_eds_remove_task_list (GtdProvider   *provider,
+                                   GtdTaskList   *list,
+                                   GCancellable  *cancellable,
+                                   GError       **error)
 {
   ESource *source;
-  GError *error;
 
   g_return_if_fail (GTD_IS_TASK_LIST (list));
   g_return_if_fail (gtd_task_list_eds_get_source (GTD_TASK_LIST_EDS (list)));
@@ -856,32 +792,7 @@ gtd_provider_eds_remove_task_list (GtdProvider *provider,
 
   gtd_object_set_ready (GTD_OBJECT (provider), FALSE);
 
-  e_source_remove_sync (source, NULL, &error);
-
-  if (error)
-    {
-      gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                      _("Error removing task list"),
-                                      error->message,
-                                      NULL,
-                                      NULL);
-      g_clear_error (&error);
-    }
-
-  if (e_source_get_remote_deletable (source))
-    {
-      e_source_remote_delete_sync (source, NULL, &error);
-
-      if (error)
-        {
-          gtd_manager_emit_error_message (gtd_manager_get_default (),
-                                          _("Error removing remote task list"),
-                                          error->message,
-                                          NULL,
-                                          NULL);
-          g_clear_error (&error);
-        }
-    }
+  e_source_remove_sync (source, cancellable, error);
 
   gtd_object_set_ready (GTD_OBJECT (provider), TRUE);
 
diff --git a/plugins/todo-txt/gtd-provider-todo-txt.c b/plugins/todo-txt/gtd-provider-todo-txt.c
index 2e9d281..4f0808c 100644
--- a/plugins/todo-txt/gtd-provider-todo-txt.c
+++ b/plugins/todo-txt/gtd-provider-todo-txt.c
@@ -376,8 +376,10 @@ gtd_provider_todo_txt_load_source_monitor (GtdProviderTodoTxt *self)
 }
 
 static void
-gtd_provider_todo_txt_create_task (GtdProvider *provider,
-                                   GtdTask     *task)
+gtd_provider_todo_txt_create_task (GtdProvider   *provider,
+                                   GtdTask       *task,
+                                   GCancellable  *cancellable,
+                                   GError       **error)
 {
   GtdProviderTodoTxt *self;
 
@@ -390,8 +392,10 @@ gtd_provider_todo_txt_create_task (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todo_txt_update_task (GtdProvider *provider,
-                                   GtdTask     *task)
+gtd_provider_todo_txt_update_task (GtdProvider   *provider,
+                                   GtdTask       *task,
+                                   GCancellable  *cancellable,
+                                   GError       **error)
 {
   GtdProviderTodoTxt *self;
 
@@ -405,8 +409,10 @@ gtd_provider_todo_txt_update_task (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todo_txt_remove_task (GtdProvider *provider,
-                                   GtdTask     *task)
+gtd_provider_todo_txt_remove_task (GtdProvider   *provider,
+                                   GtdTask       *task,
+                                   GCancellable  *cancellable,
+                                   GError       **error)
 {
   GtdProviderTodoTxt *self;
 
@@ -420,8 +426,10 @@ gtd_provider_todo_txt_remove_task (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todo_txt_create_task_list (GtdProvider *provider,
-                                        GtdTaskList *list)
+gtd_provider_todo_txt_create_task_list (GtdProvider   *provider,
+                                        GtdTaskList   *list,
+                                        GCancellable  *cancellable,
+                                        GError       **error)
 {
   GtdProviderTodoTxt *self;
   gchar *name;
@@ -441,8 +449,10 @@ gtd_provider_todo_txt_create_task_list (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todo_txt_update_task_list (GtdProvider *provider,
-                                        GtdTaskList *list)
+gtd_provider_todo_txt_update_task_list (GtdProvider   *provider,
+                                        GtdTaskList   *list,
+                                        GCancellable  *cancellable,
+                                        GError       **error)
 {
   GtdProviderTodoTxt *self;
 
@@ -456,8 +466,10 @@ gtd_provider_todo_txt_update_task_list (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todo_txt_remove_task_list (GtdProvider *provider,
-                                        GtdTaskList *list)
+gtd_provider_todo_txt_remove_task_list (GtdProvider   *provider,
+                                        GtdTaskList   *list,
+                                        GCancellable  *cancellable,
+                                        GError       **error)
 {
   GtdProviderTodoTxt *self;
 
diff --git a/plugins/todoist/gtd-provider-todoist.c b/plugins/todoist/gtd-provider-todoist.c
index 41184c2..b23d1b7 100644
--- a/plugins/todoist/gtd-provider-todoist.c
+++ b/plugins/todoist/gtd-provider-todoist.c
@@ -682,8 +682,10 @@ synchronize_call (GtdProviderTodoist *self)
 }
 
 static void
-gtd_provider_todoist_create_task (GtdProvider *provider,
-                                  GtdTask     *task)
+gtd_provider_todoist_create_task (GtdProvider   *provider,
+                                  GtdTask       *task,
+                                  GCancellable  *cancellable,
+                                  GError       **error)
 {
   GtdProviderTodoist *self;
   PostCallbackData *data;
@@ -768,8 +770,10 @@ gtd_provider_todoist_create_task (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todoist_update_task (GtdProvider *provider,
-                                  GtdTask     *task)
+gtd_provider_todoist_update_task (GtdProvider   *provider,
+                                  GtdTask       *task,
+                                  GCancellable  *cancellable,
+                                  GError       **error)
 {
   GtdProviderTodoist *self;
   PostCallbackData *data;
@@ -842,8 +846,10 @@ gtd_provider_todoist_update_task (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todoist_remove_task (GtdProvider *provider,
-                                  GtdTask     *task)
+gtd_provider_todoist_remove_task (GtdProvider   *provider,
+                                  GtdTask       *task,
+                                  GCancellable  *cancellable,
+                                  GError       **error)
 {
   GtdProviderTodoist *self;
   PostCallbackData *data;
@@ -885,8 +891,10 @@ gtd_provider_todoist_remove_task (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todoist_create_task_list (GtdProvider *provider,
-                                       GtdTaskList *list)
+gtd_provider_todoist_create_task_list (GtdProvider   *provider,
+                                       GtdTaskList   *list,
+                                       GCancellable  *cancellable,
+                                       GError       **error)
 {
   GtdProviderTodoist *self;
   PostCallbackData *data;
@@ -946,8 +954,10 @@ gtd_provider_todoist_create_task_list (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todoist_update_task_list (GtdProvider *provider,
-                                        GtdTaskList *list)
+gtd_provider_todoist_update_task_list (GtdProvider   *provider,
+                                       GtdTaskList   *list,
+                                       GCancellable  *cancellable,
+                                       GError       **error)
 {
   GtdProviderTodoist *self;
   PostCallbackData *data;
@@ -995,8 +1005,10 @@ gtd_provider_todoist_update_task_list (GtdProvider *provider,
 }
 
 static void
-gtd_provider_todoist_remove_task_list (GtdProvider *provider,
-                                       GtdTaskList *list)
+gtd_provider_todoist_remove_task_list (GtdProvider   *provider,
+                                       GtdTaskList   *list,
+                                       GCancellable  *cancellable,
+                                       GError       **error)
 {
   GtdProviderTodoist *self;
   PostCallbackData *data;
diff --git a/src/engine/gtd-manager.c b/src/engine/gtd-manager.c
index c033e19..adf0856 100644
--- a/src/engine/gtd-manager.c
+++ b/src/engine/gtd-manager.c
@@ -54,6 +54,8 @@ typedef struct
   GList                 *panels;
   GtdProvider           *default_provider;
   GtdTimer              *timer;
+
+  GCancellable          *cancellable;
 } GtdManagerPrivate;
 
 struct _GtdManager
@@ -94,6 +96,18 @@ enum
 
 static guint signals[NUM_SIGNALS] = { 0, };
 
+static void
+reset_cancellable_if_cancelled (GtdManager *self)
+{
+  GtdManagerPrivate *priv = gtd_manager_get_instance_private (self);
+
+  if (!g_cancellable_is_cancelled (priv->cancellable))
+    return;
+
+  g_clear_object (&priv->cancellable);
+  priv->cancellable = g_cancellable_new ();
+}
+
 static void
 check_provider_is_default (GtdManager  *manager,
                            GtdProvider *provider)
@@ -131,6 +145,7 @@ gtd_manager_finalize (GObject *object)
 {
   GtdManager *self = (GtdManager *)object;
 
+  g_clear_object (&self->priv->cancellable);
   g_clear_object (&self->priv->plugin_manager);
   g_clear_object (&self->priv->settings);
   g_clear_object (&self->priv->timer);
@@ -598,6 +613,7 @@ gtd_manager_init (GtdManager *self)
   self->priv->settings = g_settings_new ("org.gnome.todo");
   self->priv->plugin_manager = gtd_plugin_manager_new ();
   self->priv->timer = gtd_timer_new ();
+  self->priv->cancellable = g_cancellable_new ();
 }
 
 /**
@@ -634,16 +650,25 @@ void
 gtd_manager_create_task (GtdManager *manager,
                          GtdTask    *task)
 {
+  g_autoptr (GError) error = NULL;
+  GtdManagerPrivate *priv;
   GtdTaskList *list;
   GtdProvider *provider;
 
   g_return_if_fail (GTD_IS_MANAGER (manager));
   g_return_if_fail (GTD_IS_TASK (task));
 
+  priv = gtd_manager_get_instance_private (manager);
   list = gtd_task_get_list (task);
   provider = gtd_task_list_get_provider (list);
 
-  gtd_provider_create_task (provider, task);
+  gtd_provider_create_task (provider, task, priv->cancellable, &error);
+
+  if (error)
+    {
+      g_warning ("Error creating task: %s", error->message);
+      reset_cancellable_if_cancelled (manager);
+    }
 }
 
 /**
@@ -657,16 +682,25 @@ void
 gtd_manager_remove_task (GtdManager *manager,
                          GtdTask    *task)
 {
+  g_autoptr (GError) error = NULL;
+  GtdManagerPrivate *priv;
   GtdTaskList *list;
   GtdProvider *provider;
 
   g_return_if_fail (GTD_IS_MANAGER (manager));
   g_return_if_fail (GTD_IS_TASK (task));
 
+  priv = gtd_manager_get_instance_private (manager);
   list = gtd_task_get_list (task);
   provider = gtd_task_list_get_provider (list);
 
-  gtd_provider_remove_task (provider, task);
+  gtd_provider_remove_task (provider, task, priv->cancellable, &error);
+
+  if (error)
+    {
+      g_warning ("Error removing task: %s", error->message);
+      reset_cancellable_if_cancelled (manager);
+    }
 }
 
 /**
@@ -680,6 +714,8 @@ void
 gtd_manager_update_task (GtdManager *manager,
                          GtdTask    *task)
 {
+  g_autoptr (GError) error = NULL;
+  GtdManagerPrivate *priv;
   GtdTaskList *list;
   GtdProvider *provider;
 
@@ -692,9 +728,16 @@ gtd_manager_update_task (GtdManager *manager,
   if (!list)
       return;
 
+  priv = gtd_manager_get_instance_private (manager);
   provider = gtd_task_list_get_provider (list);
 
-  gtd_provider_update_task (provider, task);
+  gtd_provider_update_task (provider, task, priv->cancellable, &error);
+
+  if (error)
+    {
+      g_warning ("Error updating task: %s", error->message);
+      reset_cancellable_if_cancelled (manager);
+    }
 }
 
 /**
@@ -708,14 +751,23 @@ void
 gtd_manager_create_task_list (GtdManager  *manager,
                               GtdTaskList *list)
 {
+  g_autoptr (GError) error = NULL;
+  GtdManagerPrivate *priv;
   GtdProvider *provider;
 
   g_return_if_fail (GTD_IS_MANAGER (manager));
   g_return_if_fail (GTD_IS_TASK_LIST (list));
 
+  priv = gtd_manager_get_instance_private (manager);
   provider = gtd_task_list_get_provider (list);
 
-  gtd_provider_create_task_list (provider, list);
+  gtd_provider_create_task_list (provider, list, priv->cancellable, &error);
+
+  if (error)
+    {
+      g_warning ("Error creating task list: %s", error->message);
+      reset_cancellable_if_cancelled (manager);
+    }
 }
 
 /**
@@ -729,14 +781,23 @@ void
 gtd_manager_remove_task_list (GtdManager  *manager,
                               GtdTaskList *list)
 {
+  g_autoptr (GError) error = NULL;
+  GtdManagerPrivate *priv;
   GtdProvider *provider;
 
   g_return_if_fail (GTD_IS_MANAGER (manager));
   g_return_if_fail (GTD_IS_TASK_LIST (list));
 
+  priv = gtd_manager_get_instance_private (manager);
   provider = gtd_task_list_get_provider (list);
 
-  gtd_provider_remove_task_list (provider, list);
+  gtd_provider_remove_task_list (provider, list, priv->cancellable, &error);
+
+  if (error)
+    {
+      g_warning ("Error removing task list: %s", error->message);
+      reset_cancellable_if_cancelled (manager);
+    }
 
   g_signal_emit (manager,
                  signals[LIST_REMOVED],
@@ -755,14 +816,23 @@ void
 gtd_manager_save_task_list (GtdManager  *manager,
                             GtdTaskList *list)
 {
+  g_autoptr (GError) error = NULL;
+  GtdManagerPrivate *priv;
   GtdProvider *provider;
 
   g_return_if_fail (GTD_IS_MANAGER (manager));
   g_return_if_fail (GTD_IS_TASK_LIST (list));
 
+  priv = gtd_manager_get_instance_private (manager);
   provider = gtd_task_list_get_provider (list);
 
-  gtd_provider_update_task_list (provider, list);
+  gtd_provider_update_task_list (provider, list, priv->cancellable, &error);
+
+  if (error)
+    {
+      g_warning ("Error saving task list: %s", error->message);
+      reset_cancellable_if_cancelled (manager);
+    }
 }
 
 /**
diff --git a/src/gtd-application.c b/src/gtd-application.c
index b5810c4..8bf0231 100644
--- a/src/gtd-application.c
+++ b/src/gtd-application.c
@@ -302,7 +302,7 @@ gtd_application_command_line (GApplication            *app,
 
   options = g_application_command_line_get_options_dict (command_line);
 
-  if (g_variant_dict_contains (options, "debug"))
+  //if (g_variant_dict_contains (options, "debug"))
     gtd_log_init ();
 
   if (g_variant_dict_contains (options, "quit"))
diff --git a/src/gtd-dnd-row.c b/src/gtd-dnd-row.c
index d875f9e..7666bb1 100644
--- a/src/gtd-dnd-row.c
+++ b/src/gtd-dnd-row.c
@@ -19,6 +19,7 @@
 #define G_LOG_DOMAIN "GtdDndRow"
 
 #include "gtd-dnd-row.h"
+#include "gtd-manager.h"
 #include "gtd-new-task-row.h"
 #include "gtd-provider.h"
 #include "gtd-rows-common-private.h"
@@ -226,7 +227,6 @@ gtd_dnd_row_drag_drop (GtkWidget      *widget,
                        gint            y,
                        guint           time)
 {
-  GtdProvider *provider;
   GtdDndRow *self;
   GtkWidget *source_widget, *row;
   GtdTask *row_task, *target_task;
@@ -277,8 +277,7 @@ gtd_dnd_row_drag_drop (GtkWidget      *widget,
     }
 
   /* Save the task */
-  provider = gtd_task_list_get_provider (gtd_task_get_list (row_task));
-  gtd_provider_update_task (provider, row_task);
+  gtd_manager_update_task (gtd_manager_get_default (), row_task);
 
   gtk_list_box_invalidate_sort (GTK_LIST_BOX (gtk_widget_get_parent (widget)));
 
diff --git a/src/interfaces/gtd-provider.c b/src/interfaces/gtd-provider.c
index caf4e65..1a265de 100644
--- a/src/interfaces/gtd-provider.c
+++ b/src/interfaces/gtd-provider.c
@@ -295,102 +295,126 @@ gtd_provider_get_icon (GtdProvider *provider)
  * gtd_provider_create_task:
  * @provider: a #GtdProvider
  * @task: a #GtdTask
+ * @cancellable: (nullable): a #GCancellable
+ * @error: (nullable): return location for a #GError
  *
  * Creates the given task in @provider.
  */
 void
-gtd_provider_create_task (GtdProvider *provider,
-                          GtdTask     *task)
+gtd_provider_create_task (GtdProvider   *provider,
+                          GtdTask       *task,
+                          GCancellable  *cancellable,
+                          GError       **error)
 {
   g_return_if_fail (GTD_IS_PROVIDER (provider));
   g_return_if_fail (GTD_PROVIDER_GET_IFACE (provider)->create_task);
 
-  GTD_PROVIDER_GET_IFACE (provider)->create_task (provider, task);
+  GTD_PROVIDER_GET_IFACE (provider)->create_task (provider, task, cancellable, error);
 }
 
 /**
  * gtd_provider_update_task:
  * @provider: a #GtdProvider
  * @task: a #GtdTask
+ * @cancellable: (nullable): a #GCancellable
+ * @error: (nullable): return location for a #GError
  *
  * Updates the given task in @provider.
  */
 void
-gtd_provider_update_task (GtdProvider *provider,
-                          GtdTask     *task)
+gtd_provider_update_task (GtdProvider   *provider,
+                          GtdTask       *task,
+                          GCancellable  *cancellable,
+                          GError       **error)
 {
   g_return_if_fail (GTD_IS_PROVIDER (provider));
   g_return_if_fail (GTD_PROVIDER_GET_IFACE (provider)->update_task);
 
-  GTD_PROVIDER_GET_IFACE (provider)->update_task (provider, task);
+  GTD_PROVIDER_GET_IFACE (provider)->update_task (provider, task, cancellable, error);
 }
 
 /**
  * gtd_provider_remove_task:
  * @provider: a #GtdProvider
  * @task: a #GtdTask
+ * @cancellable: (nullable): a #GCancellable
+ * @error: (nullable): return location for a #GError
  *
  * Removes the given task from @provider.
  */
 void
-gtd_provider_remove_task (GtdProvider *provider,
-                          GtdTask     *task)
+gtd_provider_remove_task (GtdProvider   *provider,
+                          GtdTask       *task,
+                          GCancellable  *cancellable,
+                          GError       **error)
 {
   g_return_if_fail (GTD_IS_PROVIDER (provider));
   g_return_if_fail (GTD_PROVIDER_GET_IFACE (provider)->remove_task);
 
-  GTD_PROVIDER_GET_IFACE (provider)->remove_task (provider, task);
+  GTD_PROVIDER_GET_IFACE (provider)->remove_task (provider, task, cancellable, error);
 }
 
 /**
  * gtd_provider_create_task_list:
  * @provider: a #GtdProvider
  * @list: a #GtdTaskList
+ * @cancellable: (nullable): a #GCancellable
+ * @error: (nullable): return location for a #GError
  *
  * Creates the given list in @provider.
  */
 void
-gtd_provider_create_task_list (GtdProvider *provider,
-                               GtdTaskList *list)
+gtd_provider_create_task_list (GtdProvider   *provider,
+                               GtdTaskList   *list,
+                               GCancellable  *cancellable,
+                               GError       **error)
 {
   g_return_if_fail (GTD_IS_PROVIDER (provider));
   g_return_if_fail (GTD_PROVIDER_GET_IFACE (provider)->create_task_list);
 
-  GTD_PROVIDER_GET_IFACE (provider)->create_task_list (provider, list);
+  GTD_PROVIDER_GET_IFACE (provider)->create_task_list (provider, list, cancellable, error);
 }
 
 /**
  * gtd_provider_update_task_list:
  * @provider: a #GtdProvider
  * @list: a #GtdTaskList
+ * @cancellable: (nullable): a #GCancellable
+ * @error: (nullable): return location for a #GError
  *
  * Updates the given list in @provider.
  */
 void
-gtd_provider_update_task_list (GtdProvider *provider,
-                               GtdTaskList *list)
+gtd_provider_update_task_list (GtdProvider   *provider,
+                               GtdTaskList   *list,
+                               GCancellable  *cancellable,
+                               GError       **error)
 {
   g_return_if_fail (GTD_IS_PROVIDER (provider));
   g_return_if_fail (GTD_PROVIDER_GET_IFACE (provider)->update_task_list);
 
-  GTD_PROVIDER_GET_IFACE (provider)->update_task_list (provider, list);
+  GTD_PROVIDER_GET_IFACE (provider)->update_task_list (provider, list, cancellable, error);
 }
 
 /**
  * gtd_provider_remove_task_list:
  * @provider: a #GtdProvider
  * @list: a #GtdTaskList
+ * @cancellable: (nullable): a #GCancellable
+ * @error: (nullable): return location for a #GError
  *
  * Removes the given list from @provider.
  */
 void
-gtd_provider_remove_task_list (GtdProvider *provider,
-                               GtdTaskList *list)
+gtd_provider_remove_task_list (GtdProvider   *provider,
+                               GtdTaskList   *list,
+                               GCancellable  *cancellable,
+                               GError       **error)
 {
   g_return_if_fail (GTD_IS_PROVIDER (provider));
   g_return_if_fail (GTD_PROVIDER_GET_IFACE (provider)->remove_task_list);
 
-  GTD_PROVIDER_GET_IFACE (provider)->remove_task_list (provider, list);
+  GTD_PROVIDER_GET_IFACE (provider)->remove_task_list (provider, list, cancellable, error);
 }
 
 /**
diff --git a/src/interfaces/gtd-provider.h b/src/interfaces/gtd-provider.h
index 98a8f8b..d3a6d95 100644
--- a/src/interfaces/gtd-provider.h
+++ b/src/interfaces/gtd-provider.h
@@ -22,8 +22,8 @@
 #include "gtd-object.h"
 #include "gtd-types.h"
 
+#include <gio/gio.h>
 #include <glib.h>
-#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
@@ -49,23 +49,35 @@ struct _GtdProviderInterface
 
   /* Tasks */
   void               (*create_task)                              (GtdProvider        *provider,
-                                                                  GtdTask            *task);
+                                                                  GtdTask            *task,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
   void               (*update_task)                              (GtdProvider        *provider,
-                                                                  GtdTask            *task);
+                                                                  GtdTask            *task,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
   void               (*remove_task)                              (GtdProvider        *provider,
-                                                                  GtdTask            *task);
+                                                                  GtdTask            *task,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
   /* Task lists */
   void               (*create_task_list)                         (GtdProvider        *provider,
-                                                                  GtdTaskList        *list);
+                                                                  GtdTaskList        *list,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
   void               (*update_task_list)                         (GtdProvider        *provider,
-                                                                  GtdTaskList        *list);
+                                                                  GtdTaskList        *list,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
   void               (*remove_task_list)                         (GtdProvider        *provider,
-                                                                  GtdTaskList        *list);
+                                                                  GtdTaskList        *list,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
   GList*             (*get_task_lists)                           (GtdProvider        *provider);
 
@@ -88,22 +100,34 @@ gboolean             gtd_provider_get_enabled                    (GtdProvider
 GIcon*               gtd_provider_get_icon                       (GtdProvider        *provider);
 
 void                 gtd_provider_create_task                    (GtdProvider        *provider,
-                                                                  GtdTask            *task);
+                                                                  GtdTask            *task,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
 void                 gtd_provider_update_task                    (GtdProvider        *provider,
-                                                                  GtdTask            *task);
+                                                                  GtdTask            *task,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
 void                 gtd_provider_remove_task                    (GtdProvider        *provider,
-                                                                  GtdTask            *task);
+                                                                  GtdTask            *task,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
 void                 gtd_provider_create_task_list               (GtdProvider        *provider,
-                                                                  GtdTaskList        *list);
+                                                                  GtdTaskList        *list,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
 void                 gtd_provider_update_task_list               (GtdProvider        *provider,
-                                                                  GtdTaskList        *list);
+                                                                  GtdTaskList        *list,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
 void                 gtd_provider_remove_task_list               (GtdProvider        *provider,
-                                                                  GtdTaskList        *list);
+                                                                  GtdTaskList        *list,
+                                                                  GCancellable       *cancellable,
+                                                                  GError            **error);
 
 GList*               gtd_provider_get_task_lists                 (GtdProvider        *provider);
 
diff --git a/src/provider/gtd-provider-popover.c b/src/provider/gtd-provider-popover.c
index 6f11da5..4cd474a 100644
--- a/src/provider/gtd-provider-popover.c
+++ b/src/provider/gtd-provider-popover.c
@@ -93,7 +93,7 @@ create_task_list (GtdProviderPopover *popover)
   task_list = gtd_task_list_new (provider);
   gtd_task_list_set_name (task_list, name);
 
-  gtd_provider_create_task_list (provider, task_list);
+  gtd_manager_create_task_list (gtd_manager_get_default (), task_list);
 }
 
 static void



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