[gnome-todo/wip/selection-mode] manager: correctly remove task lists



commit 5ead698e30d77bc7cd3d4b034109c0d8d86435c9
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat Aug 22 19:50:07 2015 -0300

    manager: correctly remove task lists
    
    When the task list is remote-deletable, it is preferred to
    locally remove the task list. As such, adapt the current
    code to correctly remove task lists.

 src/gtd-manager.c |   79 ++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 57 insertions(+), 22 deletions(-)
---
diff --git a/src/gtd-manager.c b/src/gtd-manager.c
index ed3cec3..2c6a024 100644
--- a/src/gtd-manager.c
+++ b/src/gtd-manager.c
@@ -409,34 +409,53 @@ gtd_manager__commit_source_finished (GObject      *registry,
 }
 
 static void
-gtd_manager__remove_source_finished (GObject      *source,
+task_list_removal_finished (GtdManager  *manager,
+                            ESource     *source,
+                            GError     **error)
+{
+  gtd_object_set_ready (GTD_OBJECT (manager), TRUE);
+
+  if (*error)
+    {
+      g_warning ("%s: %s: %s",
+                 G_STRFUNC,
+                 _("Error removing task list"),
+                 (*error)->message);
+
+      g_clear_error (error);
+    }
+}
+
+static void
+gtd_manager__remote_delete_finished (GObject      *source,
                                      GAsyncResult *result,
                                      gpointer      user_data)
 {
-  GtdManagerPrivate *priv = GTD_MANAGER (user_data)->priv;
   GError *error = NULL;
 
-  g_return_if_fail (GTD_IS_MANAGER (user_data));
+  e_source_remote_delete_finish (E_SOURCE (source),
+                                 result,
+                                 &error);
+
+  task_list_removal_finished (GTD_MANAGER (user_data),
+                              E_SOURCE (source),
+                              &error);
+}
+
+static void
+gtd_manager__remove_source_finished (GObject      *source,
+                                     GAsyncResult *result,
+                                     gpointer      user_data)
+{
+  GError *error = NULL;
 
-  gtd_object_set_ready (GTD_OBJECT (user_data), TRUE);
   e_source_remove_finish (E_SOURCE (source),
                           result,
                           &error);
 
-  if (error)
-    {
-      g_warning ("%s: %s: %s",
-                 G_STRFUNC,
-                 _("Error removing task list"),
-                 error->message);
-
-      g_error_free (error);
-      return;
-    }
-  else
-    {
-      priv->task_lists = g_list_remove (priv->task_lists, source);
-    }
+  task_list_removal_finished (GTD_MANAGER (user_data),
+                              E_SOURCE (source),
+                              &error);
 }
 
 static void
@@ -1367,10 +1386,26 @@ gtd_manager_remove_task_list (GtdManager  *manager,
   source = gtd_task_list_get_source (list);
 
   gtd_object_set_ready (GTD_OBJECT (manager), FALSE);
-  e_source_remove (source,
-                   NULL,
-                   (GAsyncReadyCallback) gtd_manager__remove_source_finished,
-                   manager);
+
+  if (e_source_get_remote_deletable (source))
+    {
+      e_source_remote_delete (source,
+                              NULL,
+                              (GAsyncReadyCallback) gtd_manager__remote_delete_finished,
+                              manager);
+    }
+  else
+    {
+      e_source_remove (source,
+                       NULL,
+                       (GAsyncReadyCallback) gtd_manager__remove_source_finished,
+                       manager);
+    }
+
+  g_signal_emit (manager,
+                 signals[LIST_REMOVED],
+                 0,
+                 list);
 }
 
 /**


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