* src/maemo/modest-address-book.c:
[modest] / src / maemo / modest-address-book.c
index e8e6c63..9b3541f 100644 (file)
@@ -586,6 +586,7 @@ add_to_address_book (const gchar* address)
        EBookQuery *query;
        GList *contacts = NULL;
        GError *err = NULL;
+       gchar *email;
        
        g_return_val_if_fail (address, FALSE);
        
@@ -593,8 +594,10 @@ add_to_address_book (const gchar* address)
                open_addressbook ();
        
        g_return_val_if_fail (book, FALSE);
+
+       email = modest_text_utils_get_email_address (address);
        
-       query = e_book_query_field_test (E_CONTACT_EMAIL, E_BOOK_QUERY_IS, address);
+       query = e_book_query_field_test (E_CONTACT_EMAIL, E_BOOK_QUERY_IS, email);
        if (!e_book_get_contacts (book, query, &contacts, &err)) {
                g_printerr ("modest: failed to get contacts: %s",
                            err ? err->message : "<unknown>");
@@ -616,15 +619,37 @@ add_to_address_book (const gchar* address)
        } else {
                /* it's not yet in the addressbook, add it now! */
                EContact *new_contact = e_contact_new ();
-               e_contact_set (new_contact, E_CONTACT_EMAIL_1, (const gpointer)address);
+               gchar *display_address;
+               display_address = g_strdup (address);
+               if (display_address) {
+                       modest_text_utils_get_display_address (display_address);
+                       if ((display_address[0] != '\0') && (strlen (display_address) != strlen (address)))
+                               e_contact_set (new_contact, E_CONTACT_FULL_NAME, (const gpointer)display_address);
+               }
+               e_contact_set (new_contact, E_CONTACT_EMAIL_1, (const gpointer)email);
+               g_free (display_address);
                commit_contact (new_contact, TRUE);
                g_debug ("%s added to address book", address);
                g_object_unref (new_contact);
        }
 
+       g_free (email);
+
        return TRUE;
 }
 
+static gboolean
+show_check_names_banner (gpointer userdata)
+{
+       GtkWidget **banner = (GtkWidget **) userdata;
+
+       gdk_threads_enter ();
+       *banner = modest_platform_animation_banner (NULL, NULL, _("mail_ib_checking_names"));
+       gdk_threads_leave ();
+
+       return FALSE;
+}
+
 gboolean
 modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean update_addressbook)
 {
@@ -636,11 +661,11 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean updat
        gint offset_delta = 0;
        gint last_length;
        GtkTextIter start_iter, end_iter;
+       guint banner_timeout;
+       GtkWidget *banner = NULL;
 
        g_return_val_if_fail (MODEST_IS_RECPT_EDITOR (recpt_editor), FALSE);
 
-       modest_platform_information_banner (NULL, NULL, _("mail_ib_checking_names"));
-
        recipients = modest_recpt_editor_get_recipients (recpt_editor);
        last_length = g_utf8_strlen (recipients, -1);
        modest_text_utils_get_addresses_indexes (recipients, &start_indexes, &end_indexes);
@@ -654,6 +679,8 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean updat
                }
        }
 
+       banner_timeout = g_timeout_add (500, show_check_names_banner, &banner);
+
        current_start = start_indexes;
        current_end = end_indexes;
        buffer = modest_recpt_editor_get_buffer (recpt_editor);
@@ -762,6 +789,14 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean updat
        g_slist_free (start_indexes);
        g_slist_free (end_indexes);
 
+       g_source_remove (banner_timeout);
+       if (banner != NULL) {
+               gtk_widget_destroy (banner);
+               banner = NULL;
+       } else {
+               g_source_remove (banner_timeout);
+       }
+
        return result;
 
 }