emailservices/nmailbase/src/nmmessage.cpp
changeset 18 578830873419
child 20 ecc8def7944a
equal deleted inserted replaced
4:e7aa27f58ae1 18:578830873419
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "nmmessage.h"
       
    19 #include "nmmessageenvelope.h"
       
    20 
       
    21 
       
    22 /*!
       
    23     \class NmMessage
       
    24     \brief Data model for mail message
       
    25  */
       
    26 
       
    27 /*!
       
    28     Constructor
       
    29  */
       
    30 NmMessage::NmMessage()
       
    31 {
       
    32 }
       
    33 
       
    34 /*!
       
    35     Constructs message with id \a id, parent id and mailbox id is set to null id
       
    36  */
       
    37 NmMessage::NmMessage(const NmId &id):NmMessagePart(id)
       
    38 {
       
    39     mEnvelope.setId(id);
       
    40 }
       
    41 
       
    42 /*!
       
    43     Constructs message part with id \a id and with parent id \a parentId,
       
    44     mailbox id is set to null id
       
    45  */
       
    46 NmMessage::NmMessage(const NmId &id, const NmId &parentId)
       
    47 :NmMessagePart(id, parentId)
       
    48 {
       
    49 	mEnvelope.setId(id);
       
    50 }
       
    51 
       
    52 /*!
       
    53     Constructs message with id \a id, with parent id \a parentId and
       
    54     with mailbox id \a mailboxId
       
    55  */
       
    56 NmMessage::NmMessage(const NmId &id,
       
    57                      const NmId &parentId,
       
    58                      const NmId &mailboxId)
       
    59 :NmMessagePart(id, parentId, mailboxId)
       
    60 {
       
    61 	mEnvelope.setId(id);
       
    62 }
       
    63 
       
    64 /*!
       
    65     Constructs message with meta data
       
    66  */
       
    67 NmMessage::NmMessage(const NmMessageEnvelope &envelope)
       
    68 {
       
    69 	mEnvelope = envelope;
       
    70     // set message id same as meta data id
       
    71     this->setId(envelope.id());
       
    72 }
       
    73 
       
    74 /*!
       
    75     Copy constructor
       
    76  */
       
    77 NmMessage::NmMessage(const NmMessagePart& message):NmMessagePart(message)
       
    78 {
       
    79 	mEnvelope.setId( message.id() );
       
    80 }
       
    81 
       
    82 NmMessage::NmMessage(const NmMessage& message):NmMessagePart(message)
       
    83 {
       
    84 	mEnvelope.setId( message.id() );
       
    85 }
       
    86 
       
    87 /*!
       
    88     Assignment operator
       
    89  */
       
    90 NmMessage &NmMessage::operator=(const NmMessage &message)
       
    91 {
       
    92 	if (this != &message) {
       
    93 		mEnvelope.setId( message.id() );
       
    94 	}
       
    95 	return *this;
       
    96 }
       
    97 
       
    98 /*!
       
    99     Destructor
       
   100  */
       
   101 NmMessage::~NmMessage()
       
   102 {
       
   103 }
       
   104 
       
   105 /*!
       
   106     returns id of envelope
       
   107  */
       
   108 NmId NmMessage::id() const
       
   109 {
       
   110     return mEnvelope.id();
       
   111 }
       
   112 
       
   113 
       
   114 /*!
       
   115     Sets id to envelope
       
   116  */
       
   117 void NmMessage::setId(const NmId &id)
       
   118 {
       
   119     //NmMessagePart::setId(id);
       
   120     mEnvelope.setId(id);
       
   121 }
       
   122 
       
   123 /*!
       
   124     Returns pointer to plain text body, if plain text body is not found
       
   125     returns null pointer. Ownership of message part object is not transferred.
       
   126     Do not delete returned pointer.
       
   127  */
       
   128 NmMessagePart *NmMessage::plainTextBodyPart()
       
   129 {
       
   130     NmMessagePart *ret = NULL;
       
   131     ret = findContentPart(NmContentTypeTextPlain);
       
   132     return ret;
       
   133 }
       
   134 
       
   135 /*!
       
   136     Returns pointer to html body, if html body is not found
       
   137     returns null pointer. Ownership of message part object is not transferred.
       
   138     Do not delete returned pointer.
       
   139  */
       
   140 NmMessagePart *NmMessage::htmlBodyPart()
       
   141 {
       
   142     NmMessagePart *ret = NULL;
       
   143     ret = findContentPart(NmContentTypeTextHtml);
       
   144     return ret;
       
   145 }
       
   146 
       
   147 /*!
       
   148     Sets message meta data. If meta data id is different than null id, messages
       
   149     id is set to \a envelope's id
       
   150  */
       
   151 void NmMessage::setEnvelope(const NmMessageEnvelope &envelope)
       
   152 {
       
   153     mEnvelope = envelope;
       
   154     if (envelope.id() != 0) {
       
   155         this->setId(envelope.id());
       
   156     } else {
       
   157         mEnvelope.setId(this->id());
       
   158     }
       
   159 }
       
   160 
       
   161 /*!
       
   162     Returns reference to message envelope
       
   163  */
       
   164 NmMessageEnvelope &NmMessage::envelope()
       
   165 {
       
   166     return mEnvelope;
       
   167 }
       
   168 
       
   169 /*!
       
   170     Returns reference to message envelope
       
   171  */
       
   172 const NmMessageEnvelope &NmMessage::envelope() const
       
   173 {
       
   174     return mEnvelope;
       
   175 }
       
   176 
       
   177 /**
       
   178 * Returns a flat list of message parts that can be handled as attachments.
       
   179 * Excludes message parts that are multipart and parts that are considered
       
   180 * plain text or html body.
       
   181 * 
       
   182 * @param flat list of attachments to be filled
       
   183 */        
       
   184 void NmMessage::attachmentList(QList<NmMessagePart*> &parts)
       
   185 {
       
   186     parts.clear();
       
   187     appendAttachments(parts);
       
   188 
       
   189     // special case, if single part content type is not given,
       
   190     // default type is text/plain
       
   191     if ( parts.count() == 1 && parts.at(0)->contentType().length() == 0) {
       
   192         parts.clear();
       
   193     }
       
   194     else {
       
   195         // find plain text body part from the list
       
   196         NmMessagePart* txtPart = findContentPart(NmContentTypeTextPlain);
       
   197         if ( txtPart ) {
       
   198             // remove plain text body part from attachment list
       
   199             for ( int ii = parts.count() - 1; ii >= 0; --ii ) {
       
   200                 if ( parts.at(ii)->id() == txtPart->id() ) {
       
   201                     parts.removeAt(ii);
       
   202                     break;
       
   203                 }
       
   204             }
       
   205         }
       
   206         // find  html body part from the list
       
   207         NmMessagePart* htmlPart = findContentPart(NmContentTypeTextHtml);
       
   208         if ( htmlPart ) {
       
   209             // remove html body part from attachment list
       
   210             for ( int ii = parts.count() - 1; ii >= 0; --ii ) {
       
   211                 if ( parts.at(ii)->id() == htmlPart->id() ) {
       
   212                     parts.removeAt(ii);
       
   213                     break;
       
   214                 }
       
   215             }
       
   216         }
       
   217     }
       
   218 }