emailservices/emailclientapi/src/emailmessage.cpp
author hgs
Thu, 14 Oct 2010 17:33:43 +0300
changeset 76 38bf5461e270
parent 74 6c59112cfd31
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: This file implements class CEmailMessage.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
hgs
parents:
diff changeset
    19
#include <viewclipartner.h>
hgs
parents:
diff changeset
    20
#include <vwsdefpartner.h>
hgs
parents:
diff changeset
    21
#else
hgs
parents:
diff changeset
    22
#include <viewcli.h>
hgs
parents:
diff changeset
    23
#include <vwsdef.h>
hgs
parents:
diff changeset
    24
#endif // SYMBIAN_ENABLE_SPLIT_HEADERS
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#include "emailmessage.h"
hgs
parents:
diff changeset
    27
#include "emailaddress.h"
hgs
parents:
diff changeset
    28
#include "emailapiutils.h"
hgs
parents:
diff changeset
    29
#include "emailclientapi.hrh"
hgs
parents:
diff changeset
    30
#include "emailapiutils.h"
hgs
parents:
diff changeset
    31
#include "emailinterfacefactoryimpl.h"
hgs
parents:
diff changeset
    32
#include "emailcontent.h"
hgs
parents:
diff changeset
    33
#include "emailtextcontent.h"
hgs
parents:
diff changeset
    34
#include "emailmultipart.h"
hgs
parents:
diff changeset
    35
#include "emailattachment.h"
62
hgs
parents: 47
diff changeset
    36
#include "CFSMailPlugin.h"
hgs
parents: 47
diff changeset
    37
#include "CFSMailClient.h"
47
hgs
parents:
diff changeset
    38
62
hgs
parents: 47
diff changeset
    39
#include <xqservicerequest.h>
47
hgs
parents:
diff changeset
    40
#include "email_services_api.h"
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
const TInt KSendMessageRequestId = 100;
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    45
// 
hgs
parents:
diff changeset
    46
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    47
CEmailMessage* CEmailMessage::NewL( CPluginData& aPluginData,
hgs
parents:
diff changeset
    48
                                    CFSMailMessage* aFsMessage,
hgs
parents:
diff changeset
    49
                                    const TDataOwner aOwner )
hgs
parents:
diff changeset
    50
    {
hgs
parents:
diff changeset
    51
    CEmailMessage* message = new ( ELeave ) CEmailMessage( aPluginData, aFsMessage, aOwner );
hgs
parents:
diff changeset
    52
    CleanupStack::PushL( message );
hgs
parents:
diff changeset
    53
    message->ConstructL();
hgs
parents:
diff changeset
    54
    CleanupStack::Pop( message );
hgs
parents:
diff changeset
    55
    return message;
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// 
hgs
parents:
diff changeset
    60
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
CEmailMessage::CEmailMessage(
hgs
parents:
diff changeset
    62
        CPluginData& aPluginData,
hgs
parents:
diff changeset
    63
        CFSMailMessage *aFsMessage,
hgs
parents:
diff changeset
    64
        const TDataOwner aOwner)
hgs
parents:
diff changeset
    65
        : iPluginData( aPluginData ), iPluginMessage( aFsMessage ), iOwner( aOwner )
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    }
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    70
// 
hgs
parents:
diff changeset
    71
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
void CEmailMessage::ConstructL()
hgs
parents:
diff changeset
    73
    {
hgs
parents:
diff changeset
    74
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
    75
    iPlugin = iPluginData.ClaimInstanceL();
hgs
parents:
diff changeset
    76
    if ( iPluginMessage )
hgs
parents:
diff changeset
    77
        {
hgs
parents:
diff changeset
    78
        iMessageId = TMessageId( 
hgs
parents:
diff changeset
    79
            iPluginMessage->GetMessageId().Id(),
hgs
parents:
diff changeset
    80
            iPluginMessage->GetFolderId().Id(), 
hgs
parents:
diff changeset
    81
            iPluginMessage->GetMailBoxId().Id() );
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
        // Copy the message flags
hgs
parents:
diff changeset
    84
        InitializeFlagValues();
hgs
parents:
diff changeset
    85
        }
hgs
parents:
diff changeset
    86
    }
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    89
// 
hgs
parents:
diff changeset
    90
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    91
CEmailMessage::~CEmailMessage()
hgs
parents:
diff changeset
    92
    {
hgs
parents:
diff changeset
    93
    delete iPluginMessage;
hgs
parents:
diff changeset
    94
    delete iSender;
hgs
parents:
diff changeset
    95
    delete iReplyTo;
hgs
parents:
diff changeset
    96
    delete iTextContent;
hgs
parents:
diff changeset
    97
    delete iContent;
hgs
parents:
diff changeset
    98
    iPluginData.ReleaseInstance();
hgs
parents:
diff changeset
    99
    iAttachments.ResetAndDestroy();
hgs
parents:
diff changeset
   100
    }
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   103
// 
hgs
parents:
diff changeset
   104
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   105
TEmailTypeId CEmailMessage::InterfaceId() const
hgs
parents:
diff changeset
   106
    {
hgs
parents:
diff changeset
   107
    return KEmailIFUidMessage;
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
    
hgs
parents:
diff changeset
   110
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   111
// 
hgs
parents:
diff changeset
   112
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   113
void CEmailMessage::Release()
hgs
parents:
diff changeset
   114
    {
hgs
parents:
diff changeset
   115
    if ( iOwner == EClientOwns )
hgs
parents:
diff changeset
   116
        {
hgs
parents:
diff changeset
   117
        delete this;
hgs
parents:
diff changeset
   118
        }
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   122
// 
hgs
parents:
diff changeset
   123
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   124
const TMessageId& CEmailMessage::MessageId() const
hgs
parents:
diff changeset
   125
    {
hgs
parents:
diff changeset
   126
    return iMessageId;
hgs
parents:
diff changeset
   127
    }
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   130
// 
hgs
parents:
diff changeset
   131
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   132
MEmailAddress* CEmailMessage::SenderAddressL() const
hgs
parents:
diff changeset
   133
    {
hgs
parents:
diff changeset
   134
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
    CFSMailAddress* fsAddress = iPluginMessage->GetSender();
hgs
parents:
diff changeset
   137
    if ( fsAddress )
hgs
parents:
diff changeset
   138
        {
hgs
parents:
diff changeset
   139
        if ( !iSender )
hgs
parents:
diff changeset
   140
            {
hgs
parents:
diff changeset
   141
            iSender = CEmailAddress::NewL( MEmailAddress::ESender, EAPIOwns );
hgs
parents:
diff changeset
   142
            }
hgs
parents:
diff changeset
   143
        iSender->SetAddressL(fsAddress->GetEmailAddress());
hgs
parents:
diff changeset
   144
        iSender->SetDisplayNameL(fsAddress->GetDisplayName());
hgs
parents:
diff changeset
   145
        }
hgs
parents:
diff changeset
   146
    else
hgs
parents:
diff changeset
   147
        {
hgs
parents:
diff changeset
   148
        // Sender address not defined. Delete client object as well
hgs
parents:
diff changeset
   149
        delete iSender;
hgs
parents:
diff changeset
   150
        iSender = NULL;
hgs
parents:
diff changeset
   151
        }
hgs
parents:
diff changeset
   152
    return iSender;
hgs
parents:
diff changeset
   153
    }
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   156
// 
hgs
parents:
diff changeset
   157
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   158
MEmailAddress* CEmailMessage::ReplyToAddressL() const
hgs
parents:
diff changeset
   159
    {
hgs
parents:
diff changeset
   160
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    const CFSMailAddress& fsAddress = iPluginMessage->GetReplyToAddress();
hgs
parents:
diff changeset
   163
    if ( &fsAddress )
hgs
parents:
diff changeset
   164
        {
hgs
parents:
diff changeset
   165
        if ( !iReplyTo )
hgs
parents:
diff changeset
   166
            {
hgs
parents:
diff changeset
   167
            iReplyTo = CEmailAddress::NewL( MEmailAddress::EReplyTo, EAPIOwns );
hgs
parents:
diff changeset
   168
            }
hgs
parents:
diff changeset
   169
        iReplyTo->SetAddressL( fsAddress.GetEmailAddress() );
hgs
parents:
diff changeset
   170
        iReplyTo->SetDisplayNameL( fsAddress.GetDisplayName() );
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
    else
hgs
parents:
diff changeset
   173
        {
hgs
parents:
diff changeset
   174
        delete iReplyTo;
hgs
parents:
diff changeset
   175
        iReplyTo = NULL;
hgs
parents:
diff changeset
   176
        }
hgs
parents:
diff changeset
   177
    return iReplyTo;
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   181
// 
hgs
parents:
diff changeset
   182
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   183
void CEmailMessage::SetReplyToAddressL( const MEmailAddress& aSender )
hgs
parents:
diff changeset
   184
    {
hgs
parents:
diff changeset
   185
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   186
    
hgs
parents:
diff changeset
   187
    CFSMailAddress *fsAddress = CFSMailAddress::NewLC();
hgs
parents:
diff changeset
   188
    if ( !iReplyTo )
hgs
parents:
diff changeset
   189
        {
hgs
parents:
diff changeset
   190
        iReplyTo = CEmailAddress::NewL( MEmailAddress::EReplyTo, EAPIOwns );
hgs
parents:
diff changeset
   191
        }
hgs
parents:
diff changeset
   192
    fsAddress->SetDisplayName( aSender.DisplayName() );
hgs
parents:
diff changeset
   193
    fsAddress->SetEmailAddress( aSender.Address() );
hgs
parents:
diff changeset
   194
    iPluginMessage->SetReplyToAddress( fsAddress );
hgs
parents:
diff changeset
   195
    iReplyTo->SetAddressL( fsAddress->GetEmailAddress() );
hgs
parents:
diff changeset
   196
    iReplyTo->SetDisplayNameL( fsAddress->GetDisplayName() );
hgs
parents:
diff changeset
   197
    CleanupStack::Pop();
hgs
parents:
diff changeset
   198
    }
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   201
// 
hgs
parents:
diff changeset
   202
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   203
TInt CEmailMessage::GetRecipientsL( const MEmailAddress::TRole aRole,
hgs
parents:
diff changeset
   204
        REmailAddressArray& aRecipients ) const
hgs
parents:
diff changeset
   205
    {
hgs
parents:
diff changeset
   206
    if( aRole == MEmailAddress::EReplyTo ||
hgs
parents:
diff changeset
   207
        aRole == MEmailAddress::ESender )
hgs
parents:
diff changeset
   208
        {
hgs
parents:
diff changeset
   209
        User::Leave( KErrArgument );
hgs
parents:
diff changeset
   210
        }
hgs
parents:
diff changeset
   211
    else 
hgs
parents:
diff changeset
   212
        {
hgs
parents:
diff changeset
   213
        User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   214
        
hgs
parents:
diff changeset
   215
        if( aRole == MEmailAddress::ETo || 
hgs
parents:
diff changeset
   216
            aRole == MEmailAddress::EUndefined )
hgs
parents:
diff changeset
   217
            {
hgs
parents:
diff changeset
   218
            const RPointerArray<CFSMailAddress>& toRecipients =
hgs
parents:
diff changeset
   219
                iPluginMessage->GetToRecipients();
hgs
parents:
diff changeset
   220
            ConvertAddressArrayL( 
hgs
parents:
diff changeset
   221
                    MEmailAddress::ETo, 
hgs
parents:
diff changeset
   222
                    toRecipients, aRecipients );
hgs
parents:
diff changeset
   223
            }
hgs
parents:
diff changeset
   224
        if( aRole == MEmailAddress::ECc || 
hgs
parents:
diff changeset
   225
            aRole == MEmailAddress::EUndefined )
hgs
parents:
diff changeset
   226
            {
hgs
parents:
diff changeset
   227
            const RPointerArray<CFSMailAddress>& ccRecipients =
hgs
parents:
diff changeset
   228
                iPluginMessage->GetCCRecipients();
hgs
parents:
diff changeset
   229
            ConvertAddressArrayL( 
hgs
parents:
diff changeset
   230
                    MEmailAddress::ECc, 
hgs
parents:
diff changeset
   231
                    ccRecipients, aRecipients );
hgs
parents:
diff changeset
   232
            }
hgs
parents:
diff changeset
   233
        if( aRole == MEmailAddress::EBcc || 
hgs
parents:
diff changeset
   234
            aRole == MEmailAddress::EUndefined )
hgs
parents:
diff changeset
   235
            {
hgs
parents:
diff changeset
   236
            const RPointerArray<CFSMailAddress>& bccRecipients =
hgs
parents:
diff changeset
   237
                iPluginMessage->GetBCCRecipients();
hgs
parents:
diff changeset
   238
            ConvertAddressArrayL( 
hgs
parents:
diff changeset
   239
                    MEmailAddress::EBcc, 
hgs
parents:
diff changeset
   240
                    bccRecipients, aRecipients );
hgs
parents:
diff changeset
   241
            }
hgs
parents:
diff changeset
   242
        }
hgs
parents:
diff changeset
   243
    return aRecipients.Count();
hgs
parents:
diff changeset
   244
    }
hgs
parents:
diff changeset
   245
    
hgs
parents:
diff changeset
   246
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   247
// 
hgs
parents:
diff changeset
   248
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   249
void CEmailMessage::SetRecipientsL( const MEmailAddress::TRole aRole,
hgs
parents:
diff changeset
   250
        REmailAddressArray& aRecipients )
hgs
parents:
diff changeset
   251
    {
74
hgs
parents: 66
diff changeset
   252
    User::LeaveIfNull( iPluginMessage );
hgs
parents: 66
diff changeset
   253
    
47
hgs
parents:
diff changeset
   254
    TInt count( aRecipients.Count() );
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
    for( TInt i=0;i<count;i++ )
hgs
parents:
diff changeset
   257
        {
hgs
parents:
diff changeset
   258
        const MEmailAddress* address = aRecipients[i];
74
hgs
parents: 66
diff changeset
   259
        CFSMailAddress* fsAddress = CFSMailAddress::NewL();
47
hgs
parents:
diff changeset
   260
        fsAddress->SetEmailAddress( address->Address() );
hgs
parents:
diff changeset
   261
        fsAddress->SetDisplayName( address->DisplayName() );
hgs
parents:
diff changeset
   262
        
hgs
parents:
diff changeset
   263
        if( aRole == MEmailAddress::ETo )
hgs
parents:
diff changeset
   264
            {
hgs
parents:
diff changeset
   265
            iPluginMessage->AppendToRecipient( fsAddress );
hgs
parents:
diff changeset
   266
            }
hgs
parents:
diff changeset
   267
        else if( aRole == MEmailAddress::ECc )
hgs
parents:
diff changeset
   268
            {
hgs
parents:
diff changeset
   269
            iPluginMessage->AppendCCRecipient( fsAddress );
hgs
parents:
diff changeset
   270
            }
hgs
parents:
diff changeset
   271
        else if( aRole == MEmailAddress::EBcc )
hgs
parents:
diff changeset
   272
            {
hgs
parents:
diff changeset
   273
            iPluginMessage->AppendBCCRecipient( fsAddress );
hgs
parents:
diff changeset
   274
            }
hgs
parents:
diff changeset
   275
        else
hgs
parents:
diff changeset
   276
            {
74
hgs
parents: 66
diff changeset
   277
            delete fsAddress;
47
hgs
parents:
diff changeset
   278
            User::Leave( KErrArgument );
74
hgs
parents: 66
diff changeset
   279
            }        
47
hgs
parents:
diff changeset
   280
        }
hgs
parents:
diff changeset
   281
    }
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   284
// 
hgs
parents:
diff changeset
   285
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   286
void CEmailMessage::RemoveRecipientL( const MEmailAddress& /*aRecipient*/ )
hgs
parents:
diff changeset
   287
    {
hgs
parents:
diff changeset
   288
    User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   289
    }
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   292
// 
hgs
parents:
diff changeset
   293
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   294
TPtrC CEmailMessage::Subject() const
hgs
parents:
diff changeset
   295
    {
hgs
parents:
diff changeset
   296
    if ( !iPluginMessage )
hgs
parents:
diff changeset
   297
        return KNullDesC();
hgs
parents:
diff changeset
   298
    return iPluginMessage->GetSubject();
hgs
parents:
diff changeset
   299
    }
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   302
// 
hgs
parents:
diff changeset
   303
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   304
void  CEmailMessage::SetSubjectL( const TPtrC& aSubject )
hgs
parents:
diff changeset
   305
    {
hgs
parents:
diff changeset
   306
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   307
    iPluginMessage->SetSubject( aSubject );
hgs
parents:
diff changeset
   308
    }
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   311
// 
hgs
parents:
diff changeset
   312
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   313
TTime CEmailMessage::Date() const
hgs
parents:
diff changeset
   314
    {
hgs
parents:
diff changeset
   315
    TTime time;
hgs
parents:
diff changeset
   316
hgs
parents:
diff changeset
   317
    if ( iPluginMessage ) {
hgs
parents:
diff changeset
   318
        time = iPluginMessage->GetDate();
hgs
parents:
diff changeset
   319
    }
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
    return time;
hgs
parents:
diff changeset
   322
    }
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   325
// 
hgs
parents:
diff changeset
   326
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   327
TInt CEmailMessage::Flags() const
hgs
parents:
diff changeset
   328
    {
hgs
parents:
diff changeset
   329
    return iFlags;
hgs
parents:
diff changeset
   330
    }
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   333
// 
hgs
parents:
diff changeset
   334
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   335
void CEmailMessage::SetFlag( const TUint aFlag )
hgs
parents:
diff changeset
   336
    {
hgs
parents:
diff changeset
   337
    iFlags |= aFlag;
hgs
parents:
diff changeset
   338
    TUint flag = MapFlags( aFlag );
hgs
parents:
diff changeset
   339
    if ( iPluginMessage )
hgs
parents:
diff changeset
   340
        iPluginMessage->SetFlag( flag );
hgs
parents:
diff changeset
   341
    }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   344
// 
hgs
parents:
diff changeset
   345
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   346
void CEmailMessage::ResetFlag( const TUint aFlag )
hgs
parents:
diff changeset
   347
    {
hgs
parents:
diff changeset
   348
    iFlags &= ~aFlag;
hgs
parents:
diff changeset
   349
    TUint flag = MapFlags( aFlag );
hgs
parents:
diff changeset
   350
    if ( iPluginMessage )
hgs
parents:
diff changeset
   351
        iPluginMessage->ResetFlag( flag );
hgs
parents:
diff changeset
   352
    }
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   355
// 
hgs
parents:
diff changeset
   356
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   357
void CEmailMessage::InitializeFlagValues()
hgs
parents:
diff changeset
   358
    {
hgs
parents:
diff changeset
   359
    if ( !iPluginMessage )
hgs
parents:
diff changeset
   360
        return;
hgs
parents:
diff changeset
   361
    // 1st reset member value, then start copying different flags
hgs
parents:
diff changeset
   362
    iFlags = 0;
hgs
parents:
diff changeset
   363
    
hgs
parents:
diff changeset
   364
    // EFlag_Read
hgs
parents:
diff changeset
   365
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Read ) )
hgs
parents:
diff changeset
   366
        {
hgs
parents:
diff changeset
   367
        iFlags |= EFlag_Read;
hgs
parents:
diff changeset
   368
        }
hgs
parents:
diff changeset
   369
    else
hgs
parents:
diff changeset
   370
        {
hgs
parents:
diff changeset
   371
        iFlags &= ~EFlag_Read;
hgs
parents:
diff changeset
   372
        }
hgs
parents:
diff changeset
   373
    //    EFlag_Read_Locally
hgs
parents:
diff changeset
   374
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Read_Locally ) )
hgs
parents:
diff changeset
   375
        {
hgs
parents:
diff changeset
   376
        iFlags |= EFlag_Read_Locally;
hgs
parents:
diff changeset
   377
        }
hgs
parents:
diff changeset
   378
    else
hgs
parents:
diff changeset
   379
        {
hgs
parents:
diff changeset
   380
        iFlags &= ~EFlag_Read_Locally;
hgs
parents:
diff changeset
   381
        }    
hgs
parents:
diff changeset
   382
    // EFlag_Low
hgs
parents:
diff changeset
   383
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Low ) )
hgs
parents:
diff changeset
   384
        {
hgs
parents:
diff changeset
   385
        iFlags |= EFlag_Low;
hgs
parents:
diff changeset
   386
        }
hgs
parents:
diff changeset
   387
    else
hgs
parents:
diff changeset
   388
        {
hgs
parents:
diff changeset
   389
        iFlags &= ~EFlag_Low;
hgs
parents:
diff changeset
   390
        }
hgs
parents:
diff changeset
   391
    // EFlag_Important
hgs
parents:
diff changeset
   392
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Important ) )
hgs
parents:
diff changeset
   393
        {
hgs
parents:
diff changeset
   394
        iFlags |= EFlag_Important;
hgs
parents:
diff changeset
   395
        }
hgs
parents:
diff changeset
   396
    else
hgs
parents:
diff changeset
   397
        {
hgs
parents:
diff changeset
   398
        iFlags &= ~EFlag_Important;
hgs
parents:
diff changeset
   399
        }
hgs
parents:
diff changeset
   400
    // EFlag_FollowUpComplete
hgs
parents:
diff changeset
   401
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
hgs
parents:
diff changeset
   402
        {
hgs
parents:
diff changeset
   403
        iFlags |= EFlag_FollowUpComplete;
hgs
parents:
diff changeset
   404
        }
hgs
parents:
diff changeset
   405
    else
hgs
parents:
diff changeset
   406
        {
hgs
parents:
diff changeset
   407
        iFlags &= ~EFlag_FollowUpComplete;
hgs
parents:
diff changeset
   408
        }
hgs
parents:
diff changeset
   409
    // EFlag_FollowUp
hgs
parents:
diff changeset
   410
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_FollowUp ) )
hgs
parents:
diff changeset
   411
        {
hgs
parents:
diff changeset
   412
        iFlags |= EFlag_FollowUp;
hgs
parents:
diff changeset
   413
        }
hgs
parents:
diff changeset
   414
    else
hgs
parents:
diff changeset
   415
        {
hgs
parents:
diff changeset
   416
        iFlags &= ~EFlag_FollowUp;
hgs
parents:
diff changeset
   417
        }
hgs
parents:
diff changeset
   418
    // EFlag_Attachments
hgs
parents:
diff changeset
   419
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Attachments ) )
hgs
parents:
diff changeset
   420
        {
hgs
parents:
diff changeset
   421
        iFlags |= EFlag_Attachments;
hgs
parents:
diff changeset
   422
        }
hgs
parents:
diff changeset
   423
    else
hgs
parents:
diff changeset
   424
        {
hgs
parents:
diff changeset
   425
        iFlags &= ~EFlag_Attachments;
hgs
parents:
diff changeset
   426
        }
hgs
parents:
diff changeset
   427
    // EFlag_Multiple
hgs
parents:
diff changeset
   428
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Multiple ) )
hgs
parents:
diff changeset
   429
        {
hgs
parents:
diff changeset
   430
        iFlags |= EFlag_Multiple;
hgs
parents:
diff changeset
   431
        }
hgs
parents:
diff changeset
   432
    else
hgs
parents:
diff changeset
   433
        {
hgs
parents:
diff changeset
   434
        iFlags &= ~EFlag_Multiple;
hgs
parents:
diff changeset
   435
        }
hgs
parents:
diff changeset
   436
    // EFlag_CalendarMsg
hgs
parents:
diff changeset
   437
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_CalendarMsg ) )
hgs
parents:
diff changeset
   438
        {
hgs
parents:
diff changeset
   439
        iFlags |= EFlag_CalendarMsg;
hgs
parents:
diff changeset
   440
        }
hgs
parents:
diff changeset
   441
    else
hgs
parents:
diff changeset
   442
        {
hgs
parents:
diff changeset
   443
        iFlags &= ~EFlag_CalendarMsg;
hgs
parents:
diff changeset
   444
        }
hgs
parents:
diff changeset
   445
    // EFlag_Answered
hgs
parents:
diff changeset
   446
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Answered ) )
hgs
parents:
diff changeset
   447
        {
hgs
parents:
diff changeset
   448
        iFlags |= EFlag_Answered;
hgs
parents:
diff changeset
   449
        }
hgs
parents:
diff changeset
   450
    else
hgs
parents:
diff changeset
   451
        {
hgs
parents:
diff changeset
   452
        iFlags &= ~EFlag_Answered;
hgs
parents:
diff changeset
   453
        }
hgs
parents:
diff changeset
   454
    // EFlag_Forwarded
hgs
parents:
diff changeset
   455
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Forwarded ) )
hgs
parents:
diff changeset
   456
        {
hgs
parents:
diff changeset
   457
        iFlags |= EFlag_Forwarded;
hgs
parents:
diff changeset
   458
        }
hgs
parents:
diff changeset
   459
    else
hgs
parents:
diff changeset
   460
        {
hgs
parents:
diff changeset
   461
        iFlags &= ~EFlag_Forwarded;
hgs
parents:
diff changeset
   462
        }
hgs
parents:
diff changeset
   463
    // EFlag_OnlyToMe
hgs
parents:
diff changeset
   464
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_OnlyToMe ) )
hgs
parents:
diff changeset
   465
        {
hgs
parents:
diff changeset
   466
        iFlags |= EFlag_OnlyToMe;
hgs
parents:
diff changeset
   467
        }
hgs
parents:
diff changeset
   468
    else
hgs
parents:
diff changeset
   469
        {
hgs
parents:
diff changeset
   470
        iFlags &= ~EFlag_OnlyToMe;
hgs
parents:
diff changeset
   471
        }
hgs
parents:
diff changeset
   472
    // EFlag_RemoteDeleted
hgs
parents:
diff changeset
   473
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_RemoteDeleted ) )
hgs
parents:
diff changeset
   474
        {
hgs
parents:
diff changeset
   475
        iFlags |= EFlag_RemoteDeleted;
hgs
parents:
diff changeset
   476
        }
hgs
parents:
diff changeset
   477
    else
hgs
parents:
diff changeset
   478
        {
hgs
parents:
diff changeset
   479
        iFlags &= ~EFlag_RemoteDeleted;
hgs
parents:
diff changeset
   480
        }
hgs
parents:
diff changeset
   481
    // EFlag_HasMsgSender 
hgs
parents:
diff changeset
   482
    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_HasMsgSender ) )
hgs
parents:
diff changeset
   483
        {
hgs
parents:
diff changeset
   484
        iFlags |= EFlag_HasMsgSender;
hgs
parents:
diff changeset
   485
        }
hgs
parents:
diff changeset
   486
    else
hgs
parents:
diff changeset
   487
        {
hgs
parents:
diff changeset
   488
        iFlags &= ~EFlag_HasMsgSender;
hgs
parents:
diff changeset
   489
        }
hgs
parents:
diff changeset
   490
    }
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   493
// 
hgs
parents:
diff changeset
   494
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   495
MEmailMessageContent* CEmailMessage::ContentL() const
hgs
parents:
diff changeset
   496
    {
hgs
parents:
diff changeset
   497
    if ( iTextContent )
hgs
parents:
diff changeset
   498
        {
hgs
parents:
diff changeset
   499
        return iTextContent;
hgs
parents:
diff changeset
   500
        }
hgs
parents:
diff changeset
   501
    if ( iContent )
hgs
parents:
diff changeset
   502
        {
hgs
parents:
diff changeset
   503
        return iContent;
hgs
parents:
diff changeset
   504
        }
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   507
    
hgs
parents:
diff changeset
   508
    RPointerArray<CFSMailMessagePart> parts;
hgs
parents:
diff changeset
   509
    CleanupResetAndDestroyPushL( parts );
hgs
parents:
diff changeset
   510
    iPluginMessage->ChildPartsL( parts );
hgs
parents:
diff changeset
   511
    TInt count( parts.Count() );
hgs
parents:
diff changeset
   512
    if( count == 0 )
hgs
parents:
diff changeset
   513
        {
hgs
parents:
diff changeset
   514
        /* No content, return NULL */
hgs
parents:
diff changeset
   515
        CleanupStack::PopAndDestroy( &parts ); // in case heap allocated but not used
hgs
parents:
diff changeset
   516
        return NULL;
hgs
parents:
diff changeset
   517
        }
hgs
parents:
diff changeset
   518
    CFSMailMessagePart* part = parts[0];
hgs
parents:
diff changeset
   519
    TContentType contentType( part->GetContentType() );
hgs
parents:
diff changeset
   520
    TMessageContentId msgContentId = TMessageContentId(
hgs
parents:
diff changeset
   521
                        part->GetPartId().Id(),
hgs
parents:
diff changeset
   522
                        iMessageId.iId,
hgs
parents:
diff changeset
   523
                        iMessageId.iFolderId.iId,
hgs
parents:
diff changeset
   524
                        iMessageId.iFolderId.iMailboxId );
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
    if ( contentType.Equals( KFSMailContentTypeTextPlain ) ||
hgs
parents:
diff changeset
   527
        contentType.Equals( KFSMailContentTypeTextHtml ) )
hgs
parents:
diff changeset
   528
        {                                
hgs
parents:
diff changeset
   529
        iTextContent = CEmailTextContent::NewL(iPluginData, msgContentId, part, EAPIOwns );
hgs
parents:
diff changeset
   530
        parts[0] = NULL; // ownership of part transferred
hgs
parents:
diff changeset
   531
        }
hgs
parents:
diff changeset
   532
    else if ( contentType.Equals( KFSMailContentTypeMultipartMixed ) ||
hgs
parents:
diff changeset
   533
              contentType.Equals( KFSMailContentTypeMultipartAlternative ) ||
hgs
parents:
diff changeset
   534
              contentType.Equals( KFSMailContentTypeMultipartDigest ) ||
hgs
parents:
diff changeset
   535
              contentType.Equals( KFSMailContentTypeMultipartRelated ) ||
hgs
parents:
diff changeset
   536
              contentType.Equals( KFSMailContentTypeMultipartParallel ) )
hgs
parents:
diff changeset
   537
        {
hgs
parents:
diff changeset
   538
        iContent = CEmailMultipart::NewL(iPluginData, msgContentId, part, EAPIOwns);
hgs
parents:
diff changeset
   539
        parts[0] = NULL; // ownership of part transferred
hgs
parents:
diff changeset
   540
        }
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542
    CleanupStack::PopAndDestroy( &parts ); // parts
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
    if (iTextContent)
hgs
parents:
diff changeset
   545
        {
hgs
parents:
diff changeset
   546
        return iTextContent;
hgs
parents:
diff changeset
   547
        }
hgs
parents:
diff changeset
   548
    return iContent;
hgs
parents:
diff changeset
   549
    }
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   552
// 
hgs
parents:
diff changeset
   553
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   554
void CEmailMessage::SetContentL( const MEmailMessageContent*  aContent )
hgs
parents:
diff changeset
   555
    {
hgs
parents:
diff changeset
   556
    User::LeaveIfNull( aContent );
hgs
parents:
diff changeset
   557
    MEmailTextContent* textContent = aContent->AsTextContentOrNull();
hgs
parents:
diff changeset
   558
    if ( textContent )
hgs
parents:
diff changeset
   559
        {
hgs
parents:
diff changeset
   560
        if ( iTextContent )
hgs
parents:
diff changeset
   561
            {
hgs
parents:
diff changeset
   562
            delete iTextContent; // Destroy old content
hgs
parents:
diff changeset
   563
            }
hgs
parents:
diff changeset
   564
        iTextContent = dynamic_cast<CEmailTextContent*>( textContent );
hgs
parents:
diff changeset
   565
        if ( iTextContent )
hgs
parents:
diff changeset
   566
            {
hgs
parents:
diff changeset
   567
            iTextContent->SetOwner( EAPIOwns );
hgs
parents:
diff changeset
   568
            }
hgs
parents:
diff changeset
   569
        return;
hgs
parents:
diff changeset
   570
        }
hgs
parents:
diff changeset
   571
    MEmailMultipart* mPart = aContent->AsMultipartOrNull();
hgs
parents:
diff changeset
   572
    if ( mPart )
hgs
parents:
diff changeset
   573
        {
hgs
parents:
diff changeset
   574
        if ( iContent )
hgs
parents:
diff changeset
   575
            {
hgs
parents:
diff changeset
   576
            delete iContent;
hgs
parents:
diff changeset
   577
            }
hgs
parents:
diff changeset
   578
        iContent = dynamic_cast<CEmailMultipart*>( mPart );
hgs
parents:
diff changeset
   579
        if ( iContent )
hgs
parents:
diff changeset
   580
            {
hgs
parents:
diff changeset
   581
            iContent->SetOwner( EAPIOwns );
hgs
parents:
diff changeset
   582
            }
hgs
parents:
diff changeset
   583
        }    
hgs
parents:
diff changeset
   584
    }
hgs
parents:
diff changeset
   585
hgs
parents:
diff changeset
   586
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   587
// 
hgs
parents:
diff changeset
   588
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   589
void CEmailMessage::SetPlainTextBodyL( const TDesC& aPlainText )
hgs
parents:
diff changeset
   590
    {
hgs
parents:
diff changeset
   591
    if ( iTextContent )
hgs
parents:
diff changeset
   592
        {
hgs
parents:
diff changeset
   593
        iTextContent->SetTextL( MEmailTextContent::EPlainText, aPlainText );
hgs
parents:
diff changeset
   594
        return;
hgs
parents:
diff changeset
   595
        }
hgs
parents:
diff changeset
   596
hgs
parents:
diff changeset
   597
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
    CFSMailMessagePart* msgTextPart = iPluginMessage->PlainTextBodyPartL();
hgs
parents:
diff changeset
   600
    
hgs
parents:
diff changeset
   601
    if( !msgTextPart )
hgs
parents:
diff changeset
   602
        {
hgs
parents:
diff changeset
   603
        msgTextPart = iPluginMessage->NewChildPartL( TFSMailMsgId(), KFSMailContentTypeTextPlain );
hgs
parents:
diff changeset
   604
        }
hgs
parents:
diff changeset
   605
    CleanupStack::PushL( msgTextPart );
hgs
parents:
diff changeset
   606
hgs
parents:
diff changeset
   607
    TMessageContentId msgContentId = MessageContentId( msgTextPart->GetPartId().Id() );
hgs
parents:
diff changeset
   608
hgs
parents:
diff changeset
   609
    msgTextPart->SetContentType( KFSMailContentTypeTextPlain );
hgs
parents:
diff changeset
   610
    iTextContent = CEmailTextContent::NewL( iPluginData, msgContentId, msgTextPart, EAPIOwns );
hgs
parents:
diff changeset
   611
    if (iTextContent)
hgs
parents:
diff changeset
   612
        {
hgs
parents:
diff changeset
   613
        iTextContent->SetTextL( MEmailTextContent::EPlainText, aPlainText );
hgs
parents:
diff changeset
   614
        }
hgs
parents:
diff changeset
   615
    CleanupStack::Pop( msgTextPart );
hgs
parents:
diff changeset
   616
hgs
parents:
diff changeset
   617
    return;
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
    }
hgs
parents:
diff changeset
   620
hgs
parents:
diff changeset
   621
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   622
// 
hgs
parents:
diff changeset
   623
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   624
MEmailAttachment* CEmailMessage::AddAttachmentL( const TDesC& aFullPath )
hgs
parents:
diff changeset
   625
    {
hgs
parents:
diff changeset
   626
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   627
hgs
parents:
diff changeset
   628
    CFSMailMessagePart* part = iPluginMessage->AddNewAttachmentL( aFullPath, TFSMailMsgId() );
hgs
parents:
diff changeset
   629
    CleanupStack::PushL( part );    
hgs
parents:
diff changeset
   630
    CEmailAttachment* att = CEmailAttachment::NewLC( iPluginData, iMsgContentId, part, EAPIOwns );
hgs
parents:
diff changeset
   631
    iAttachments.AppendL( att );
hgs
parents:
diff changeset
   632
    CleanupStack::Pop( 2, part );
hgs
parents:
diff changeset
   633
hgs
parents:
diff changeset
   634
    return att;
hgs
parents:
diff changeset
   635
    }
hgs
parents:
diff changeset
   636
hgs
parents:
diff changeset
   637
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   638
// 
hgs
parents:
diff changeset
   639
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   640
MEmailAttachment* CEmailMessage::AddAttachmentL( RFile& aFile )
hgs
parents:
diff changeset
   641
    {
hgs
parents:
diff changeset
   642
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   643
    TBufC8 <1> mime;
hgs
parents:
diff changeset
   644
    CFSMailMessagePart* part = iPluginMessage->AddNewAttachmentL( aFile, mime );
hgs
parents:
diff changeset
   645
    CleanupStack::PushL( part );
hgs
parents:
diff changeset
   646
    CEmailAttachment* att = CEmailAttachment::NewLC( iPluginData, iMsgContentId, part, EAPIOwns );
hgs
parents:
diff changeset
   647
    iAttachments.AppendL( att );
hgs
parents:
diff changeset
   648
hgs
parents:
diff changeset
   649
    CleanupStack::Pop( 2, part );
hgs
parents:
diff changeset
   650
hgs
parents:
diff changeset
   651
    return att;
hgs
parents:
diff changeset
   652
    }
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   655
// 
hgs
parents:
diff changeset
   656
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   657
TInt CEmailMessage::GetAttachmentsL( REmailAttachmentArray& aAttachments )
hgs
parents:
diff changeset
   658
    {
hgs
parents:
diff changeset
   659
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
    RPointerArray<CFSMailMessagePart> attachments;
hgs
parents:
diff changeset
   662
    CleanupResetAndDestroyPushL( attachments );
hgs
parents:
diff changeset
   663
    iPluginMessage->AttachmentListL( attachments );
hgs
parents:
diff changeset
   664
    const TInt count( attachments.Count() );
hgs
parents:
diff changeset
   665
    for (TInt i = 0; i < count; i++)
hgs
parents:
diff changeset
   666
        {
hgs
parents:
diff changeset
   667
        TMessageContentId msgContentId = MessageContentId( attachments[i]->GetPartId().Id() );
hgs
parents:
diff changeset
   668
hgs
parents:
diff changeset
   669
        CEmailAttachment* att = CEmailAttachment::NewL( 
hgs
parents:
diff changeset
   670
            iPluginData, msgContentId, attachments[i], EClientOwns );
76
hgs
parents: 74
diff changeset
   671
        CleanupStack::PushL(att);
47
hgs
parents:
diff changeset
   672
        aAttachments.AppendL( att );
76
hgs
parents: 74
diff changeset
   673
        CleanupStack::Pop(att);
47
hgs
parents:
diff changeset
   674
        }
hgs
parents:
diff changeset
   675
    CleanupStack::Pop( &attachments );
hgs
parents:
diff changeset
   676
    return count;
hgs
parents:
diff changeset
   677
    }
hgs
parents:
diff changeset
   678
hgs
parents:
diff changeset
   679
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   680
// 
hgs
parents:
diff changeset
   681
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   682
void CEmailMessage::RemoveAttachmentL( const MEmailAttachment& /*aAttachment*/ )
hgs
parents:
diff changeset
   683
    {
hgs
parents:
diff changeset
   684
    User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   685
    }
hgs
parents:
diff changeset
   686
hgs
parents:
diff changeset
   687
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   688
// 
hgs
parents:
diff changeset
   689
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   690
const TFolderId& CEmailMessage::ParentFolderId() const
hgs
parents:
diff changeset
   691
    {
hgs
parents:
diff changeset
   692
    return iMessageId.iFolderId;
hgs
parents:
diff changeset
   693
    }
hgs
parents:
diff changeset
   694
hgs
parents:
diff changeset
   695
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   696
// 
hgs
parents:
diff changeset
   697
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   698
void CEmailMessage::SaveChangesL()
hgs
parents:
diff changeset
   699
    {
hgs
parents:
diff changeset
   700
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   701
    
hgs
parents:
diff changeset
   702
    TFSMailMsgId mailboxId( 
hgs
parents:
diff changeset
   703
            FsMsgId( iPluginData, iMessageId.iFolderId.iMailboxId ) );
hgs
parents:
diff changeset
   704
    
hgs
parents:
diff changeset
   705
    iPlugin->StoreMessageL( mailboxId, *iPluginMessage );
hgs
parents:
diff changeset
   706
    }
hgs
parents:
diff changeset
   707
hgs
parents:
diff changeset
   708
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   709
// 
hgs
parents:
diff changeset
   710
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   711
void CEmailMessage::SendL()
hgs
parents:
diff changeset
   712
    {
hgs
parents:
diff changeset
   713
    User::LeaveIfNull( iPluginMessage );
hgs
parents:
diff changeset
   714
    
hgs
parents:
diff changeset
   715
    if ( iEventLoop.isRunning() )
hgs
parents:
diff changeset
   716
        User::Leave( KErrInUse );
hgs
parents:
diff changeset
   717
    
hgs
parents:
diff changeset
   718
    SaveChangesL();
hgs
parents:
diff changeset
   719
    iError = KErrNone;
hgs
parents:
diff changeset
   720
    iPlugin->SendMessageL( *iPluginMessage, *this, KSendMessageRequestId );
hgs
parents:
diff changeset
   721
    iEventLoop.exec();
hgs
parents:
diff changeset
   722
hgs
parents:
diff changeset
   723
    User::LeaveIfError( iError );
hgs
parents:
diff changeset
   724
    }
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   727
// 
hgs
parents:
diff changeset
   728
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   729
void CEmailMessage::RequestResponseL( TFSProgress aEvent, TInt aRequestId )
hgs
parents:
diff changeset
   730
    {
hgs
parents:
diff changeset
   731
    iError = aEvent.iError;
hgs
parents:
diff changeset
   732
hgs
parents:
diff changeset
   733
    if ( aRequestId == KSendMessageRequestId &&
hgs
parents:
diff changeset
   734
            aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
hgs
parents:
diff changeset
   735
        iEventLoop.quit();
hgs
parents:
diff changeset
   736
    }
hgs
parents:
diff changeset
   737
hgs
parents:
diff changeset
   738
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   739
// 
hgs
parents:
diff changeset
   740
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   741
void CEmailMessage::ConvertAddressArrayL(
hgs
parents:
diff changeset
   742
        const MEmailAddress::TRole aRole,
hgs
parents:
diff changeset
   743
        const RPointerArray<CFSMailAddress>& aSrc,
hgs
parents:
diff changeset
   744
        REmailAddressArray& aDst ) const
hgs
parents:
diff changeset
   745
    {
hgs
parents:
diff changeset
   746
    for ( TInt i=0; i<aSrc.Count(); i++ )
hgs
parents:
diff changeset
   747
        {
hgs
parents:
diff changeset
   748
        CEmailAddress* recipient = CreateAddressLC( aRole, *aSrc[i] );
hgs
parents:
diff changeset
   749
        aDst.AppendL( recipient );
hgs
parents:
diff changeset
   750
        CleanupStack::Pop( recipient );
hgs
parents:
diff changeset
   751
        }
hgs
parents:
diff changeset
   752
    }
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   755
//
hgs
parents:
diff changeset
   756
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   757
CEmailAddress* CEmailMessage::CreateAddressLC(
hgs
parents:
diff changeset
   758
        const MEmailAddress::TRole aRole, 
hgs
parents:
diff changeset
   759
        CFSMailAddress& aFsAddress ) const
hgs
parents:
diff changeset
   760
    {
hgs
parents:
diff changeset
   761
    CEmailAddress* address = CEmailAddress::NewLC( aRole, EClientOwns );
hgs
parents:
diff changeset
   762
    TDesC& temp1 = aFsAddress.GetEmailAddress();
hgs
parents:
diff changeset
   763
    if ( &temp1 )
hgs
parents:
diff changeset
   764
        {
hgs
parents:
diff changeset
   765
        address->SetAddressL( temp1 );
hgs
parents:
diff changeset
   766
        }
hgs
parents:
diff changeset
   767
    TDesC& temp2 = aFsAddress.GetDisplayName();
hgs
parents:
diff changeset
   768
    if ( &temp2 )
hgs
parents:
diff changeset
   769
        {
hgs
parents:
diff changeset
   770
        address->SetDisplayNameL( temp2 );
hgs
parents:
diff changeset
   771
        }   
hgs
parents:
diff changeset
   772
    return address;
hgs
parents:
diff changeset
   773
    }
hgs
parents:
diff changeset
   774
hgs
parents:
diff changeset
   775
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   776
//
hgs
parents:
diff changeset
   777
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   778
TUint CEmailMessage::MapFlags( const TUint& aFlag )
hgs
parents:
diff changeset
   779
    {
hgs
parents:
diff changeset
   780
    TUint flag = 0;
hgs
parents:
diff changeset
   781
    switch( aFlag )
hgs
parents:
diff changeset
   782
        {
hgs
parents:
diff changeset
   783
        case EFlag_Read:
hgs
parents:
diff changeset
   784
            flag = EFSMsgFlag_Read;
hgs
parents:
diff changeset
   785
            break;
hgs
parents:
diff changeset
   786
        case EFlag_Read_Locally:
hgs
parents:
diff changeset
   787
            flag = EFSMsgFlag_Read_Locally;
hgs
parents:
diff changeset
   788
            break;
hgs
parents:
diff changeset
   789
        case EFlag_Low:
hgs
parents:
diff changeset
   790
            flag = EFSMsgFlag_Low;
hgs
parents:
diff changeset
   791
            break;
hgs
parents:
diff changeset
   792
        case EFlag_Important:
hgs
parents:
diff changeset
   793
            flag = EFSMsgFlag_Important;
hgs
parents:
diff changeset
   794
            break;
hgs
parents:
diff changeset
   795
        case EFlag_FollowUpComplete:
hgs
parents:
diff changeset
   796
            flag = EFSMsgFlag_FollowUpComplete;
hgs
parents:
diff changeset
   797
            break;
hgs
parents:
diff changeset
   798
        case EFlag_FollowUp:
hgs
parents:
diff changeset
   799
            flag = EFSMsgFlag_FollowUp;
hgs
parents:
diff changeset
   800
            break;
hgs
parents:
diff changeset
   801
        case EFlag_Attachments:
hgs
parents:
diff changeset
   802
            flag = EFSMsgFlag_Attachments;
hgs
parents:
diff changeset
   803
            break;
hgs
parents:
diff changeset
   804
        case EFlag_Multiple:
hgs
parents:
diff changeset
   805
            flag = EFSMsgFlag_Multiple;
hgs
parents:
diff changeset
   806
            break;
hgs
parents:
diff changeset
   807
        case EFlag_CalendarMsg:
hgs
parents:
diff changeset
   808
            flag = EFSMsgFlag_CalendarMsg;
hgs
parents:
diff changeset
   809
            break;
hgs
parents:
diff changeset
   810
        case EFlag_Answered:
hgs
parents:
diff changeset
   811
            flag = EFSMsgFlag_Answered;
hgs
parents:
diff changeset
   812
            break;
hgs
parents:
diff changeset
   813
        case EFlag_Forwarded:
hgs
parents:
diff changeset
   814
            flag = EFSMsgFlag_Forwarded;
hgs
parents:
diff changeset
   815
            break;
hgs
parents:
diff changeset
   816
        case EFlag_OnlyToMe:
hgs
parents:
diff changeset
   817
            flag = EFSMsgFlag_OnlyToMe;
hgs
parents:
diff changeset
   818
            break;
hgs
parents:
diff changeset
   819
        case EFlag_RemoteDeleted:
hgs
parents:
diff changeset
   820
            flag = EFSMsgFlag_RemoteDeleted;
hgs
parents:
diff changeset
   821
            break;
hgs
parents:
diff changeset
   822
        case EFlag_HasMsgSender:
hgs
parents:
diff changeset
   823
            flag = EFSMsgFlag_HasMsgSender;
hgs
parents:
diff changeset
   824
            break;
hgs
parents:
diff changeset
   825
        default:
hgs
parents:
diff changeset
   826
            break;
hgs
parents:
diff changeset
   827
        }
hgs
parents:
diff changeset
   828
    return flag;
hgs
parents:
diff changeset
   829
    }
hgs
parents:
diff changeset
   830
hgs
parents:
diff changeset
   831
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   832
//
hgs
parents:
diff changeset
   833
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   834
void CEmailMessage::ShowMessageViewerL()
hgs
parents:
diff changeset
   835
    {   
hgs
parents:
diff changeset
   836
    bool syncronous;
hgs
parents:
diff changeset
   837
66
hgs
parents: 62
diff changeset
   838
    XQServiceRequest request( XQI_EMAIL_MESSAGE_VIEW,
hgs
parents: 62
diff changeset
   839
                              XQOP_EMAIL_MESSAGE_VIEW,
hgs
parents: 62
diff changeset
   840
                              syncronous );
47
hgs
parents:
diff changeset
   841
hgs
parents:
diff changeset
   842
    TFSMailMsgId mailboxId = FsMsgId( iPluginData, iMessageId.iFolderId.iMailboxId );
hgs
parents:
diff changeset
   843
    TFSMailMsgId folderId = FsMsgId( iPluginData, iMessageId.iFolderId );
hgs
parents:
diff changeset
   844
    TFSMailMsgId messageId = FsMsgId( iPluginData, iMessageId );
hgs
parents:
diff changeset
   845
66
hgs
parents: 62
diff changeset
   846
    QList<QVariant> idList;
hgs
parents: 62
diff changeset
   847
    idList.append( mailboxId.Id() );
hgs
parents: 62
diff changeset
   848
    idList.append( folderId.Id() );
hgs
parents: 62
diff changeset
   849
    idList.append( messageId.Id() );
hgs
parents: 62
diff changeset
   850
hgs
parents: 62
diff changeset
   851
    /*
hgs
parents: 62
diff changeset
   852
        Uncomment the following when the viewer service API operation definition
hgs
parents: 62
diff changeset
   853
        (XQOP_EMAIL_MESSAGE_VIEW) has been updated.
hgs
parents: 62
diff changeset
   854
    
hgs
parents: 62
diff changeset
   855
    QVariant idListAsVariant = QVariant::fromValue( idList );
hgs
parents: 62
diff changeset
   856
hgs
parents: 62
diff changeset
   857
    // Add the message list view into the view stack.
hgs
parents: 62
diff changeset
   858
    quint64 flags( EmailBackReturnsToMessageList );
hgs
parents: 62
diff changeset
   859
hgs
parents: 62
diff changeset
   860
    QList<QVariant> argumentList;
hgs
parents: 62
diff changeset
   861
    argumentList.append( idListAsVariant );
hgs
parents: 62
diff changeset
   862
    argumentList.append( flags );
hgs
parents: 62
diff changeset
   863
hgs
parents: 62
diff changeset
   864
    request.setArguments( argumentList );    
hgs
parents: 62
diff changeset
   865
    */
hgs
parents: 62
diff changeset
   866
    
hgs
parents: 62
diff changeset
   867
    // Remove the following line when the viewer service API operation
hgs
parents: 62
diff changeset
   868
    // definition has been updated.
hgs
parents: 62
diff changeset
   869
    request.setArguments( idList );
47
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
    QVariant returnValue;
66
hgs
parents: 62
diff changeset
   872
47
hgs
parents:
diff changeset
   873
    if ( !request.send( returnValue ) )
66
hgs
parents: 62
diff changeset
   874
        {
47
hgs
parents:
diff changeset
   875
        User::Leave( KErrGeneral );
66
hgs
parents: 62
diff changeset
   876
        }
47
hgs
parents:
diff changeset
   877
    }
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   880
// Launches Email application and new reply message in editor. 
hgs
parents:
diff changeset
   881
// The method follows "fire and forget" pattern, returns immediately.
hgs
parents:
diff changeset
   882
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   883
void CEmailMessage::ReplyToMessageL( const TBool /*aReplyToAll*/ )
hgs
parents:
diff changeset
   884
    {
hgs
parents:
diff changeset
   885
    User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   886
    }
hgs
parents:
diff changeset
   887
hgs
parents:
diff changeset
   888
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   889
//
hgs
parents:
diff changeset
   890
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   891
void CEmailMessage::ForwardMessageL()
hgs
parents:
diff changeset
   892
    {
hgs
parents:
diff changeset
   893
    User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   894
    }
hgs
parents:
diff changeset
   895
hgs
parents:
diff changeset
   896
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   897
//
hgs
parents:
diff changeset
   898
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   899
TMessageContentId CEmailMessage::MessageContentId( TEntryId aContentId ) const
hgs
parents:
diff changeset
   900
    {
hgs
parents:
diff changeset
   901
    TMessageContentId msgContentId = TMessageContentId( 
hgs
parents:
diff changeset
   902
                    aContentId,
hgs
parents:
diff changeset
   903
                    iMessageId.iId,
hgs
parents:
diff changeset
   904
                    iMessageId.iFolderId.iId,
hgs
parents:
diff changeset
   905
                    iMessageId.iFolderId.iMailboxId );
hgs
parents:
diff changeset
   906
    return msgContentId;
hgs
parents:
diff changeset
   907
    }
hgs
parents:
diff changeset
   908
hgs
parents:
diff changeset
   909
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   910
//
hgs
parents:
diff changeset
   911
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   912
TContentType::TContentType( const TDesC& aContentType ) : iContentType( aContentType )
hgs
parents:
diff changeset
   913
    {
hgs
parents:
diff changeset
   914
    _LIT( KSeparator, ";" );
hgs
parents:
diff changeset
   915
    TInt end = aContentType.Find( KSeparator );
hgs
parents:
diff changeset
   916
    if ( end != KErrNotFound )
hgs
parents:
diff changeset
   917
        {
hgs
parents:
diff changeset
   918
        iContentType.Set( aContentType.Left( end ) );
hgs
parents:
diff changeset
   919
        }
hgs
parents:
diff changeset
   920
    }
hgs
parents:
diff changeset
   921
hgs
parents:
diff changeset
   922
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   923
//
hgs
parents:
diff changeset
   924
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   925
TBool TContentType::Equals( const TDesC& aContentType )
hgs
parents:
diff changeset
   926
    {
hgs
parents:
diff changeset
   927
    TBool ret = iContentType.CompareF( aContentType );
hgs
parents:
diff changeset
   928
    if ( ret == 0  )
hgs
parents:
diff changeset
   929
        return ETrue;
hgs
parents:
diff changeset
   930
    else
hgs
parents:
diff changeset
   931
        return EFalse;
hgs
parents:
diff changeset
   932
    }
hgs
parents:
diff changeset
   933
hgs
parents:
diff changeset
   934
// End of file