New addressbook method modest_address_book_has_address.
authorJose Dapena Paz <jdapena@igalia.com>
Wed, 26 Nov 2008 11:55:38 +0000 (11:55 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Wed, 26 Nov 2008 11:55:38 +0000 (11:55 +0000)
Added new method modest_addressbook_has_address, that should allow us
to only show the addresses not present in addressbook to add them.

pmo-trunk-r6412

src/gnome/modest-address-book.c
src/hildon2/modest-address-book.c
src/hildon2/modest-msg-view-window.c
src/maemo/modest-address-book.c
src/modest-address-book.h

index 59d3d39..eaf4e02 100644 (file)
@@ -49,3 +49,10 @@ modest_address_book_check_names (ModestRecptEditor *editor, gboolean update_addr
        g_message (__FUNCTION__);
        return TRUE;
 }
+
+gboolean
+modest_address_book_has_address (const gchar *address)
+{
+       g_message (__FUNCTION__);
+       return FALSE;
+}
index bb26fc2..a542afc 100644 (file)
@@ -992,3 +992,45 @@ unquote_string (const gchar *str)
        return g_string_free (buffer, FALSE);
 
 }
+
+gboolean
+modest_address_book_has_address (const gchar *address)
+{
+       EBookQuery *query;
+       GList *contacts = NULL;
+       GError *err = NULL;
+       gchar *email;
+       gboolean result;
+
+       g_return_val_if_fail (address, FALSE);
+       
+       if (!book) {
+               if (!open_addressbook ()) {
+                       g_return_val_if_reached (FALSE);
+               }
+       }
+       
+       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, email);
+       if (!e_book_get_contacts (book, query, &contacts, &err)) {
+               g_printerr ("modest: failed to get contacts: %s",
+                           err ? err->message : "<unknown>");
+               if (err)
+                       g_error_free (err);
+               return FALSE;
+       }
+       e_book_query_unref (query);
+
+       result = (contacts != NULL);
+       if (contacts) {
+               g_list_foreach (contacts, (GFunc)unref_gobject, NULL);
+               g_list_free (contacts);
+       }
+       
+       g_free (email);
+
+       return result;
+}
index 3fc077b..d7c6b7f 100644 (file)
@@ -3074,7 +3074,11 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
 
                selector = hildon_touch_selector_new_text ();
                for (node = recipients; node != NULL; node = g_slist_next (node)) {
-                       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), (const gchar *) node->data);
+                       if (!modest_address_book_has_address ((const gchar *) node->data)) {
+                               hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), 
+                                                                  (const gchar *) node->data);
+                               contacts_to_add = TRUE;
+                       }
                }
 
                hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (picker_dialog), 
index 61f9285..163046e 100644 (file)
@@ -996,3 +996,45 @@ unquote_string (const gchar *str)
        return g_string_free (buffer, FALSE);
 
 }
+
+gboolean
+modest_address_book_has_address (const gchar *address)
+{
+       EBookQuery *query;
+       GList *contacts = NULL;
+       GError *err = NULL;
+       gchar *email;
+       gboolean result;
+
+       g_return_val_if_fail (address, FALSE);
+       
+       if (!book) {
+               if (!open_addressbook ()) {
+                       g_return_val_if_reached (FALSE);
+               }
+       }
+       
+       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, email);
+       if (!e_book_get_contacts (book, query, &contacts, &err)) {
+               g_printerr ("modest: failed to get contacts: %s",
+                           err ? err->message : "<unknown>");
+               if (err)
+                       g_error_free (err);
+               return FALSE;
+       }
+       e_book_query_unref (query);
+
+       result = (contacts != NULL);
+       if (contacts) {
+               g_list_foreach (contacts, (GFunc)unref_gobject, NULL);
+               g_list_free (contacts);
+       }
+       
+       g_free (email);
+
+       return result;
+}
index 023b7b0..418b323 100644 (file)
@@ -67,6 +67,17 @@ modest_address_book_select_addresses (ModestRecptEditor *editor);
 gboolean
 modest_address_book_check_names (ModestRecptEditor *editor, gboolean update_addressbook);
 
+/**
+ * modest_address_book_has_address:
+ * @address: a string
+ *
+ * Checks if an address is already stored in addressbook.
+ *
+ * Returns: %TRUE is @address is in addressbook. %FALSE otherwise.
+ */
+gboolean
+modest_address_book_has_address (const gchar *address);
+
 
 
 #endif /* __MODEST_ADDRESS_BOOK_H__ */