emailservices/nmclientapi/src/nmapitypesconverter.cpp
author hgs
Thu, 14 Oct 2010 17:33:43 +0300
changeset 76 38bf5461e270
parent 74 6c59112cfd31
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 "nmapiheaders.h"

namespace EmailClientApi
{
/*!
   converts nmmailbox to client api NmApiMailbox
 */
NmApiMailbox NmToApiConverter::NmMailbox2NmApiMailbox(const NmMailbox &mailbox)
{
    NM_FUNCTION;
    
    NmApiMailbox apiMailbox;
    apiMailbox.setId(mailbox.id().id());
    apiMailbox.setName(mailbox.name());
    NmMailbox tmp(mailbox);
    apiMailbox.setAddress(tmp.address().address());
    return apiMailbox;
}

/*!
   converts NmFolder to client api NmFolder
 */
NmApiFolder NmToApiConverter::NmFolder2NmApiFolder(const NmFolder &folder)
{
    NM_FUNCTION;
    
    NmApiFolder apiFolder;

    apiFolder.setParentFolderId(folder.parentId().id());
    apiFolder.setId(folder.folderId().id());
    apiFolder.setName(folder.name());

    switch ( folder.folderType() )
        {
        case NmFolderInbox:
        	apiFolder.setFolderType(EmailClientApi::Inbox);
            break;
        case NmFolderOutbox:
        	apiFolder.setFolderType(EmailClientApi::Outbox);
            break;
        case NmFolderDrafts:
        	apiFolder.setFolderType(EmailClientApi::Drafts);
            break;
        case NmFolderSent:
        	apiFolder.setFolderType(EmailClientApi::Sent);
            break;
        case NmFolderDeleted:
        	apiFolder.setFolderType(EmailClientApi::Deleted);
            break;
        case NmFolderOther:
        default:
        	apiFolder.setFolderType(EmailClientApi::EOther);
            break;
        }
    return apiFolder;
}

/*!
   converts NmMessageEnvelope to client api NmApiMessageEnvelope
 */
NmApiMessageEnvelope NmToApiConverter::NmMessageEnvelope2NmApiMessageEnvelope(
    const NmMessageEnvelope &envelope)
{
    NM_FUNCTION;
    
    NmApiMessageEnvelope apiEnv;
    
    QList<NmAddress> to = envelope.toRecipients();
    QList<NmAddress> cc = envelope.ccRecipients();
    QList<NmAddress> bcc = envelope.bccRecipients();
    QList<NmApiEmailAddress> to_api = NmAddress2QString(to);
    QList<NmApiEmailAddress> cc_api = NmAddress2QString(cc);
    QList<NmApiEmailAddress> bcc_api = NmAddress2QString(bcc);

    apiEnv.setToRecipients(to_api);
    apiEnv.setCcRecipients(cc_api);
    apiEnv.setBccRecipients(bcc_api);

    apiEnv.setHasAttachments(envelope.hasAttachments());
    apiEnv.setId(envelope.messageId().id());
    apiEnv.setIsForwarded(envelope.isForwarded());
    apiEnv.setIsRead(envelope.isRead());
    apiEnv.setIsReplied(envelope.isReplied());
    apiEnv.setParentFolder(envelope.folderId().id());

    apiEnv.setSender(envelope.sender().address());
    apiEnv.setSentTime(envelope.sentTime());
    apiEnv.setSubject(envelope.subject());
    NmId mailboxId(envelope.mailboxId());
    apiEnv.setMailboxId(mailboxId.id());
    apiEnv.setFlags(static_cast<NmApiMessageFlags>(static_cast<int>(envelope.flags())), true);

    return apiEnv;
}

/*!
   converts QList of NmAddresses to Qlist of email client apis NmApiEmailAddresses
 */
QList<NmApiEmailAddress> NmToApiConverter::NmAddress2QString(
    const QList<NmAddress> &addresses)
{
    NM_FUNCTION;
    
    QList<NmApiEmailAddress> nmAddresses;
    for (int i = 0; i < addresses.count(); i++) {
        NmApiEmailAddress addr;
        addr.setAddress(addresses[i].address());
        addr.setDisplayName(addresses[i].displayName());

        nmAddresses << addr;
    }

    return nmAddresses;
}

/*!
   converts nmmessage to client api NmApiMessage
 */
NmApiMessage NmToApiConverter::NmMessage2NmApiMessage(NmMessage &message)
{
    NM_FUNCTION;
    
    NmApiMessage apiMessage;
    QList<NmMessagePart*> attachments;
    message.attachmentList(attachments);

    if (attachments.size() > 0){
        QList<NmApiAttachment> apiAttachments; 
        for (int i = 0; i < attachments.size(); i++){
            NmMessagePart *part = attachments.at(i);
            if (part->contentType().compare(NmApiContentTypeTextPlain) != 0 && 
                part->contentType().compare(NmApiContentTypeTextHtml) != 0) {
                NmApiAttachment apiAttachment;
                apiAttachment.setFileName(part->attachmentName());
                apiAttachment.setId(part->partId().id());
                apiAttachment.setContentType(part->contentType());
                apiAttachment.setSize(part->size());
                apiAttachments.append(apiAttachment);
            }
        }
        apiMessage.setAttachments(apiAttachments);
    }
    
    NmApiMessageEnvelope apiEnvelope = NmMessageEnvelope2NmApiMessageEnvelope(message.envelope());
    apiMessage.setEnvelope(apiEnvelope);
    const NmMessagePart *plaintext = message.plainTextBodyPart();
    if (plaintext) {
        NmApiTextContent apiPlainText;
        apiPlainText.setContent(plaintext->textContent());
        apiPlainText.setId(plaintext->partId().id());
        apiPlainText.setContentType(plaintext->contentType());
        apiPlainText.setSize(plaintext->size());
        apiMessage.setPlainTextContent(apiPlainText);
    }
    
    const NmMessagePart *htmlcontent = message.htmlBodyPart();
    if (htmlcontent) {
        NmApiTextContent apiHtmlContent;
        apiHtmlContent.setContent(htmlcontent->textContent());
        apiHtmlContent.setId(htmlcontent->partId().id());
        apiHtmlContent.setContentType(htmlcontent->contentType());
        apiHtmlContent.setSize(htmlcontent->size());
        apiMessage.setHtmlContent(apiHtmlContent);
    }
    
    return apiMessage;
}
}