diff -r efe85016a067 -r 7cbcb2896f0e phonebookengines/cntactions/src/cntemailaction.cpp --- a/phonebookengines/cntactions/src/cntemailaction.cpp Wed Jun 23 18:02:44 2010 +0300 +++ b/phonebookengines/cntactions/src/cntemailaction.cpp Tue Jul 06 14:05:47 2010 +0300 @@ -18,18 +18,23 @@ #include "cntemailaction.h" #include -#include +#include +#include #include #include +static const QString EMAIL_SEND_TO_KEY = "to"; + //Action class CntEmailAction::CntEmailAction() : CntAction("email") { + mRequest = m_AppManager.create(XQI_EMAIL_MESSAGE_SEND, "send(QVariant)", true); } CntEmailAction::~CntEmailAction() { + delete mRequest; } QContactFilter CntEmailAction::contactFilter(const QVariant& value) const @@ -60,14 +65,63 @@ void CntEmailAction::performAction() { QVariant retValue; - emitResult(GeneralError, retValue); - - /* - QString service("com.nokia.services.telephony"); - QString type("dial(QString,int)"); - - performNumberAction(service, type); - */ + + if (mRequest) + { + QMap map; + QStringList recipients; + QList data; + + // If detail exists use it. + if (m_detail.definitionName() == QContactEmailAddress::DefinitionName) + { + const QContactEmailAddress &email = static_cast(m_detail); + + recipients.append(email.emailAddress()); + map.insert(EMAIL_SEND_TO_KEY, recipients); + data.append(map); + + mRequest->setArguments(data); + mRequest->send(retValue); + emitResult(mRequest->lastError(), retValue); + } + + // If no detail, pick preferred. + // Todo : Temporary fix. Remove setting preferred when selection popup feature available. + else if (m_detail.isEmpty()) + { + QContactDetail detail = m_contact.preferredDetail(m_actionName); + QContactEmailAddress email; + + // If preferred is empty pick first email. + if(detail.isEmpty()) + { + email = m_contact.detail(); + } + else + { + email = static_cast(detail); + } + + recipients.append(email.emailAddress()); + map.insert(EMAIL_SEND_TO_KEY, recipients); + data.append(map); + + mRequest->setArguments(data); + mRequest->send(retValue); + emitResult(mRequest->lastError(), retValue); + } + else + { + emitResult(GeneralError, retValue); + } + } + + // Service not found. + else + { + emitResult(GeneralError, retValue); + } }