Small fix to contact parsing.
[jenirok] / src / common / contactmanager.cpp
index 974c7a5..dbc8916 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #include <QtCore/QDebug>
+#include <QtCore/QRegExp>
 #include "contactmanager.h"
 
 
@@ -73,38 +74,81 @@ bool ContactManager::addContact(Contact const& contact)
 
     EContact* newContact = e_contact_new();
     GError* error = NULL;
-    //EContactAddress* addr = new EContactAddress;
+    EContactAddress* addr = NULL;
 
-    if(!contact.name.isEmpty())
+    char* firstname = contact.name.firstname.toUtf8().data();
+    char* surname = contact.name.surname.toUtf8().data();
+
+    e_contact_set(newContact, E_CONTACT_GIVEN_NAME, (gpointer)firstname);
+    e_contact_set(newContact, E_CONTACT_FAMILY_NAME, (gpointer)surname);
+
+    if(!contact.city.isEmpty() || !contact.street.isEmpty())
     {
-        char* name = contact.name.toLatin1().data();
-        e_contact_set(newContact, E_CONTACT_FULL_NAME, (gpointer)name);
+        addr = g_new0 (EContactAddress, 1);
+        addr->address_format = g_strdup("");
+        addr->po = g_strdup("");
+        addr->ext = g_strdup("");
+        addr->region = g_strdup("");
+        addr->code = g_strdup(contact.zipCode.toUtf8().data());
+        addr->country = g_strdup(contact.country.toUtf8().data());
+        addr->street = g_strdup(contact.street.toUtf8().data());
+        addr->locality = g_strdup(contact.city.toUtf8().data());
+        e_contact_set(newContact, E_CONTACT_ADDRESS_OTHER, (gpointer)addr);
     }
 
-    // Doesn't work for some reason
-    /*if(!contact.city.isEmpty() || !contact.street.isEmpty())
-       {
-               addr->street = contact.street.toLatin1().data();
-               addr->locality = contact.city.toLatin1().data();
-               e_contact_set(newContact, E_CONTACT_ADDRESS_HOME, (gpointer)addr);
-       }*/
-
     if(!contact.number.isEmpty())
     {
-        char* number = contact.number.toLatin1().data();
-        e_contact_set(newContact, E_CONTACT_PHONE_HOME, (gpointer)number);
+        char* number = contact.number.toUtf8().data();
+        e_contact_set(newContact, E_CONTACT_PHONE_OTHER, (gpointer)number);
     }
 
+    bool ret = true;
+
     if(!e_book_add_contact(book_, newContact, &error))
     {
-        qDebug() << "Couldn't add contact: %s" <<  error->message;
+        qDebug() << "Couldn't add contact: " <<  error->message;
         g_error_free(error);
-        return false;
+        ret = false;
     }
 
-    return true;
+    if(addr)
+    {
+        e_contact_address_free(addr);
+    }
+
+    return ret;
 }
 
+void ContactManager::stringToName(QString const& strname, ContactManager::Name& name)
+{
+    EContactName* ename = e_contact_name_from_string(strname.toUtf8().data());
+
+    if(ename)
+    {
+        static QRegExp check("([A-Z]+)");
+        QString additional = QString::fromUtf8(ename->additional);
+        QString firstname = QString::fromUtf8(ename->given);
+        QString surname = QString::fromUtf8(ename->family);
+
+        if(additional.isEmpty() && check.indexIn(firstname, 1) == -1 && check.indexIn(surname, 1) == -1 && firstname != surname)
+        {
+            name.firstname = firstname;
+            name.surname = surname;
+        }
+        else
+        {
+            name.surname = strname;
+        }
+
+        e_contact_name_free(ename);
+    }
+    else
+    {
+        name.surname = strname;
+    }
+}
+
+
 bool ContactManager::load()
 {
     if(book_)