diff -r 7cbcb2896f0e -r a642906a277a phonebookui/phonebookservices/src/cntservicehandler.cpp --- a/phonebookui/phonebookservices/src/cntservicehandler.cpp Tue Jul 06 14:05:47 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,351 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: - * - */ - -#include "cntservicehandler.h" -#include "cntimageutility.h" - -#include -#include -#include - -#include -#include -#include - -/* NOTE! THIS SERVICE WILL BE RENAMED TO com.nokia.services.phonebook.Services */ -CntServiceHandler::CntServiceHandler(QObject *parent): - XQServiceProvider(QLatin1String("com.nokia.services.phonebookservices.Fetch"), parent), - mCurrentRequestIndex(0) -{ - publishAll(); - - // Definition names supported in symbian back-end - 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() -{ -} - -/* -Complete the fetch and return the list selected contacts -*/ -void CntServiceHandler::completeFetch( const CntServicesContactList &contactList ) -{ - QVariant retValue; - retValue.setValue(contactList); - completeRequest(mCurrentRequestIndex, retValue); - mCurrentRequestIndex = 0; -} - -/* -Complete edit and return if contact wasn't modified (-2), was deleted (-1), saved (1) or if saving failed (0) -*/ -void CntServiceHandler::completeEdit(int result) -{ - QVariant retValue(result); - completeRequest(mCurrentRequestIndex, retValue); - mCurrentRequestIndex = 0; -} - -/* -Launch fetch service with given parameters -*/ -void CntServiceHandler::fetch(const QString &title, const QString &action, const QString &filter) -{ - emit launchFetch(title, action, filter); - mCurrentRequestIndex = setCurrentRequestAsync(); -} - -/* -Launch fetch service with given parameters. Fetching mode is No-select by default. -*/ -void CntServiceHandler::Dofetch(const QString &title, const QString &action, const QString &filter, const QString &mode) -{ - emit launchFetchVerified(title, action, filter, mode); - mCurrentRequestIndex = setCurrentRequestAsync(); -} - -/* -Launch new contact editor with a given detail -*/ -void CntServiceHandler::editCreateNew(const QString &definitionName, const QString &value) -{ - QContact contact; - - if (definitionName == QContactPhoneNumber::DefinitionName) - { - QContactPhoneNumber phoneNumber; - phoneNumber.setNumber(value); - phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile); - contact.saveDetail(&phoneNumber); - } - else if (definitionName == QContactEmailAddress::DefinitionName) - { - QContactEmailAddress email; - email.setEmailAddress(value); - contact.saveDetail(&email); - } - else if (definitionName == QContactOnlineAccount::DefinitionName) - { - QContactOnlineAccount account; - account.setAccountUri(value); - account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip); - contact.saveDetail(&account); - } - - emit launchEditor(contact); - - mCurrentRequestIndex = setCurrentRequestAsync(); -} - -/* -Launch new contact editor with a given vCard filename -*/ -void CntServiceHandler::editCreateNew(const QString &vCardFile) -{ - CntImageUtility imageUtility; - QContact contact; - QVersitReader reader; - QFile file(vCardFile); - - if (!file.open(QIODevice::ReadOnly)) - return; - reader.setDevice(&file); - reader.startReading(); - reader.waitForFinished(); - - // Use the resulting document(s)... - QVersitContactImporter importer; - QList versitDocuments = reader.results(); - if (versitDocuments.count() > 0 - && importer.importDocuments(versitDocuments)) - { - QList contacts = importer.contacts(); - if (contacts.count() > 0) - contact = contacts.first(); - } - file.close(); - - // Save thumbnail images - QList details = contact.details(); - for (int i = 0;i < details.count();i++) - { - if (!details.at(i).thumbnail().isNull()) - { - QString imagepath; - QPixmap pixmap = QPixmap::fromImage(details.at(i).thumbnail()); - if (imageUtility.createImage(pixmap,imagepath)) - { - // Update contact detail - QContactAvatar detail=details.at(i); - detail.setImageUrl(imagepath); - contact.saveDetail(&detail); - } - } - } - - removeNotSupportedDetails(contact); - removeNotSupportedFields(contact); - emit launchEditor(contact); - - mCurrentRequestIndex = setCurrentRequestAsync(); -} - -/* -* Remove details not supported in symbian back-end. -*/ -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::removeNotSupportedFields(QContact& 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() == QContactAddress::DefinitionName) - { - QContactAddress addrDetail = static_cast(detail); - - // Sub-types not supported - if (detail.removeValue(QContactAddress::FieldSubTypes)) - contact.saveDetail(&detail); - } - else if (detail.definitionName() == QContactAnniversary::DefinitionName) - { - QContactAnniversary annivDetail = static_cast(detail); - - // Sub-types not supported - if (detail.removeValue(QContactAnniversary::FieldSubType)) - contact.saveDetail(&detail); - - // Context not supported - if (detail.removeValue(QContactDetail::FieldContext)) - contact.saveDetail(&detail); - } - else if (detail.definitionName() == QContactPhoneNumber::DefinitionName) - { - QContactPhoneNumber phoneDetail = static_cast(detail); - - if (phoneDetail.subTypes().size() == 0) - { - // No Sub-type found, set as SubTypeMobile - phoneDetail.setSubTypes(QContactPhoneNumber::SubTypeMobile); - contact.saveDetail(&phoneDetail); - } - else if (phoneDetail.subTypes().size() > 0 ) - { - // Sub-types not supported - if (phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeVoice) - || phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeMessagingCapable) - || phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeVideo)) - { - // Replace as SubTypeMobile - phoneDetail.setSubTypes(QContactPhoneNumber::SubTypeMobile); - contact.saveDetail(&phoneDetail); - } - } - } - else if (detail.definitionName() == QContactUrl::DefinitionName) - { - QContactUrl urlDetail = static_cast(detail); - - QString stype=QContactUrl::SubTypeHomePage; - 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) -*/ -void CntServiceHandler::editUpdateExisting(const QString &definitionName, const QString &value) -{ - QContactDetail detail; - - if (definitionName == QContactPhoneNumber::DefinitionName) - { - QContactPhoneNumber phoneNumber; - phoneNumber.setNumber(value); - phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile); - detail = phoneNumber; - } - else if (definitionName == QContactEmailAddress::DefinitionName) - { - QContactEmailAddress email; - email.setEmailAddress(value); - detail = email; - } - else if (definitionName == QContactOnlineAccount::DefinitionName) - { - QContactOnlineAccount account; - account.setAccountUri(value); - account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip); - detail = account; - } - - emit launchContactSelection(detail); - - mCurrentRequestIndex = setCurrentRequestAsync(); -} - -/* -Launch communication launcher view for the contact with the given ID (QContactLocalId -> int) -*/ -void CntServiceHandler::open(int contactId) -{ - QContactManager manager("symbian"); - QContact contact = manager.contact(contactId); - - emit launchContactCard(contact); - - mCurrentRequestIndex = setCurrentRequestAsync(); -} - -/* -Launch temporary communication launcher view with the given detail -*/ -void CntServiceHandler::open(const QString &definitionName, const QString &value) -{ - QContact contact; - QContactDetail detail; - - if (definitionName == QContactPhoneNumber::DefinitionName) - { - QContactPhoneNumber phoneNumber; - phoneNumber.setNumber(value); - phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile); - contact.saveDetail(&phoneNumber); - detail = phoneNumber; - } - else if (definitionName == QContactEmailAddress::DefinitionName) - { - QContactEmailAddress email; - email.setEmailAddress(value); - contact.saveDetail(&email); - detail = email; - } - else if (definitionName == QContactOnlineAccount::DefinitionName) - { - QContactOnlineAccount account; - account.setAccountUri(value); - account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip); - contact.saveDetail(&account); - detail = account; - } - - emit launchAssignContactCard(contact, detail); - - mCurrentRequestIndex = setCurrentRequestAsync(); -} - -Q_IMPLEMENT_USER_METATYPE(CntServicesContact) -Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)