Send commitlog mailing list submissions to
        commitlog@lists.openmoko.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. r3864 - in
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2: .
      src/phone-kit ([EMAIL PROTECTED])
   2. r3865 - in
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2: .
      src/phone-kit ([EMAIL PROTECTED])
   3. r3866 - in
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2: .
      src/phone-kit ([EMAIL PROTECTED])
   4. r3867 -
      trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit
      ([EMAIL PROTECTED])
   5. r3868 - in
      trunk/src/target/OM-2007.2/applications/openmoko-messages2: . src
      ([EMAIL PROTECTED])
--- Begin Message ---
Author: chris
Date: 2008-01-17 12:52:40 +0100 (Thu, 17 Jan 2008)
New Revision: 3864

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
Log:
        * src/phone-kit/moko-network.c: (on_network_registered),
        (moko_network_get_country_code):
        Do get the operators list, but only when roaming - when not roaming,
        return the home country code when asked for the local country code


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-17 11:36:56 UTC (rev 3863)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-17 11:52:40 UTC (rev 3864)
@@ -1,5 +1,12 @@
 2008-01-17  Chris Lord  <[EMAIL PROTECTED]>
 
+       * src/phone-kit/moko-network.c: (on_network_registered),
+       (moko_network_get_country_code):
+       Do get the operators list, but only when roaming - when not roaming,
+       return the home country code when asked for the local country code
+
+2008-01-17  Chris Lord  <[EMAIL PROTECTED]>
+
        * src/moko-dialer-glue.h:
        Remove, shouldn't be in version control
 

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
       2008-01-17 11:36:56 UTC (rev 3863)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
       2008-01-17 11:52:40 UTC (rev 3864)
@@ -196,12 +196,6 @@
         /* Retrieve operator name */
         lgsm_oper_get (handle);
         
-        /* Retrieve operator list to get current country code */
-        /* FIXME: This takes too long, we need gsmd to give us the current 
-         * operator number from lgsm_oper_get.
-         */
-        /*lgsm_opers_get (handle);*/
-        
         /* Retrieve IMSI to get home country code */
         lgsm_get_imsi (handle);
         
@@ -212,14 +206,21 @@
           priv->retry_oper = g_timeout_add_seconds (RETRY_DELAY,
                                                     
(GSourceFunc)retry_oper_get,
                                                     listener);
-        /*if (priv->retry_opers_n)
-          priv->retry_opers = g_timeout_add_seconds (RETRY_DELAY,
-                                                     
(GSourceFunc)retry_opers_get,
-                                                     listener);*/
         if (priv->retry_imsi_n)
           priv->retry_imsi = g_timeout_add_seconds (RETRY_DELAY,
                                                     
(GSourceFunc)retry_get_imsi,
                                                     listener);
+
+       if (type == GSMD_NETREG_REG_ROAMING) {
+        /* Retrieve operator list to get current country code */
+        /* FIXME: This blocks other gsmd calls... Error states? */
+        lgsm_opers_get (handle);
+        
+        if (priv->retry_opers_n)
+          priv->retry_opers = g_timeout_add_seconds (RETRY_DELAY,
+                                                     
(GSourceFunc)retry_opers_get,
+                                                     listener);
+        }
       }
       
       break;
@@ -933,6 +934,10 @@
   if (!moko_network_check_registration (self, error)) return FALSE;
   priv = self->priv;
   
+  if (priv->registered == GSMD_NETREG_REG_HOME) {
+    return moko_network_get_home_country_code (self, dial_code, error);
+  }
+  
   if (!priv->network_number) {
     if (error) *error = g_error_new (PHONE_KIT_NETWORK_ERROR,
                                      PK_NETWORK_ERROR_NO_PROVIDER_NUM,




--- End Message ---
--- Begin Message ---
Author: chris
Date: 2008-01-17 13:39:04 +0100 (Thu, 17 Jan 2008)
New Revision: 3865

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-talking.c
Log:
        * src/phone-kit/moko-talking.c: (moko_talking_init):
        Make the volume slider control the 'Headphone' mixer, fixes bug #394


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-17 11:52:40 UTC (rev 3864)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-17 12:39:04 UTC (rev 3865)
@@ -1,5 +1,10 @@
 2008-01-17  Chris Lord  <[EMAIL PROTECTED]>
 
+       * src/phone-kit/moko-talking.c: (moko_talking_init):
+       Make the volume slider control the 'Headphone' mixer, fixes bug #394
+
+2008-01-17  Chris Lord  <[EMAIL PROTECTED]>
+
        * src/phone-kit/moko-network.c: (on_network_registered),
        (moko_network_get_country_code):
        Do get the operators list, but only when roaming - when not roaming,

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-talking.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-talking.c
       2008-01-17 11:52:40 UTC (rev 3864)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-talking.c
       2008-01-17 12:39:04 UTC (rev 3865)
@@ -69,8 +69,7 @@
   
   gint call_direction;
   
-  MokoAlsaVolumeControl *amp_left;
-  MokoAlsaVolumeControl *amp_right;
+  MokoAlsaVolumeControl *headphone;
 };
 
 enum
@@ -510,13 +509,6 @@
 }
 
 static void
-volume_changed_cb (MokoAlsaVolumeControl *control1, gdouble volume,
-                   MokoAlsaVolumeControl *control2)
-{
-  moko_alsa_volume_control_set_volume (control2, volume);
-}
-
-static void
 moko_talking_init (MokoTalking *talking)
 {
   MokoTalkingPrivate *priv;
@@ -565,21 +557,14 @@
   gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, 4);
   
   /* Volume controls */
-  priv->amp_left = moko_alsa_volume_control_new ();
-  moko_alsa_volume_control_set_device_from_name (priv->amp_left, "neo1973");
-  moko_alsa_volume_control_set_element_from_name (priv->amp_left, "Amp Left");
-  priv->amp_right = moko_alsa_volume_control_new ();
-  moko_alsa_volume_control_set_device_from_name (priv->amp_right, "neo1973");
-  moko_alsa_volume_control_set_element_from_name (priv->amp_right, "Amp 
Right");
+  priv->headphone = moko_alsa_volume_control_new ();
+  moko_alsa_volume_control_set_device_from_name (priv->headphone, "neo1973");
+  moko_alsa_volume_control_set_element_from_name (priv->headphone, 
"Headphone");
   
   priv->volume = moko_alsa_volume_scale_new (GTK_ORIENTATION_HORIZONTAL);
   moko_alsa_volume_scale_set_control (MOKO_ALSA_VOLUME_SCALE (priv->volume),
-                                      priv->amp_left);
+                                      priv->headphone);
   
-  /* Chain Amp Left to Amp Right */
-  g_signal_connect (priv->amp_left, "volume_changed",
-                    G_CALLBACK (volume_changed_cb), priv->amp_right);
-
   /* Outgoing call and talking share the same toolbar */
   priv->main_bar = toolbar = gtk_toolbar_new ();
   gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);




--- End Message ---
--- Begin Message ---
Author: chris
Date: 2008-01-17 15:46:10 +0100 (Thu, 17 Jan 2008)
New Revision: 3866

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
Log:
        * src/phone-kit/moko-network.c: (moko_network_dispose), (io_func),
        (network_init_gsmd):
        Use GIOChannel instead of GSource for polling (simplifies code)


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-17 12:39:04 UTC (rev 3865)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog  
2008-01-17 14:46:10 UTC (rev 3866)
@@ -1,5 +1,11 @@
 2008-01-17  Chris Lord  <[EMAIL PROTECTED]>
 
+       * src/phone-kit/moko-network.c: (moko_network_dispose), (io_func),
+       (network_init_gsmd):
+       Use GIOChannel instead of GSource for polling (simplifies code)
+
+2008-01-17  Chris Lord  <[EMAIL PROTECTED]>
+
        * src/phone-kit/moko-talking.c: (moko_talking_init):
        Make the volume slider control the 'Headphone' mixer, fixes bug #394
 

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
       2008-01-17 12:39:04 UTC (rev 3865)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
       2008-01-17 14:46:10 UTC (rev 3866)
@@ -59,12 +59,6 @@
 
 static guint signals[LAST_SIGNAL] = {0, };
 
-typedef struct {
-  GSource source;
-  GPollFD pollfd;
-  struct lgsm_handle *handle;
-} MokoNetworkSource;
-
 struct _MokoNetworkPrivate
 {
   gchar                     *own_number;
@@ -80,8 +74,8 @@
   gint                      retry_imsi_n;
 
   /* gsmd connection variables */
+  GIOChannel                *channel;
   struct lgsm_handle        *handle;
-  MokoNetworkSource         *source;
   int                       lac;
   
   /* Registration variables */
@@ -333,16 +327,17 @@
 
   stop_retrying (MOKO_NETWORK (object));
 
+  if (priv->channel) {
+    g_io_channel_shutdown (priv->channel, FALSE, NULL);
+    g_io_channel_unref (priv->channel);
+    priv->channel = NULL;
+  }
+
   if (priv->handle) {
     lgsm_exit (priv->handle);
     priv->handle = NULL;
   }
 
-  if (priv->source) {
-    g_source_destroy ((GSource *)priv->source);
-    priv->source = NULL;
-  }
-
   G_OBJECT_CLASS (moko_network_parent_class)->dispose (object);
 }
 
@@ -687,37 +682,43 @@
   return 0;
 }
 
-static gboolean 
-connection_source_prepare (GSource* self, gint* timeout)
-{
-    return FALSE;
-}
-
 static gboolean
-connection_source_check (GSource* source)
+io_func (GIOChannel *source, GIOCondition condition, MokoNetwork *self)
 {
-  MokoNetworkSource *self = (MokoNetworkSource *)source;
-  return self->pollfd.revents & G_IO_IN;
-}
+  gchar buf[1025];
+  gsize length;
 
-static gboolean 
-connection_source_dispatch (GSource *source, GSourceFunc callback,
-                            gpointer data)
-{
-  char buf[1025];
-  int size;
+  MokoNetworkPrivate *priv = self->priv;
+  GError *error = NULL;
+  
+  g_debug ("Start IO");
+  
+  switch (condition) {
+    case G_IO_IN :
+      if (g_io_channel_read_chars (source, buf, sizeof (buf), &length, &error)
+          == G_IO_STATUS_NORMAL) {
+        lgsm_handle_packet (priv->handle, buf, length);
+      } else {
+        g_warning ("Error reading from source: %s", error->message);
+        g_error_free (error);
+      }
+      break;
 
-  MokoNetworkSource *self = (MokoNetworkSource *)source;
-
-  size = read (self->pollfd.fd, &buf, sizeof(buf));
-  if (size < 0) {
-    g_warning ("moko_gsmd_connection_source_dispatch:%s %s",
-               "read error from libgsmd:", strerror (errno));
-  } else {
-    if (size == 0) /* EOF */
+    case G_IO_ERR :
+    case G_IO_NVAL :
+      g_warning ("Encountered an error, stopping IO watch");
       return FALSE;
-    lgsm_handle_packet (self->handle, buf, size);
+    
+    case G_IO_HUP :
+      g_warning ("Gsmd hung up - TODO: Reconnect/restart gsmd?");
+      return FALSE;
+
+    default :
+      g_warning ("Unhandled IO condition");
+      break;
   }
+    
+  g_debug ("End IO");
 
   return TRUE;
 }
@@ -725,14 +726,8 @@
 static void
 network_init_gsmd (MokoNetwork *network)
 {
-  static GSourceFuncs funcs = {
-    connection_source_prepare,
-    connection_source_check,
-    connection_source_dispatch,
-    NULL,
-  };
-
   MokoNetworkPrivate *priv;
+  
   priv = network->priv;
   
   /* Add ourselves as an event listener */
@@ -764,14 +759,11 @@
   lgsm_phone_power (priv->handle, 1);
 
   /* Start polling for events */
-  priv->source = (MokoNetworkSource *)
-    g_source_new (&funcs, sizeof (MokoNetworkSource));
-  priv->source->handle = priv->handle;
-  priv->source->pollfd.fd = lgsm_fd (priv->handle);
-  priv->source->pollfd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
-  priv->source->pollfd.revents = 0;
-  g_source_add_poll ((GSource*)priv->source, &priv->source->pollfd);
-  g_source_attach ((GSource*)priv->source, NULL);
+  priv->channel = g_io_channel_unix_new (lgsm_fd (priv->handle));
+  g_io_channel_set_encoding (priv->channel, NULL, NULL);
+  g_io_channel_set_buffered (priv->channel, FALSE);
+  g_io_add_watch (priv->channel, G_IO_IN | G_IO_ERR | G_IO_NVAL | G_IO_HUP,
+                  (GIOFunc)io_func, network);
 }
 
 static void




--- End Message ---
--- Begin Message ---
Author: chris
Date: 2008-01-17 15:46:33 +0100 (Thu, 17 Jan 2008)
New Revision: 3867

Modified:
   
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
Log:
Try saving before committing... (remove a couple of debug statements)


Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
       2008-01-17 14:46:10 UTC (rev 3866)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
       2008-01-17 14:46:33 UTC (rev 3867)
@@ -691,8 +691,6 @@
   MokoNetworkPrivate *priv = self->priv;
   GError *error = NULL;
   
-  g_debug ("Start IO");
-  
   switch (condition) {
     case G_IO_IN :
       if (g_io_channel_read_chars (source, buf, sizeof (buf), &length, &error)
@@ -717,8 +715,6 @@
       g_warning ("Unhandled IO condition");
       break;
   }
-    
-  g_debug ("End IO");
 
   return TRUE;
 }




--- End Message ---
--- Begin Message ---
Author: chris
Date: 2008-01-17 16:24:45 +0100 (Thu, 17 Jan 2008)
New Revision: 3868

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h
Log:
        * src/sms-main.c: (new_clicked_cb):
        Don't clear the text input if the compose page is active

        * src/sms-compose.c: (page_shown):
        * src/sms-notes.c: (page_shown):
        * src/sms-utils.c: (hito_vcard_get_named_attributes),
        (hito_vcard_attribute_get_value_string),
        (sms_delete_selected_contact_messages),
        (sms_contacts_note_count_update):
        * src/sms-utils.h:
        Import two contacts-hito functions and use them to read numbers from
        EVCard instead of EContact


Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog        
2008-01-17 14:46:33 UTC (rev 3867)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog        
2008-01-17 15:24:45 UTC (rev 3868)
@@ -1,3 +1,18 @@
+2008-01-17  Chris Lord  <[EMAIL PROTECTED]>
+
+       * src/sms-main.c: (new_clicked_cb):
+       Don't clear the text input if the compose page is active
+
+       * src/sms-compose.c: (page_shown):
+       * src/sms-notes.c: (page_shown):
+       * src/sms-utils.c: (hito_vcard_get_named_attributes),
+       (hito_vcard_attribute_get_value_string),
+       (sms_delete_selected_contact_messages),
+       (sms_contacts_note_count_update):
+       * src/sms-utils.h:
+       Import two contacts-hito functions and use them to read numbers from
+       EVCard instead of EContact
+
 2008-01-14  Chris Lord  <[EMAIL PROTECTED]>
 
        * src/sms-main.c: (new_clicked_cb), (main):

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c
===================================================================
--- 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c    
    2008-01-17 14:46:33 UTC (rev 3867)
+++ 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c    
    2008-01-17 15:24:45 UTC (rev 3868)
@@ -27,13 +27,11 @@
 page_shown (SmsData *data)
 {
        GtkTreeModel *model;
+       GList *numbers, *n;
        EContact *contact;
        GdkPixbuf *photo;
        gchar *string;
-       gint i;
        
-       gboolean set = FALSE;
-       
        /* Make delete(-all) buttons insensitive */
        /* TODO: Replace these with more useful buttons? */
        gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button), FALSE);
@@ -77,28 +75,25 @@
        g_free (string);
        
        /* Fill number combo */
-       for (i = E_CONTACT_FIRST_PHONE_ID; i <= E_CONTACT_LAST_PHONE_ID; i++) {
-               const gchar *number = e_contact_get_const (
-                       contact, (EContactField)i);
+       numbers = hito_vcard_get_named_attributes (E_VCARD (contact), EVC_TEL);
+       for (n = numbers; n; n = n->next) {
+               gchar *number = hito_vcard_attribute_get_value_string (
+                       (EVCardAttribute *)n->data);
 
                if (!number) continue;
                
-               if (((i == E_CONTACT_PHONE_MOBILE) ||
-                    (i == E_CONTACT_PHONE_PRIMARY)) && (!set)) {
-                       gtk_entry_set_text (GTK_ENTRY (GTK_BIN (
-                               data->number_combo)->child), number);
-                       set = TRUE;
-               }
                gtk_combo_box_append_text (GTK_COMBO_BOX (data->number_combo),
                        number);
+               g_free (number);
        }
-       if (!set) {
-               gtk_entry_set_text (GTK_ENTRY (GTK_BIN (
-                       data->number_combo)->child),
-                       gtk_combo_box_get_active_text (
-                               GTK_COMBO_BOX (data->number_combo)));
-       }
+       g_list_free (numbers);
        
+       gtk_combo_box_set_active (GTK_COMBO_BOX (data->number_combo), 0);
+       gtk_entry_set_text (GTK_ENTRY (GTK_BIN (
+               data->number_combo)->child),
+               gtk_combo_box_get_active_text (
+                       GTK_COMBO_BOX (data->number_combo)));
+       
        g_object_unref (contact);
 }
 

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c   
2008-01-17 14:46:33 UTC (rev 3867)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c   
2008-01-17 15:24:45 UTC (rev 3868)
@@ -49,6 +49,9 @@
 static void
 new_clicked_cb (GtkToolButton *button, SmsData *data)
 {
+       if (gtk_notebook_get_current_page (GTK_NOTEBOOK (data->notebook)) ==
+           SMS_PAGE_COMPOSE) return;
+
        gtk_text_buffer_set_text (gtk_text_view_get_buffer (
                GTK_TEXT_VIEW (data->sms_textview)), "", -1);
 

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c  
2008-01-17 14:46:33 UTC (rev 3867)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c  
2008-01-17 15:24:45 UTC (rev 3868)
@@ -174,7 +174,7 @@
 {
        JanaStoreView *store_view;
        GtkAdjustment *hadjust, *vadjust;
-       gint i;
+       GList *numbers, *n;
 
        gboolean found_match = FALSE;
        EContact *contact = NULL;
@@ -246,17 +246,21 @@
                data->author_icon = g_object_ref (data->no_photo);
        
        store_view = jana_store_get_view (data->notes);
-       for (i = E_CONTACT_FIRST_PHONE_ID; i <= E_CONTACT_LAST_PHONE_ID; i++) {
-               const gchar *number = e_contact_get_const (
-                       contact, (EContactField)i);
+       numbers = hito_vcard_get_named_attributes (E_VCARD (contact), EVC_TEL);
+       for (n = numbers; n; n = n->next) {
+               gchar *number = hito_vcard_attribute_get_value_string (
+                       (EVCardAttribute *)n->data);
+               
                if (!number) continue;
                
                jana_store_view_add_match (store_view,
                        JANA_STORE_VIEW_AUTHOR, number);
                jana_store_view_add_match (store_view,
                        JANA_STORE_VIEW_RECIPIENT, number);
+               g_free (number);
                found_match = TRUE;
        }
+       g_list_free (numbers);
        
        if (found_match) {
                jana_gtk_note_store_set_view (JANA_GTK_NOTE_STORE (

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c  
2008-01-17 14:46:33 UTC (rev 3867)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c  
2008-01-17 15:24:45 UTC (rev 3868)
@@ -25,6 +25,59 @@
 #  include <config.h>
 #endif
 
+/* Following two functions taken from contacts hito branch, written by
+ * Ross Burton, copyright OpenedHand 2007
+ */
+GList *
+hito_vcard_get_named_attributes (EVCard *contact, const char *name)
+{
+  GList *attrs = NULL, *l;
+
+  g_return_val_if_fail (E_IS_VCARD (contact), NULL);
+  g_return_val_if_fail (name != NULL, NULL);
+
+  for (l = e_vcard_get_attributes (E_VCARD (contact)); l; l = l->next)
+  {
+    EVCardAttribute *attr;
+    const char *n;
+
+    attr = (EVCardAttribute *) l->data;
+    n = e_vcard_attribute_get_name (attr);
+
+    if (strcmp (n, name) == 0)
+      attrs = g_list_prepend (attrs, attr);
+  }
+
+  return g_list_reverse (attrs);
+}
+
+/*
+ * load the attribute value, returning a newly allocated semicolon seperated
+ * string for multivalue attributes
+ */
+gchar*
+hito_vcard_attribute_get_value_string (EVCardAttribute *attr)
+{
+  gchar *attr_value = NULL;
+  GList *l;
+  l = e_vcard_attribute_get_values (attr);
+  if (l)
+  {
+    attr_value = g_strdup (l->data);
+
+    while ((l = g_list_next (l)))
+    {
+      gchar *old = attr_value;
+      if (old)
+        attr_value = g_strdup_printf ("%s; %s", old, (gchar*) l->data);
+      else
+        attr_value = g_strdup (l->data);
+      g_free (old);
+    }
+  }
+  return attr_value;
+}
+
 void
 sms_clear_combo_box_text (GtkComboBox *combo)
 {
@@ -135,20 +188,28 @@
        gtk_widget_destroy (dialog);
 
        if (contact) {
-               gint i, j;
+               gint i;
+               GList *n, *numbers;
                
-               for (i = E_CONTACT_FIRST_PHONE_ID;
-                    i <= E_CONTACT_LAST_PHONE_ID; i++) {
+               numbers = hito_vcard_get_named_attributes (
+                       E_VCARD (contact), EVC_TEL);
+               
+               for (n = numbers; n; n = n->next) {
                        SmsNoteCountData *ncdata;
-                       const gchar *number = e_contact_get_const (
-                               contact, (EContactField)i);
+
+                       gchar *number = hito_vcard_attribute_get_value_string (
+                               (EVCardAttribute *)n->data);
+
                        if (!number) continue;
                        
                        ncdata = g_hash_table_lookup (data->note_count, number);
-                       if (!ncdata) continue;
+                       if (!ncdata) {
+                               g_free (number);
+                               continue;
+                       }
                        
-                       for (j = 0; j < 2; j++) {
-                               GList *uids = j ? ncdata->read : ncdata->unread;
+                       for (i = 0; i < 2; i++) {
+                               GList *uids = i ? ncdata->read : ncdata->unread;
                                for (; uids; uids = uids->next) {
                                        /* TODO: Add
                                         * jana_store_remove_component_from_uid
@@ -165,8 +226,10 @@
                        }
                        
                        g_hash_table_remove (data->note_count, number);
+                       g_free (number);
                }
                
+               g_list_free (numbers);
                g_object_unref (contact);
        } else {
                while (data->unassigned_notes) {
@@ -281,7 +344,7 @@
                return FALSE;
        
        do {
-               gint i;
+               GList *numbers, *n;
                EContact *contact;
                gchar *uid;
                gboolean unknown;
@@ -306,20 +369,25 @@
                
                unread = 0;
                read = 0;
-               for (i = E_CONTACT_FIRST_PHONE_ID;
-                    i <= E_CONTACT_LAST_PHONE_ID; i++) {
+               numbers = hito_vcard_get_named_attributes (
+                       E_VCARD (contact), EVC_TEL);
+               for (n = numbers; n; n = n->next) {
                        SmsNoteCountData *ncdata;
-                       const gchar *number = e_contact_get_const (
-                               contact, (EContactField)i);
+                       
+                       gchar *number = hito_vcard_attribute_get_value_string (
+                               (EVCardAttribute *)n->data);
+                       
                        if (!number) continue;
                        
                        ncdata = g_hash_table_lookup (data->note_count, number);
+                       g_free (number);
                        if (!ncdata) continue;
                        
                        read += g_list_length (ncdata->read);
                        unread += g_list_length (ncdata->unread);
                        ncdata->assigned = assignment;
                }
+               g_list_free (numbers);
                
                set_message_count (data, &iter, read, unread, FALSE);
        } while (gtk_tree_model_iter_next (data->contacts_store, &iter));

Modified: 
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h  
2008-01-17 14:46:33 UTC (rev 3867)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h  
2008-01-17 15:24:45 UTC (rev 3868)
@@ -22,6 +22,9 @@
 
 #include "sms.h"
 
+GList *hito_vcard_get_named_attributes (EVCard *contact, const char *name);
+gchar *hito_vcard_attribute_get_value_string (EVCardAttribute *attr);
+
 void sms_clear_combo_box_text (GtkComboBox *combo);
 EContact *sms_get_selected_contact (SmsData *data);
 GdkPixbuf *sms_contact_load_photo (EContact *contact);




--- End Message ---
_______________________________________________
commitlog mailing list
commitlog@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to