phonebookengines/cntactions/src/cntemailaction.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 06 Jul 2010 14:05:47 +0300
changeset 47 7cbcb2896f0e
parent 40 b46a585f6909
child 50 77bc263e1626
child 59 a642906a277a
permissions -rw-r--r--
Revision: 201025 Kit: 2010127

/*
* 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")
{
    mRequest = m_AppManager.create(XQI_EMAIL_MESSAGE_SEND, "send(QVariant)", true);
}

CntEmailAction::~CntEmailAction()
{
    delete mRequest;
}

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;

    if (mRequest)
    {
        QMap<QString, QVariant> map;
        QStringList recipients;
        QList<QVariant> data;

        // If detail exists use it.
        if (m_detail.definitionName() == QContactEmailAddress::DefinitionName)
        {
            const QContactEmailAddress &email = static_cast<const QContactEmailAddress &>(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<QContactEmailAddress>();
            }
            else
            {
                email = static_cast<QContactEmailAddress>(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);
    }
}