soylent r246 - trunk/libsoylent
- From: svenp svn gnome org
- To: svn-commits-list gnome org
- Subject: soylent r246 - trunk/libsoylent
- Date: Wed, 30 Jul 2008 09:38:27 +0000 (UTC)
Author: svenp
Date: Wed Jul 30 09:38:27 2008
New Revision: 246
URL: http://svn.gnome.org/viewvc/soylent?rev=246&view=rev
Log:
loading people implemented (processing eview signals)
getting all people works
Modified:
trunk/libsoylent/sl-book.c
trunk/libsoylent/sl-book.h
Modified: trunk/libsoylent/sl-book.c
==============================================================================
--- trunk/libsoylent/sl-book.c (original)
+++ trunk/libsoylent/sl-book.c Wed Jul 30 09:38:27 2008
@@ -45,6 +45,9 @@
{
GError *error;
EBook *ebook;
+ EBookView *eview;
+ GMainLoop *view_wait_loop;
+ GList *people;
};
static GObjectClass *parent_class = NULL;
@@ -56,9 +59,18 @@
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);
+static SlBook *sl_book_new (EBook *ebook, GError **error);
static SlBook *sl_book_new_from_source (ESource *source, GError **error);
+static void eview_contacts_added (EBookView *eview, GList *econtacts,
+ SlBook *self);
+static void eview_contacts_changed (EBookView *eview, GList *econtacts,
+ SlBook *self);
+static void eview_contacts_removed (EBookView *eview, GList *econtact_ids,
+ SlBook *self);
+static void eview_sequence_complete (EBookView *eview, EBookViewStatus status,
+ SlBook *self);
+
GType
sl_book_get_type (void)
{
@@ -325,7 +337,7 @@
return NULL;
}
- return sl_book_new (ebook);
+ return sl_book_new (ebook, error);
}
gboolean
@@ -375,11 +387,47 @@
return TRUE;
}
+gboolean
+sl_book_constr (SlBook *self, GError **error)
+{
+ self->priv->people = NULL;
+ self->priv->eview = NULL;
+ self->priv->view_wait_loop = g_main_loop_new (NULL, FALSE);
+
+ /* this will query all contacts */
+ EBookQuery *query = e_book_query_any_field_contains ("");
+
+ /* TODO: Here you can query only certain fields, this would be a great
+ * performance improvement. But we definitely want a list of all people and
+ * for every person a list of all attributes. Is this possible without
+ * querying all fields? */
+ /* TODO: this would also need some refactoring for SlAttribute to support
+ * lazy loading */
+ if (!e_book_get_book_view (self->priv->ebook, query, NULL, 0,
+ &self->priv->eview, error))
+ {
+ return FALSE;
+ }
+
+ g_object_connect (self->priv->eview,
+ "signal::contacts-added", G_CALLBACK (eview_contacts_added), self,
+ "signal::contacts-changed", G_CALLBACK (eview_contacts_changed), self,
+ "signal::contacts-removed", G_CALLBACK (eview_contacts_removed), self,
+ "signal::sequence-complete", G_CALLBACK (eview_sequence_complete), self,
+ NULL);
+
+ e_book_view_start (self->priv->eview);
+ g_main_loop_run (self->priv->view_wait_loop);
+
+ return TRUE;
+}
+
static SlBook *
-sl_book_new (EBook *ebook)
+sl_book_new (EBook *ebook, GError **error)
{
g_return_val_if_fail (ebook != NULL && E_IS_BOOK (ebook), NULL);
SlBook *self = g_object_new (SL_BOOK_TYPE, "ebook", ebook, NULL);
+ sl_book_constr (self, error);
return self;
}
@@ -399,7 +447,7 @@
return NULL;
}
- SlBook *self = sl_book_new (ebook);
+ SlBook *self = sl_book_new (ebook, error);
g_object_unref (ebook);
return self;
}
@@ -419,6 +467,8 @@
sl_entity_set_ebook (entity, self->priv->ebook);
+ self->priv->people = g_list_append (self->priv->people, person);
+
return TRUE;
}
@@ -431,14 +481,17 @@
{
return FALSE;
}
+
+ self->priv->people = g_list_remove (self->priv->people, person);
+
return TRUE;
}
GList *
sl_book_get_people (SlBook *self)
{
- g_warning("%s not implemented", __FUNCTION__);
- return NULL;
+ /* TODO: make this with a libsoylent-query? */
+ return self->priv->people;
}
SlPerson *
@@ -447,3 +500,44 @@
g_warning("%s not implemented", __FUNCTION__);
return NULL;
}
+
+static void
+eview_contacts_added (EBookView *eview, GList *econtacts, SlBook *self)
+{
+ /* TODO: consider to forget econtact here again */
+ for (; econtacts != NULL; econtacts = econtacts->next)
+ {
+ EContact *econtact = econtacts->data;
+ SlPerson *person = sl_person_new_with_econtact (econtact);
+ self->priv->people = g_list_append (self->priv->people, person);
+ }
+ /* TODO: generate signal if view_wait_loop == NULL */
+}
+
+static void
+eview_contacts_changed (EBookView *eview, GList *econtacts, SlBook *self)
+{
+ g_warning("%s not implemented", __FUNCTION__);
+}
+
+static void
+eview_contacts_removed (EBookView *eview, GList *econtact_ids, SlBook *self)
+{
+ g_warning("%s not implemented", __FUNCTION__);
+}
+
+static void
+eview_sequence_complete (EBookView *eview, EBookViewStatus status, SlBook *self) {
+ if (status != E_BOOK_VIEW_STATUS_OK)
+ {
+ g_critical ("eview status is: %d", status);
+ return;
+ }
+
+ if (self->priv->view_wait_loop != NULL)
+ {
+ g_main_loop_quit (self->priv->view_wait_loop);
+ g_main_loop_unref (self->priv->view_wait_loop);
+ self->priv->view_wait_loop = NULL;
+ }
+}
Modified: trunk/libsoylent/sl-book.h
==============================================================================
--- trunk/libsoylent/sl-book.h (original)
+++ trunk/libsoylent/sl-book.h Wed Jul 30 09:38:27 2008
@@ -85,6 +85,8 @@
gboolean sl_book_setup (GError **error);
+gboolean sl_book_constr (SlBook *self, GError **error);
+
GList *sl_book_get_books (void);
gboolean sl_book_exists (const gchar *name);
SlBook *sl_book_create (const gchar *name, GError **error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]