merge wrt-plugins-tizen_0.2.0-3
[platform/framework/web/wrt-plugins-tizen.git] / src / platform / Tizen / Contact / ContactWrapper.cpp
index afd7115..891ddf5 100755 (executable)
@@ -26,6 +26,7 @@
 #include <pcrecpp.h>
 #include <dpl/log/log.h>
 #include <Commons/Exception.h>
+#include <Commons/Regex.h>
 #include "ContactWrapper.h"
 #include "AddressBook.h"
 #include "Contact.h"
@@ -203,11 +204,11 @@ bool ContactWrapper::convertToAbstractObject()
 
        charValue = contacts_svc_value_get_str(value, CTS_BASE_VAL_IMG_PATH_STR);
        if (charValue)
-               m_abstractContact->setPhotoURI(charValue);
+               m_abstractContact->setPhotoURI(convertPathToUri(charValue));
 
        charValue = contacts_svc_value_get_str(value, CTS_BASE_VAL_RINGTONE_PATH_STR);
        if (charValue)
-               m_abstractContact->setRingtoneURI(charValue);
+               m_abstractContact->setRingtoneURI(convertPathToUri(charValue));
 
        charValue = contacts_svc_value_get_str(value, CTS_BASE_VAL_NOTE_STR);
        if (charValue)
@@ -306,9 +307,9 @@ bool ContactWrapper::convertToAbstractBaseData()
                if (charValue)
                        contactName->setPrefix(charValue);
 
-               charValue = contacts_svc_value_get_str(value, CTS_NAME_VAL_SUFFIX_STR);
-               if (charValue)
-                       contactName->setPhoneticName(charValue);
+               //charValue = contacts_svc_value_get_str(value, CTS_NAME_VAL_SUFFIX_STR);
+               //if (charValue)
+               //      contactName->setPhoneticName(charValue);
 
        }
        else if (errorCode != CTS_ERR_NO_DATA || value == NULL)
@@ -316,6 +317,32 @@ bool ContactWrapper::convertToAbstractBaseData()
                return false;
        }
 
+//     errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_BASE_INFO_VALUE, &value);
+//     if (CTS_SUCCESS == errorCode && value != NULL)
+//     {
+//             const char *charValue = NULL;
+//
+//             charValue = contacts_svc_value_get_str(value, CTS_BASE_VAL_IMG_PATH_STR);
+//             if (charValue)
+//                     m_abstractContact->setPhotoURI(convertPathToUri(charValue));
+//
+//             charValue = contacts_svc_value_get_str(value, CTS_BASE_VAL_RINGTONE_PATH_STR);
+//             if (charValue)
+//                     m_abstractContact->setRingtoneURI(convertPathToUri(charValue));
+//
+//             bool boolValue = contacts_svc_value_get_bool(value, CTS_BASE_VAL_FAVORITE_BOOL);
+//             if (boolValue)
+//                     m_abstractContact->setIsFavorite(boolValue);
+//
+//             charValue = contacts_svc_value_get_str(value, CTS_BASE_VAL_NOTE_STR);
+//             if (charValue)
+//                     m_abstractContact->addNote(charValue);
+//     }
+//     else if (errorCode != CTS_ERR_NO_DATA || value == NULL)
+//     {
+//             return false;
+//     }
+
        return true;
 }
 
@@ -345,22 +372,12 @@ bool ContactWrapper::convertToAbstractAddressObject()
                        addresses->push_back(address);
 
                        int type = contacts_svc_value_get_int(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_TYPE_INT);
-                       switch (type)
-                       {
-                       case CTS_ADDR_TYPE_NONE:
+                       if(type & CTS_ADDR_TYPE_POSTAL) // TODO to be checked
                                address->addType(CONTACT_ADDRESS_TYPE_PREF);
-                               break;
-                       case CTS_ADDR_TYPE_HOME:
+                       if(type & CTS_ADDR_TYPE_HOME)
                                address->addType(CONTACT_ADDRESS_TYPE_HOME);
-                               break;
-                       case CTS_ADDR_TYPE_WORK:
+                       if(type & CTS_ADDR_TYPE_WORK)
                                address->addType(CONTACT_ADDRESS_TYPE_WORK);
-                               break;
-                       default:
-                               LogError("invalid address type");
-                               address->addType(CONTACT_ADDRESS_TYPE_PREF);
-                               break;
-                       }
 
                        const char *charValue = NULL;
 
@@ -637,22 +654,13 @@ bool ContactWrapper::convertToAbstractEmailObject()
                        emailAddresses->push_back(email);
 
                        int type = contacts_svc_value_get_int(static_cast<CTSvalue*>(emailList->data), CTS_EMAIL_VAL_TYPE_INT);
-                       switch (type)
-                       {
-                       case CTS_EMAIL_TYPE_NONE:
+
+                       if(type | CTS_EMAIL_TYPE_NONE)
                                email->addType(CONTACT_EMAIL_TYPE_PREF);
-                               break;
-                       case CTS_EMAIL_TYPE_HOME:
+                       if(type | CTS_EMAIL_TYPE_HOME)
                                email->addType(CONTACT_EMAIL_TYPE_HOME);
-                               break;
-                       case CTS_EMAIL_TYPE_WORK:
+                       if(type | CTS_EMAIL_TYPE_WORK)
                                email->addType(CONTACT_EMAIL_TYPE_WORK);
-                               break;
-                       default:
-                               LogError("invalid phone type");
-                               email->addType(CONTACT_EMAIL_TYPE_PREF);
-                               break;
-                       }
 
                        const char *charValue = NULL;
 
@@ -697,55 +705,36 @@ bool ContactWrapper::convertToAbstractPhoneObject()
                        phoneNumbers->push_back(phoneNumber);
 
                        int type = contacts_svc_value_get_int(static_cast<CTSvalue*>(phoneList->data), CTS_NUM_VAL_TYPE_INT);
-                       switch (type)
-                       {
-                       case CTS_NUM_TYPE_WORK:
+                       if(type & CTS_NUM_TYPE_WORK)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_WORK);
-                               break;
-                       case CTS_NUM_TYPE_NONE:
+                       if(type & CTS_NUM_TYPE_NONE)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_PREF);
-                               break;
-                       case CTS_NUM_TYPE_HOME:
+                       if(type & CTS_NUM_TYPE_HOME)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_HOME);
-                               break;
-                       case CTS_NUM_TYPE_FAX:
+                       if(type & CTS_NUM_TYPE_FAX)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_FAX);
-                               break;
-                       case CTS_NUM_TYPE_CELL:
+                       if(type & CTS_NUM_TYPE_CELL)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_CELL);
-                               break;
-                       case CTS_NUM_TYPE_PAGER:
+                       if(type & CTS_NUM_TYPE_PAGER)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_PAGER);
-                               break;
-                       case CTS_NUM_TYPE_CAR:
+                       if(type & CTS_NUM_TYPE_CAR)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_CAR);
-                               break;
-                       case CTS_NUM_TYPE_VOICE:
+                       if(type & CTS_NUM_TYPE_VOICE)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_VOICE);
-                               break;
-                       case CTS_NUM_TYPE_MSG:
+                       if(type & CTS_NUM_TYPE_MSG)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_MSG);
-                               break;
-                       case CTS_NUM_TYPE_BBS:
+                       if(type & CTS_NUM_TYPE_BBS)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_BBS);
-                               break;
-                       case CTS_NUM_TYPE_MODEM:
-                               phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_MODEM);
-                               break;
-                       case CTS_NUM_TYPE_ISDN:
+                       if(type & CTS_NUM_TYPE_ISDN)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_ISDN);
-                               break;
-                       case CTS_NUM_TYPE_VIDEO:
+                       if(type & CTS_NUM_TYPE_VIDEO)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_VIDEO);
-                               break;
-                       case CTS_NUM_TYPE_PCS:
+                       if(type & CTS_NUM_TYPE_PCS)
                                phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_PCS);
-                               break;
-                       default:
-                               LogError("invalid phone type");
-                               phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_PREF);
-                               break;
-                       }
+                       if(type & CTS_NUM_TYPE_WORK)
+                               phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_WORK);
+                       if(type & CTS_NUM_TYPE_WORK)
+                               phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_WORK);
 
                        const char *charValue = NULL;
 
@@ -1743,17 +1732,17 @@ bool ContactWrapper::convertToPlatformAddressObject()
                                switch (types->at(j))
                                {
                                case CONTACT_ADDRESS_TYPE_PREF:
-                                       type = CTS_ADDR_TYPE_NONE;
+                                       type |= CTS_ADDR_TYPE_POSTAL;   // TODO To be checked
                                        break;
                                case CONTACT_ADDRESS_TYPE_WORK:
-                                       type = CTS_ADDR_TYPE_WORK;
+                                       type |= CTS_ADDR_TYPE_WORK;
                                        break;
                                case CONTACT_ADDRESS_TYPE_HOME:
-                                       type = CTS_ADDR_TYPE_HOME;
+                                       type |= CTS_ADDR_TYPE_HOME;
                                        break;
                                default:
                                        LogError("invalid address type");
-                                       type = CTS_EMAIL_TYPE_NONE;
+                                       type |= CTS_EMAIL_TYPE_NONE;
                                        break;
                                }
                        }
@@ -1835,7 +1824,7 @@ bool ContactWrapper::convertToPlatformBaseData()
                                        || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_ADDITION_STR, contactName->getMiddleName().c_str())
                                        || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_DISPLAY_STR, contactName->getDisplayName().c_str())
                                        || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_PREFIX_STR, contactName->getPrefix().c_str())
-                                       || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_SUFFIX_STR, contactName->getPhoneticName().c_str())
+                                       // || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_SUFFIX_STR, contactName->getPhoneticName().c_str())
                                        || CTS_SUCCESS != contacts_svc_struct_store_value(m_platformContact, CTS_CF_NAME_VALUE, value))
                        {
                                contacts_svc_value_free(value);
@@ -1855,7 +1844,7 @@ bool ContactWrapper::convertToPlatformBaseData()
                                || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_LAST_STR, contactName->getLastName().c_str())
                                || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_ADDITION_STR, contactName->getMiddleName().c_str())
                                || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_DISPLAY_STR, contactName->getDisplayName().c_str())
-                               || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_SUFFIX_STR, contactName->getPhoneticName().c_str())
+                               // || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_SUFFIX_STR, contactName->getPhoneticName().c_str())
                                || CTS_SUCCESS != contacts_svc_value_set_str(value, CTS_NAME_VAL_PREFIX_STR, contactName->getPrefix().c_str()))
                {
                        contacts_svc_value_free(value);
@@ -1877,17 +1866,20 @@ bool ContactWrapper::convertToPlatformBaseData()
                {
                        if (m_abstractContact->getPhotoURIIsSet())
                        {
-                               if (CTS_SUCCESS != contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_IMG_PATH_STR, m_abstractContact->getPhotoURI().c_str()))
+                               if (CTS_SUCCESS != contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_IMG_PATH_STR, convertUriToPath(m_abstractContact->getPhotoURI()).c_str()))
                                {
                                        contacts_svc_value_free(baseinfo);
                                        return false;
                                }
                        }
 
-                       if (CTS_SUCCESS != contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_RINGTONE_PATH_STR, m_abstractContact->getRingtoneURI().c_str()))
+                       if (m_abstractContact->getRingtoneURIIsSet())
                        {
-                               contacts_svc_value_free(baseinfo);
-                               return false;
+                               if (CTS_SUCCESS != contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_RINGTONE_PATH_STR, convertUriToPath(m_abstractContact->getRingtoneURI()).c_str()))
+                               {
+                                       contacts_svc_value_free(baseinfo);
+                                       return false;
+                               }
                        }
 
                        if (CTS_SUCCESS != contacts_svc_value_set_bool(baseinfo, CTS_BASE_VAL_FAVORITE_BOOL, m_abstractContact->getIsFavorite()))
@@ -1924,19 +1916,33 @@ bool ContactWrapper::convertToPlatformBaseData()
                        strOldImagePath = static_cast<string>(oldimgpath);
                }
 
-               string strNewImagePath = m_abstractContact->getPhotoURI();
+               string strNewImagePath = convertUriToPath(m_abstractContact->getPhotoURI());
                if (strOldImagePath != strNewImagePath)
                {
                        if (CTS_SUCCESS != contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_IMG_PATH_STR, strNewImagePath.c_str()))
                        {
-                               contacts_svc_value_free(value);
+                               contacts_svc_value_free(baseinfo);
                                return false;
                        }
                }
 
-               if (CTS_SUCCESS != contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_RINGTONE_PATH_STR, m_abstractContact->getRingtoneURI().c_str()))
+               const char * oldringtonepath = NULL;
+               oldringtonepath = contacts_svc_value_get_str(baseinfo, CTS_BASE_VAL_IMG_PATH_STR);
+
+               string strOldRingtonePath = "";
+               if (NULL != oldringtonepath)
+               {
+                       strOldRingtonePath = static_cast<string>(oldringtonepath);
+               }
+
+               string strNewRingtonePath = convertUriToPath(m_abstractContact->getRingtoneURI());
+               if (strOldRingtonePath != strNewRingtonePath)
                {
-                       return false;
+                       if (CTS_SUCCESS != contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_RINGTONE_PATH_STR, strNewRingtonePath.c_str()))
+                       {
+                               contacts_svc_value_free(baseinfo);
+                               return false;
+                       }
                }
 
                if(m_abstractContact->getNotesNum() > 0)
@@ -1957,7 +1963,7 @@ bool ContactWrapper::convertToPlatformBaseData()
                }
 
                contacts_svc_struct_store_value(m_platformContact, CTS_CF_BASE_INFO_VALUE, baseinfo);
-               contacts_svc_value_free(value);
+               contacts_svc_value_free(baseinfo);
        }
        /*
         //save company information
@@ -2015,6 +2021,30 @@ void ContactWrapper::printAbstractObject()
 {
 }
 
+string ContactWrapper::convertUriToPath(string str) const
+{
+       string result;
+
+       if(validate("^file\\:///[a-zA-Z]{2,3}(/\\S*)?$", str, VALIDATE_MATCH_CASELESS))
+               result = str.substr(string("file://").size());
+       else if(validate("^/[a-zA-Z]{2,3}(/\\S*)?$", str, VALIDATE_MATCH_CASELESS))
+               result = str;
+
+       return result;
+}
+
+string ContactWrapper::convertPathToUri(string str) const
+{
+       string result;
+
+       if(validate("^/[a-zA-Z]{2,3}(/\\S*)?$", str, VALIDATE_MATCH_CASELESS))
+               result = "file://" + str;
+       else if(validate("^file\\:///[a-zA-Z]{2,3}(/\\S*)?$", str, VALIDATE_MATCH_CASELESS))
+               result = str;
+
+       return result;
+}
+
 } // Contact
 } // Platform
 } // TizenApis