soylent r164 - trunk/libsoylent



Author: svenp
Date: Tue Jun 17 20:56:04 2008
New Revision: 164
URL: http://svn.gnome.org/viewvc/soylent?rev=164&view=rev

Log:
added function for listing all addressbooks
added function for creating an addressbook
added existance check and addressbook deletion stubs

Modified:
   trunk/libsoylent/Makefile.am
   trunk/libsoylent/sl-book.c
   trunk/libsoylent/sl-book.h

Modified: trunk/libsoylent/Makefile.am
==============================================================================
--- trunk/libsoylent/Makefile.am	(original)
+++ trunk/libsoylent/Makefile.am	Tue Jun 17 20:56:04 2008
@@ -14,7 +14,8 @@
 	sl-entity.c \
 	sl-book.c \
 	sl-group.c \
-	sl-person.c
+	sl-person.c \
+	sl-priv-util.c
 
 libsoylent_la_CFLAGS = $(LIBSOYLENT_CFLAGS) $(WARN_CFLAGS)
 libsoylent_la_LIBADD = $(LIBSOYLENT_LIBS)

Modified: trunk/libsoylent/sl-book.c
==============================================================================
--- trunk/libsoylent/sl-book.c	(original)
+++ trunk/libsoylent/sl-book.c	Tue Jun 17 20:56:04 2008
@@ -1,6 +1,7 @@
 /**/
 
 #include "sl-book.h"
+#include "sl-priv-util.h"
 
 #include <libebook/e-book.h>
 
@@ -22,6 +23,7 @@
   const GValue *value, GParamSpec *pspec);
 static void sl_book_get_property (GObject *object, guint property_id,
   GValue *value, GParamSpec *pspec);
+static SlBook *sl_book_new (EBook *ebook);
 
 GType
 sl_book_get_type (void)
@@ -48,10 +50,16 @@
   return type;
 }
 
+GQuark
+sl_book_error_quark (void)
+{
+  return g_quark_from_static_string ("sl-book-error");
+}
+
 void
 sl_book_setup (void)
 {
-  sl_book_default = sl_book_new ();
+  sl_book_default = sl_book_new (NULL);
   sl_book_set_current (sl_book_default);
 }
 
@@ -65,7 +73,100 @@
 sl_book_get_books (void)
 {
   /* TODO: get all books: as objects? or as strings? */
-  g_warning("%s not implemented", __FUNCTION__);
+  GError *error = NULL;
+  ESourceList *source_tree = NULL;
+  
+  e_book_get_addressbooks (&source_tree, &error);
+  if (error != NULL)
+    {
+      g_critical ("failed to list books");
+      return NULL;
+    }
+  
+  ESourceGroup *default_group = NULL;
+  GSList *groups = e_source_list_peek_groups (source_tree);
+  for (; groups != NULL; groups = groups->next)
+    {
+      ESourceGroup *group = groups->data;
+      if (!default_group)
+        {
+          default_group = group;
+        }
+      const char *group_name = e_source_group_peek_name (group);
+      GSList *sources = e_source_group_peek_sources (group);
+      for (; sources != NULL; sources = sources->next)
+        {
+          ESource *source = sources->data;
+          const gchar *name = e_source_peek_name (source);
+          const gchar *reluri = e_source_peek_relative_uri(source);
+          const gchar *absuri = e_source_peek_absolute_uri(source);
+          g_print (" * %s.%s [%s, %s]\n", group_name, name, reluri, absuri);
+        }
+    }
+  
+  return NULL;
+}
+
+static gboolean
+sl_book_exists (const gchar *name)
+{
+  GError *error = NULL;
+  ESourceList *source_tree = NULL;
+  if (!e_book_get_addressbooks (&source_tree, &error))
+    {
+      g_critical ("failed to get source tree: %s", error->message);
+    }
+    
+  /* TODO: check for address book */
+    
+  return FALSE;
+}
+
+SlBook *
+sl_book_create (const gchar *name, GError **error)
+{
+  ESourceList *source_tree = NULL;
+  
+  g_return_val_if_fail (name != NULL, FALSE);
+  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+  
+  if (sl_book_exists (name))
+    {
+      g_set_error (error, SL_BOOK_ERROR, SL_BOOK_ERROR_ALREADY_EXISTS,
+        "The book %s already exists.", (gchar *) name);
+      return FALSE;
+    }
+  
+  if (!e_book_get_addressbooks (&source_tree, error))
+    {
+      g_critical ("failed to get source tree");
+      return FALSE;
+    }
+  ESourceGroup *default_group = sl_priv_util_source_tree_get_default_group
+                                (source_tree);
+  
+  ESource *source = e_source_new (name, "");
+  e_source_set_group (source, default_group); /* workaround */
+  e_source_group_add_source (default_group, source, -1);
+  if (!e_source_list_sync (source_tree, error))
+    {
+      g_critical ("failed to store source tree");
+      return FALSE;
+    }
+  
+  EBook *ebook = e_book_new (source, error);
+  if (!ebook)
+    {
+      g_critical ("failed to load ebook");
+      return FALSE;
+    }
+  if (!e_book_open (ebook, FALSE, error))
+    {
+      g_critical ("failed to open ebook");
+      return FALSE;
+    }
+    
+  //return sl_book_new (ebook);
   return NULL;
 }
 
@@ -136,8 +237,45 @@
   g_warning("%s not implemented", __FUNCTION__);
 }
 
-SlBook *
-sl_book_new (void)
+void
+sl_book_delete (SlBook *book) {
+  g_warning("%s not implemented", __FUNCTION__);
+  /*
+  AddressbookView *view = data;
+  AddressbookViewPrivate *priv = view->priv;
+  ESource *selected_source;
+  EBook  *book;
+  GError *error = NULL;
+  GtkWindow *toplevel;
+
+  selected_source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (priv->selector));
+  if (!selected_source)
+    return;
+
+  toplevel = (GtkWindow *)gtk_widget_get_toplevel(ep->target->widget);
+
+  if (e_error_run(toplevel, "addressbook:ask-delete-addressbook", e_source_peek_name(selected_source)) != GTK_RESPONSE_YES)
+    return;
+
+  Remove local data
+  book = e_book_new (selected_source, &error);
+  if (book) {
+    BookRemovedClosure *closure = g_new (BookRemovedClosure, 1);
+
+    closure->toplevel = (GtkWidget *)toplevel;
+    closure->view = view;
+    closure->selected_source = selected_source;
+
+    if (e_book_async_remove (book, book_removed, closure)) {
+      e_error_run (toplevel, "addressbook:remove-addressbook", NULL);
+      g_free (closure);
+      g_object_unref (book);
+    }
+  }*/
+}
+
+static SlBook *
+sl_book_new (EBook *ebook)
 {
   /* TODO: create new EBook with ESource, howto? */
   SlBook *self = g_object_new(SL_BOOK_TYPE, NULL);

Modified: trunk/libsoylent/sl-book.h
==============================================================================
--- trunk/libsoylent/sl-book.h	(original)
+++ trunk/libsoylent/sl-book.h	Tue Jun 17 20:56:04 2008
@@ -17,8 +17,16 @@
 #define SL_IS_BOOK_CLASS(cls)   (G_TYPE_CHECK_CLASS_TYPE (cls, SL_BOOK_TYPE))
 #define SL_BOOK_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS (obj, SL_BOOK_TYPE))
 
+#define SL_BOOK_ERROR sl_book_error_quark ()
+
 #define SL_BOOK_STD sl_book_current;
 
+enum SlBookError
+{
+  SL_BOOK_ERROR_ALREADY_EXISTS,
+  SL_BOOK_ERROR_FAILED
+};
+
 typedef struct _SlBook      SlBook;
 typedef struct _SlBookClass SlBookClass;
 typedef struct _SlBookPriv  SlBookPriv;
@@ -38,11 +46,17 @@
 SlBook *sl_book_current;
 
 GType sl_book_get_type (void);
+GQuark sl_book_error_quark (void);
+
 void sl_book_setup (void);
 void sl_book_set_current (SlBook *book);
+
 GList *sl_book_get_books (void);
+SlBook *sl_book_create (const gchar *name, GError **error);
+SlBook *sl_book_open (const gchar *name);
+SlBook *sl_book_open_default (void);
+void sl_book_delete (SlBook *book);
 
-SlBook *sl_book_new (void);
 SlEntity *sl_book_get_person(SlBook *self, gchar *attrname, gpointer value);
 
 #endif



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