--- a/phonebookui/phonebookservices/src/cntservicehandler.cpp Mon May 03 12:24:20 2010 +0300
+++ b/phonebookui/phonebookservices/src/cntservicehandler.cpp Fri May 14 15:42:23 2010 +0300
@@ -24,6 +24,7 @@
#include <QPixmap>
#include <QFile>
+#include <QUrl>
/* NOTE! THIS SERVICE WILL BE RENAMED TO com.nokia.services.phonebook.Services */
CntServiceHandler::CntServiceHandler(QObject *parent):
@@ -33,23 +34,22 @@
publishAll();
// Definition names supported in symbian back-end
- QString def("%1");
- m_definitionNames << def.arg(QContactName::DefinitionName);
- m_definitionNames << def.arg(QContactNickname::DefinitionName);
- m_definitionNames << def.arg(QContactPhoneNumber::DefinitionName);
- m_definitionNames << def.arg(QContactEmailAddress::DefinitionName);
- m_definitionNames << def.arg(QContactAddress::DefinitionName);
- m_definitionNames << def.arg(QContactUrl::DefinitionName);
- m_definitionNames << def.arg(QContactBirthday::DefinitionName);
- m_definitionNames << def.arg(QContactOrganization::DefinitionName);
- m_definitionNames << def.arg(QContactSyncTarget::DefinitionName);
- m_definitionNames << def.arg(QContactNote::DefinitionName);
- m_definitionNames << def.arg(QContactFamily::DefinitionName);
- m_definitionNames << def.arg(QContactAvatar::DefinitionName);
- m_definitionNames << def.arg(QContactAnniversary::DefinitionName);
- m_definitionNames << def.arg(QContactGeoLocation::DefinitionName);
- m_definitionNames << def.arg(QContactGender::DefinitionName);
- m_definitionNames << def.arg(QContactOnlineAccount::DefinitionName);
+ m_definitionNames << QContactName::DefinitionName;
+ m_definitionNames << QContactNickname::DefinitionName;
+ m_definitionNames << QContactPhoneNumber::DefinitionName;
+ m_definitionNames << QContactEmailAddress::DefinitionName;
+ m_definitionNames << QContactAddress::DefinitionName;
+ m_definitionNames << QContactUrl::DefinitionName;
+ m_definitionNames << QContactBirthday::DefinitionName;
+ m_definitionNames << QContactOrganization::DefinitionName;
+ m_definitionNames << QContactSyncTarget::DefinitionName;
+ m_definitionNames << QContactNote::DefinitionName;
+ m_definitionNames << QContactFamily::DefinitionName;
+ m_definitionNames << QContactAvatar::DefinitionName;
+ m_definitionNames << QContactAnniversary::DefinitionName;
+ m_definitionNames << QContactGeoLocation::DefinitionName;
+ m_definitionNames << QContactGender::DefinitionName;
+ m_definitionNames << QContactOnlineAccount::DefinitionName;
}
CntServiceHandler::~CntServiceHandler()
@@ -145,39 +145,35 @@
// Use the resulting document(s)...
QVersitContactImporter importer;
QList<QVersitDocument> versitDocuments = reader.results();
- if(versitDocuments.count() > 0)
- {
- contact = importer.importContacts(versitDocuments).first();
- }
+ if (versitDocuments.count() > 0
+ && importer.importDocuments(versitDocuments))
+ {
+ QList<QContact> contacts = importer.contacts();
+ if (contacts.count() > 0)
+ contact = contacts.first();
+ }
file.close();
- // Save photo to image file
- // image file used in phonebook to generate thumbnail
- QList<QContactAvatar> details = contact.details<QContactAvatar>();
- if (details.count() > 0)
+ // Save thumbnail images
+ QList<QContactThumbnail> details = contact.details<QContactThumbnail>();
+ for (int i = 0;i < details.count();i++)
+ {
+ if (!details.at(i).thumbnail().isNull())
{
- for (int i = 0;i < details.count();i++)
+ QString imagepath;
+ QPixmap pixmap = QPixmap::fromImage(details.at(i).thumbnail());
+ if (imageUtility.createImage(pixmap,imagepath))
{
- if (details.at(i).subType() == QContactAvatar::SubTypeImage)
- {
- if(!details.at(i).pixmap().isNull())
- {
- int err;
- QString imagepath;
- QPixmap pixmap(details.at(i).pixmap());
- if(imageUtility.createImage(pixmap,imagepath,err))
- {
- // Update contact detail
- QContactAvatar detail=details.at(i);
- detail.setAvatar(imagepath);
- contact.saveDetail(&detail);
- }
- }
- }
+ // Update contact detail
+ QContactAvatar detail=details.at(i);
+ detail.setImageUrl(imagepath);
+ contact.saveDetail(&detail);
}
}
- removeDetails(contact);
- removeFields(contact);
+ }
+
+ removeNotSupportedDetails(contact);
+ removeNotSupportedFields(contact);
emit launchEditor(contact);
mCurrentRequestIndex = setCurrentRequestAsync();
@@ -186,245 +182,85 @@
/*
* Remove details not supported in symbian back-end.
*/
-void CntServiceHandler::removeDetails(QContact& contact)
+void CntServiceHandler::removeNotSupportedDetails(QContact& contact)
{
// Check definition map, remove details not supported
for (int i=0; i < contact.details().count(); i++)
- {
+ {
if (!m_definitionNames.contains(contact.details().at(i).definitionName()))
- {
+ {
QContactDetail detail= contact.details().at(i);
contact.removeDetail(&detail);
- }
}
+ }
}
/*
* Remove fields not supported in symbian back-end.
*/
-void CntServiceHandler::removeFields(QContact& contact)
+void CntServiceHandler::removeNotSupportedFields(QContact& contact)
{
- // Replace contact
QContactManager cm("symbian");
+
+ // Not all fields are supported in symbian back-end
+ // Remove not supported fields
for (int i=0; i < contact.details().count(); i++)
- {
+ {
QContactDetail detail = contact.details().at(i);
- if(detail.definitionName() == QContactBirthday::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactBirthday saveBod;
- QContactBirthday bodDetail = static_cast<QContactBirthday>(detail);
-
- if(!bodDetail.date().isNull())
- saveBod.setDate(bodDetail.date());
-
- contact.removeDetail(&bodDetail);
- contact.saveDetail(&saveBod);
- }
- else if(detail.definitionName() == QContactNickname::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactNickname saveName;
- QContactNickname nameDetail = static_cast<QContactNickname>(detail);
-
- if(!nameDetail.nickname().isEmpty())
- saveName.setNickname(nameDetail.nickname());
-
- contact.removeDetail(&nameDetail);
- contact.saveDetail(&saveName);
- }
- else if(detail.definitionName() == QContactNote::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactNote saveNote;
- QContactNote noteDetail = static_cast<QContactNote>(detail);
-
- if(!noteDetail.note().isEmpty())
- saveNote.setNote(noteDetail.note());
-
- contact.removeDetail(¬eDetail);
- contact.saveDetail(&saveNote);
- }
- else if(detail.definitionName() == QContactOrganization::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactOrganization saveOrg;
- QContactOrganization orgDetail = static_cast<QContactOrganization>(detail);
-
- if(!orgDetail.name().isEmpty())
- saveOrg.setName(orgDetail.name());
- if(!orgDetail.title().isEmpty())
- saveOrg.setTitle(orgDetail.title());
- if(!orgDetail.assistantName().isEmpty())
- saveOrg.setAssistantName(orgDetail.assistantName());
- if(!orgDetail.department().isEmpty())
- saveOrg.setDepartment(orgDetail.department());
-
- if(orgDetail.contexts().size() > 0
- && (orgDetail.contexts().contains(QContactDetail::ContextHome)
- || orgDetail.contexts().contains(QContactDetail::ContextWork)))
- {
- saveOrg.setContexts(orgDetail.contexts());
- }
-
- contact.removeDetail(&orgDetail);
- contact.saveDetail(&saveOrg);
- }
- else if(detail.definitionName() == QContactAddress::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactAddress saveAddr;
+ if (detail.definitionName() == QContactAddress::DefinitionName)
+ {
QContactAddress addrDetail = static_cast<QContactAddress>(detail);
- if(!addrDetail.street().isEmpty())
- saveAddr.setStreet(addrDetail.street());
- if(!addrDetail.locality().isEmpty())
- saveAddr.setLocality(addrDetail.locality());
- if(!addrDetail.region().isEmpty())
- saveAddr.setRegion(addrDetail.region());
- if(!addrDetail.postcode().isEmpty())
- saveAddr.setPostcode(addrDetail.postcode());
- if(!addrDetail.country().isEmpty())
- saveAddr.setCountry(addrDetail.country());
- if(!addrDetail.postOfficeBox().isEmpty())
- saveAddr.setPostOfficeBox(addrDetail.postOfficeBox());
-
- if(addrDetail.contexts().size() > 0
- && (addrDetail.contexts().contains(QContactDetail::ContextHome)
- || addrDetail.contexts().contains(QContactDetail::ContextWork)))
- {
- saveAddr.setContexts(addrDetail.contexts());
- }
-
- contact.removeDetail(&addrDetail);
- contact.saveDetail(&saveAddr);
- }
- else if(detail.definitionName() == QContactAnniversary::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactAnniversary saveAnniv;
+ // Sub-types not supported
+ if (detail.removeValue(QContactAddress::FieldSubTypes))
+ contact.saveDetail(&detail);
+ }
+ else if (detail.definitionName() == QContactAnniversary::DefinitionName)
+ {
QContactAnniversary annivDetail = static_cast<QContactAnniversary>(detail);
- if(!annivDetail.originalDate().isNull())
- saveAnniv.setOriginalDate(annivDetail.originalDate());
- if(!annivDetail.event().isEmpty())
- saveAnniv.setEvent(annivDetail.event());
-
- contact.removeDetail(&annivDetail);
- contact.saveDetail(&saveAnniv);
- }
- else if(detail.definitionName() == QContactGender::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactGender saveGender;
- QContactGender genderDetail = static_cast<QContactGender>(detail);
-
- if(!genderDetail.gender().isEmpty())
- saveGender.setGender(genderDetail.gender());
+ // Sub-types not supported
+ if (detail.removeValue(QContactAnniversary::FieldSubType))
+ contact.saveDetail(&detail);
- contact.removeDetail(&genderDetail);
- contact.saveDetail(&saveGender);
- }
- else if(detail.definitionName() == QContactGeoLocation::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactGeoLocation saveGeo;
- QContactGeoLocation geoDetail = static_cast<QContactGeoLocation>(detail);
-
- QString latitude,longitude;
- latitude.setNum(geoDetail.latitude());
- longitude.setNum(geoDetail.longitude());
-
- if(!latitude.isEmpty())
- saveGeo.setLatitude(geoDetail.latitude());
- if(!longitude.isEmpty())
- saveGeo.setLongitude(geoDetail.longitude());
-
- if(geoDetail.contexts().size() > 0
- && (geoDetail.contexts().contains(QContactDetail::ContextHome)
- || geoDetail.contexts().contains(QContactDetail::ContextWork)))
- {
- saveGeo.setContexts(geoDetail.contexts());
- }
-
- contact.removeDetail(&geoDetail);
- contact.saveDetail(&saveGeo);
- }
- else if(detail.definitionName() == QContactPhoneNumber::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactPhoneNumber savePhone;
+ // Context not supported
+ if (detail.removeValue(QContactDetail::FieldContext))
+ contact.saveDetail(&detail);
+ }
+ else if (detail.definitionName() == QContactPhoneNumber::DefinitionName)
+ {
QContactPhoneNumber phoneDetail = static_cast<QContactPhoneNumber>(detail);
- if(!phoneDetail.number().isEmpty())
- savePhone.setNumber(phoneDetail.number());
-
- if(phoneDetail.subTypes().size() > 0)
- savePhone.setSubTypes(phoneDetail.subTypes());
-
- if(phoneDetail.contexts().size() > 0
- && (phoneDetail.contexts().contains(QContactDetail::ContextHome)
- || phoneDetail.contexts().contains(QContactDetail::ContextWork)))
- {
- savePhone.setContexts(phoneDetail.contexts());
- }
-
- contact.removeDetail(&phoneDetail);
- contact.saveDetail(&savePhone);
+ if (phoneDetail.subTypes().size() == 0)
+ {
+ // No Sub-type found, set as SubTypeMobile
+ phoneDetail.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+ contact.saveDetail(&phoneDetail);
}
- else if(detail.definitionName() == QContactOnlineAccount::DefinitionName)
+ else if (phoneDetail.subTypes().size() > 0 )
{
- // Not all fields are supported in symbian back-end, replace
- QContactOnlineAccount saveOnlineAcc;
- QContactOnlineAccount onlineAccDetail = static_cast<QContactOnlineAccount>(detail);
-
- if(!onlineAccDetail.accountUri().isEmpty())
- saveOnlineAcc.setAccountUri(onlineAccDetail.accountUri());
- if(!onlineAccDetail.serviceProvider().isEmpty())
- saveOnlineAcc.setServiceProvider(onlineAccDetail.serviceProvider());
- if(!onlineAccDetail.presence().isEmpty())
- saveOnlineAcc.setPresence(onlineAccDetail.presence());
- if(!onlineAccDetail.statusMessage().isEmpty())
- saveOnlineAcc.setStatusMessage(onlineAccDetail.statusMessage());
-
- if(onlineAccDetail.subTypes().size() > 0)
- saveOnlineAcc.setSubTypes(onlineAccDetail.subTypes());
-
- if(onlineAccDetail.contexts().size() > 0
- && (onlineAccDetail.contexts().contains(QContactDetail::ContextHome)
- || onlineAccDetail.contexts().contains(QContactDetail::ContextWork)))
+ // Sub-types not supported
+ if (phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeVoice)
+ || phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeMessagingCapable)
+ || phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeVideo))
{
- saveOnlineAcc.setContexts(onlineAccDetail.contexts());
+ // Replace as SubTypeMobile
+ phoneDetail.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+ contact.saveDetail(&phoneDetail);
}
-
- contact.removeDetail(&onlineAccDetail);
- contact.saveDetail(&saveOnlineAcc);
}
- else if(detail.definitionName() == QContactUrl::DefinitionName)
- {
- // Not all fields are supported in symbian back-end, replace
- QContactUrl saveUrl;
+ }
+ else if (detail.definitionName() == QContactUrl::DefinitionName)
+ {
QContactUrl urlDetail = static_cast<QContactUrl>(detail);
- if(!urlDetail.url().isEmpty())
- saveUrl.setUrl(urlDetail.url());
-
QString stype=QContactUrl::SubTypeHomePage;
- if(urlDetail.subType().compare(stype) == 0)
- {
- saveUrl.setSubType(stype);
- }
-
- if(urlDetail.contexts().size() > 0
- && (urlDetail.contexts().contains(QContactDetail::ContextHome)
- || urlDetail.contexts().contains(QContactDetail::ContextWork)))
- {
- saveUrl.setContexts(urlDetail.contexts());
- }
-
- contact.removeDetail(&urlDetail);
- contact.saveDetail(&saveUrl);
+ if (urlDetail.subType().compare(stype) != 0)
+ {
+ detail.removeValue(QContactUrl::FieldSubType);
+ contact.saveDetail(&detail);
}
}
+ }
}
/*
Launch contact selection view with a given detail (selecting detail there opens the editor and adds the new detail)