phonebookengines/cntactions/src/cntemailaction.cpp
author hgs
Fri, 15 Oct 2010 12:24:46 +0300
changeset 81 640d30f4fb64
parent 53 e6aff7b69165
permissions -rw-r--r--
201041

/*
* 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 "cntemailaction.h"

#include <qcontactemailaddress.h>
#include <xqaiwdeclplat.h>
#include <xqaiwrequest.h>
#include <qcontactphonenumber.h>
#include <qcontactfilters.h>

static const QString EMAIL_SEND_TO_KEY = "to";

//Action class
CntEmailAction::CntEmailAction() : 
    CntAction("email")
{
}

CntEmailAction::~CntEmailAction()
{
}

QContactFilter CntEmailAction::contactFilter(const QVariant& value) const
{
     Q_UNUSED(value);
     
    QContactDetailFilter emailFilter;
    emailFilter.setDetailDefinitionName(QContactEmailAddress::DefinitionName); 
    
    return emailFilter;
}

bool CntEmailAction::isDetailSupported(const QContactDetail &detail, const QContact &/*contact*/) const
{
    return (detail.definitionName() == QContactEmailAddress::DefinitionName);
}

QList<QContactDetail> CntEmailAction::supportedDetails(const QContact& contact) const
{
    return contact.details(QContactEmailAddress::DefinitionName);
}

CntEmailAction* CntEmailAction::clone() const
{
	 return new CntEmailAction();
}

void CntEmailAction::performAction()
{
    QVariant retValue;
    delete m_request;
    m_request = NULL;
    m_request = m_AppManager.create(XQI_EMAIL_MESSAGE_SEND, "send(QVariant)", true);
    
    if (m_request) {
        QVariantMap dataMap;
        QVariantMap emailMap;
        QStringList recipients;
        QList<QVariant> data;

        //QContactType == TypeGroup
        if (QContactType::TypeGroup == m_contact.type()) {
            QStringList emails;
            QVariant value = m_data.value("email");
            if (value.canConvert<QVariantMap>()) {
                emailMap = value.toMap();
            }
            
            if (!emailMap.isEmpty()) {
                QVariantMap::const_iterator i = emailMap.constBegin();
                while (i != emailMap.constEnd()) {
                    QString formatString;
                    QString emailAddress;
                    QString displayLabel;
                    
                    emailAddress = i.key();
                    if (i.value().canConvert<QString>())
                        displayLabel = i.value().toString();
                    
                    // Email addresses format string:
                    // Firstname Lastname <email@address.com>
                    if (!displayLabel.isEmpty())
                        formatString += displayLabel + " ";
                    formatString += "<" + emailAddress + ">";
                    recipients.append(formatString);
                 
                    ++i;
                }
                dataMap.insert(EMAIL_SEND_TO_KEY, recipients);
                data.append(dataMap);

                m_request->setArguments(data);
                m_request->send(retValue);
                emitResult(m_request->lastError(), retValue);
            }
            else {
                emitResult(GeneralError, retValue);
            }
        }
        //QContactType == TypeContact
        // If detail exists use it.
        else if (m_detail.definitionName() == QContactEmailAddress::DefinitionName) {
            const QContactEmailAddress &email = static_cast<const QContactEmailAddress &>(m_detail);

            // Email addresses format string:
            // Firstname Lastname <email@address.com>
            QString formatString;
            QString displayLabel = m_contact.displayLabel();
            if (!displayLabel.isEmpty())
                formatString += displayLabel + " ";
            formatString += "<" + email.emailAddress() + ">";
            
            recipients.append(formatString);
            dataMap.insert(EMAIL_SEND_TO_KEY, recipients);
            data.append(dataMap);

            m_request->setArguments(data);
            m_request->send(retValue);
            emitResult(m_request->lastError(), retValue);
        }
        else {
            emitResult(GeneralError, retValue);
        }
    }

    // Service not found.
    else {
        emitResult(GeneralError, retValue);
    }
}