r1655 - trunk/src/target/OM-2007/applications/openmoko-messages/src

alex_tang at sita.openmoko.org alex_tang at sita.openmoko.org
Wed Apr 4 11:22:51 CEST 2007


Author: alex_tang
Date: 2007-04-04 11:22:45 +0200 (Wed, 04 Apr 2007)
New Revision: 1655

Modified:
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c
   trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h
Log:
Use synchronized function to load contacts.
Get selected contacts by uid.


Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c	2007-04-04 09:12:23 UTC (rev 1654)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.c	2007-04-04 09:22:45 UTC (rev 1655)
@@ -95,14 +95,16 @@
   data->contacts = contacts;
   g_debug ("list length %d", g_list_length(c));
 
-  const gchar *name , *phoneNum;
+  const gchar *uid, *name , *phoneNum;
   for (;c;c=c->next){
     EContact *contact = E_CONTACT (c->data);
+    uid = e_contact_get_const (contact, E_CONTACT_UID);
     name = e_contact_get_const (contact, E_CONTACT_FULL_NAME);
-    phoneNum =  e_contact_get_const (contact, E_CONTACT_PHONE_BUSINESS);
+    phoneNum =  e_contact_get_const (contact, E_CONTACT_PHONE_MOBILE);
     gtk_list_store_append(contacts_liststore, &iter);
     gtk_list_store_set (contacts_liststore, &iter, 
                         CONTACT_SEL_COL, FALSE,
+                        CONTACT_UID_COL, uid, 
                         CONTACT_NAME_COL, name,
 			CONTACT_CELLPHONE_COL, phoneNum,
 			-1);
@@ -131,6 +133,32 @@
   return FALSE;
 }
 
+static void 
+open_book_syn (SmsContactData* data)
+{
+  /* open ebook */
+  GError* error = NULL;
+  e_book_open (data->book,FALSE,&error);
+  if (error){
+    g_debug ("open book error %s",error->message);
+    return;
+  }
+  
+  /* open contacts */
+  EBookQuery* query;
+  query = e_book_query_any_field_contains ("");
+  GList* contacts = NULL;
+  e_book_get_contacts(data->book,query,&contacts,&error);
+  if (error){
+    g_debug ("open book error %s",error->message); 
+    return; 
+  } 
+  else{ 
+      g_debug ("contacts number %d",g_list_length(contacts)); 
+      updateContactsView (data->book,E_BOOK_ERROR_OK,contacts,data); 
+  } 
+}
+
 static void
 sms_contact_window_init (SmsContactWindow* self)
 {
@@ -154,8 +182,8 @@
   gtk_box_pack_start(GTK_BOX(priv->vbox), eventbox, FALSE, TRUE, 0);
 
   /* create contact list */
-  data->contacts_liststore = gtk_list_store_new (3, G_TYPE_BOOLEAN,
-                                                 G_TYPE_STRING, G_TYPE_STRING);
+  data->contacts_liststore = gtk_list_store_new (4, G_TYPE_BOOLEAN,
+                                                 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
   priv->contacts_view = create_contacts_list(data);
   gtk_box_pack_start(GTK_BOX(priv->vbox), priv->contacts_view, TRUE, TRUE, 0);
   g_object_unref (data->contacts_liststore);
@@ -173,7 +201,8 @@
   gtk_box_pack_start(GTK_BOX(priv->vbox), priv->buttonbox, FALSE, TRUE, 0);
   
   /* loading contacts */
-  g_idle_add((GSourceFunc)open_book,data);
+  //g_idle_add((GSourceFunc)open_book,data);
+  open_book_syn (data);
 
   gtk_widget_show_all(priv->vbox);
   gtk_container_add(GTK_CONTAINER(self), priv->vbox);
@@ -231,27 +260,26 @@
   SmsContactData* contactData = priv->data;
   g_debug ("select item contacts %d", g_list_length(contactData->contacts));
 
-  gchar* name;
+  gchar* selUid;
   gboolean selected;
   gtk_tree_model_get (model, iter,
                       CONTACT_SEL_COL, &selected,
-		      CONTACT_NAME_COL,&name,
+		      CONTACT_UID_COL, &selUid,
 		      -1);
   if (selected)
-    g_debug ("contact %s selected", name);
+    g_debug ("contact %s selected", selUid);
   else {
-    g_debug ("contact %s not selected, remove from contacts list", name);
+    g_debug ("contact %s not selected, remove from contacts list", selUid);
     GList* contactListItem = contactData->contacts;
     for ( ; contactListItem; contactListItem=contactListItem->next){
       EContact* contact = E_CONTACT (contactListItem->data);
-      const gchar *contactName;
-      contactName = e_contact_get_const (contact, E_CONTACT_FULL_NAME);
-      if (!g_strcasecmp(name, contactName)) 
+      const gchar *uid = e_contact_get_const (contact, E_CONTACT_UID);
+      if (!g_strcasecmp(uid, selUid)) 
         contactData->contacts = g_list_remove (contactData->contacts,
 	                                       contactListItem->data);
     }
   }
-  g_free(name);
+  g_free(selUid);
 
   return FALSE;
 }

Modified: trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h	2007-04-04 09:12:23 UTC (rev 1654)
+++ trunk/src/target/OM-2007/applications/openmoko-messages/src/sms-contact-window.h	2007-04-04 09:22:45 UTC (rev 1655)
@@ -39,6 +39,7 @@
 
 enum {
   CONTACT_SEL_COL,
+  CONTACT_UID_COL,
   CONTACT_NAME_COL,
   CONTACT_CELLPHONE_COL,
   CONTACT_LAST_COL





More information about the commitlog mailing list