[gnome-calendar/calendar-management] manager: implement GcalManager::remove_source method



commit 06d0ee6f2516eaf3e25d68ef98caef3594398618
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Feb 5 16:30:59 2015 -0200

    manager: implement GcalManager::remove_source method

 src/gcal-manager.c |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 src/gcal-manager.h |    3 +++
 2 files changed, 50 insertions(+), 0 deletions(-)
---
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index 773e1fe..c7c216e 100644
--- a/src/gcal-manager.c
+++ b/src/gcal-manager.c
@@ -117,6 +117,10 @@ static void     on_event_removed                          (GObject         *sour
                                                            GAsyncResult    *result,
                                                            gpointer         user_data);
 
+static void     on_source_removed                         (GObject         *source_object,
+                                                           GAsyncResult    *result,
+                                                           gpointer         user_data);
+
 static void     remove_source                             (GcalManager     *manager,
                                                            ESource         *source);
 
@@ -480,6 +484,36 @@ on_event_removed (GObject      *source_object,
   g_object_unref (E_CAL_COMPONENT (user_data));
 }
 
+/**
+ * on_source_removed:
+ * @source_object:
+ * @result: result of the operation
+ * @user_data: { link GcalManager} instance
+ *
+ * Called when a source is removed. Currently, it only checks for
+ * error, but a more sophisticated implementation will come in no time.
+ *
+ **/
+static void
+on_source_removed (GObject      *source,
+                   GAsyncResult *result,
+                   gpointer      user_data)
+{
+  GError *error;
+  error = NULL;
+
+  if (!e_source_remove_finish (E_SOURCE (source), result, &error))
+    {
+      /* FIXME: Notify the user somehow */
+      g_warning ("Error removing source: %s", error->message);
+      g_error_free (error);
+    }
+  else
+    {
+      remove_source (GCAL_MANAGER (user_data), E_SOURCE (source));
+    }
+}
+
 void
 remove_source (GcalManager  *manager,
                ESource      *source)
@@ -921,6 +955,19 @@ gcal_manager_save_source (GcalManager *manager,
   return result;
 }
 
+/**
+ * gcal_manager_remove_source:
+ * @manager: a #GcalManager
+ * @source: the target #ESource
+ *
+ * Remove @source from ESourceRegistry.
+ */
+void
+gcal_manager_remove_source (GcalManager *manager,
+                            ESource     *source)
+{
+  e_source_remove (source, NULL, on_source_removed, manager);
+}
 
 /**
  * gcal_manager_disable_source:
diff --git a/src/gcal-manager.h b/src/gcal-manager.h
index 62e4cf2..cef2916 100644
--- a/src/gcal-manager.h
+++ b/src/gcal-manager.h
@@ -106,6 +106,9 @@ void           gcal_manager_disable_source          (GcalManager        *manager
 gboolean       gcal_manager_save_source             (GcalManager        *manager,
                                                      ESource            *source);
 
+void           gcal_manager_remove_source           (GcalManager        *manager,
+                                                     ESource            *source);
+
 gboolean       gcal_manager_is_source_enabled       (GcalManager        *manager,
                                                      ESource            *source);
 


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