soylent r164 - trunk/libsoylent
- From: svenp svn gnome org
- To: svn-commits-list gnome org
- Subject: soylent r164 - trunk/libsoylent
- Date: Tue, 17 Jun 2008 20:56:04 +0000 (UTC)
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]