emailservices/emailcommon/src/CFSMailBox.cpp
branchRCL_3
changeset 63 d189ee25cf9d
equal deleted inserted replaced
61:dcf0eedfc1a3 63:d189ee25cf9d
       
     1 /*
       
     2 * Copyright (c) 2007-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:  common mailbox object
       
    15 *
       
    16 */
       
    17 
       
    18 #include "emailtrace.h"
       
    19 
       
    20 // <qmail>
       
    21 #include <nmcommonheaders.h>
       
    22 // <//qmail>
       
    23 
       
    24 #include <bamdesca.h>
       
    25 #include "CFSMailPlugin.h"
       
    26 #include "cmrcalendarinfoimpl.h"
       
    27 #include "CFSMailBox.h"
       
    28 #include "CFSMailRequestObserver.h"
       
    29 #include "cmailboxstateext.h"
       
    30 // <qmail>
       
    31 #include "CFSMailFolder.h"
       
    32 #include "CFSMailAddress.h"
       
    33 // </qmail>
       
    34 
       
    35 
       
    36 // ================= MEMBER FUNCTIONS ==========================================
       
    37 // -----------------------------------------------------------------------------
       
    38 // CFSMailBox::NewLC
       
    39 // -----------------------------------------------------------------------------
       
    40 EXPORT_C CFSMailBox* CFSMailBox::NewLC(TFSMailMsgId aMailBoxId)
       
    41 {
       
    42     NM_FUNCTION;
       
    43     
       
    44     CFSMailBox* api = new (ELeave) CFSMailBox();
       
    45     CleanupStack:: PushL(api);
       
    46     api->ConstructL(aMailBoxId);
       
    47     return api;
       
    48 } 
       
    49 
       
    50 // -----------------------------------------------------------------------------
       
    51 // CFSMailBox::NewL
       
    52 // -----------------------------------------------------------------------------
       
    53 EXPORT_C CFSMailBox* CFSMailBox::NewL(TFSMailMsgId aMailBoxId)
       
    54 {
       
    55     NM_FUNCTION;
       
    56     
       
    57     CFSMailBox* api =  CFSMailBox::NewLC(aMailBoxId);
       
    58     CleanupStack:: Pop(api);
       
    59     return api;
       
    60 }
       
    61 
       
    62 // -----------------------------------------------------------------------------
       
    63 // CFSMailBox::CFSMailBox
       
    64 // -----------------------------------------------------------------------------
       
    65 CFSMailBox::CFSMailBox()
       
    66 {
       
    67     NM_FUNCTION;
       
    68     
       
    69     // get requesthandler pointer
       
    70     iRequestHandler = static_cast<CFSMailRequestHandler*>(Dll::Tls());
       
    71 }
       
    72 
       
    73 // -----------------------------------------------------------------------------
       
    74 // CFSMailBox::~CFSMailBox
       
    75 // -----------------------------------------------------------------------------
       
    76 EXPORT_C CFSMailBox::~CFSMailBox()
       
    77 {
       
    78     NM_FUNCTION;
       
    79     // <qmail> Not using KMailboxExtMrCalInfo </qmail>
       
    80     iFolders.ResetAndDestroy();
       
    81 }
       
    82 
       
    83 // -----------------------------------------------------------------------------
       
    84 // CFSMailBox::ConstructL
       
    85 // -----------------------------------------------------------------------------
       
    86 void CFSMailBox::ConstructL(TFSMailMsgId aMailBoxId)
       
    87 {
       
    88     NM_FUNCTION;
       
    89     
       
    90 // <qmail>
       
    91     CFSMailBoxBase::ConstructL(aMailBoxId);
       
    92 // </qmail>
       
    93 }
       
    94 
       
    95 // -----------------------------------------------------------------------------
       
    96 // CFSMailBox::GoOnlineL
       
    97 // -----------------------------------------------------------------------------
       
    98 EXPORT_C void CFSMailBox::GoOnlineL()
       
    99     {
       
   100     NM_FUNCTION;
       
   101     
       
   102     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   103         {
       
   104         plugin->GoOnlineL( GetId() );
       
   105         }
       
   106     }
       
   107 
       
   108 // -----------------------------------------------------------------------------
       
   109 // CFSMailBox::GoOfflineL
       
   110 // -----------------------------------------------------------------------------
       
   111 EXPORT_C void CFSMailBox::GoOfflineL()
       
   112     {
       
   113     NM_FUNCTION;
       
   114     
       
   115     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   116         {
       
   117         plugin->GoOfflineL( GetId() );
       
   118         }
       
   119         
       
   120     }
       
   121 
       
   122 // -----------------------------------------------------------------------------
       
   123 // CFSMailBox::CancelSyncL
       
   124 // -----------------------------------------------------------------------------
       
   125 EXPORT_C void CFSMailBox::CancelSyncL()
       
   126     {
       
   127     NM_FUNCTION;
       
   128     
       
   129     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   130         {
       
   131         plugin->CancelSyncL( GetId() );
       
   132         }
       
   133     }
       
   134 
       
   135 // -----------------------------------------------------------------------------
       
   136 // CFSMailBox::GetLastSyncStatusL
       
   137 // -----------------------------------------------------------------------------
       
   138 EXPORT_C TFSProgress CFSMailBox::GetLastSyncStatusL()
       
   139     {
       
   140     NM_FUNCTION;
       
   141     
       
   142     TFSProgress progress;
       
   143     progress.iError = EFalse;
       
   144     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   145         {
       
   146         progress = plugin->GetLastSyncStatusL( GetId() );       
       
   147         }
       
   148     return progress;
       
   149     }
       
   150 
       
   151 // -----------------------------------------------------------------------------
       
   152 // CFSMailBox::RefreshNowL
       
   153 // -----------------------------------------------------------------------------
       
   154 EXPORT_C TInt CFSMailBox::RefreshNowL(
       
   155     MFSMailRequestObserver& aOperationObserver )
       
   156     {
       
   157     NM_FUNCTION;
       
   158     
       
   159     TFSPendingRequest request;
       
   160     request.iRequestId = 0;
       
   161     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   162         {
       
   163         // init asynchronous request
       
   164         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
       
   165                                                         aOperationObserver );
       
   166         MFSMailRequestObserver* observer = request.iObserver;
       
   167         TRAPD(err,plugin->RefreshNowL( GetId(), *observer, request.iRequestId));
       
   168         if(err != KErrNone)
       
   169             {
       
   170             iRequestHandler->CompleteRequest(request.iRequestId);
       
   171             User::Leave(err);
       
   172             }
       
   173         }
       
   174     return request.iRequestId;
       
   175     }
       
   176 
       
   177 // -----------------------------------------------------------------------------
       
   178 // CFSMailBox::RefreshNowL
       
   179 // -----------------------------------------------------------------------------
       
   180 EXPORT_C TInt CFSMailBox::RefreshNowL( )
       
   181     {
       
   182     NM_FUNCTION;
       
   183     
       
   184     TFSPendingRequest request;
       
   185     request.iRequestId = 0;
       
   186     MFSMailRequestObserver* observer = NULL;
       
   187     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   188         {
       
   189         // init asynchronous request
       
   190         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(), *observer );
       
   191         
       
   192         observer = request.iObserver;
       
   193         TRAPD(err,plugin->RefreshNowL( GetId(), *observer, request.iRequestId));
       
   194         if(err != KErrNone)
       
   195             {
       
   196             iRequestHandler->CompleteRequest(request.iRequestId);
       
   197             User::Leave(err);
       
   198             }
       
   199         }
       
   200     return request.iRequestId;
       
   201     }
       
   202 
       
   203 // -----------------------------------------------------------------------------
       
   204 // CFSMailBox::CreateMessageToSend
       
   205 // -----------------------------------------------------------------------------
       
   206 EXPORT_C CFSMailMessage* CFSMailBox::CreateMessageToSend( )
       
   207 {
       
   208     NM_FUNCTION;
       
   209     
       
   210     CFSMailMessage* message(NULL);
       
   211     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   212         {
       
   213         TRAPD(err,message = plugin->CreateMessageToSendL( GetId() ));
       
   214         if(err != KErrNone)
       
   215             {
       
   216             message = NULL;
       
   217             }
       
   218         }
       
   219     return message;
       
   220 }
       
   221 
       
   222 // <qmail>
       
   223 // -----------------------------------------------------------------------------
       
   224 // CFSMailBox::CreateMessageToSendL
       
   225 // -----------------------------------------------------------------------------
       
   226 EXPORT_C TInt CFSMailBox::CreateMessageToSendL(
       
   227         MFSMailRequestObserver& aOperationObserver )
       
   228     {
       
   229     NM_FUNCTION;
       
   230     
       
   231     TFSPendingRequest request;
       
   232     
       
   233     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
       
   234     
       
   235     if ( plugin )
       
   236         {
       
   237         // init asynchronous request
       
   238         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
       
   239                                                       aOperationObserver );
       
   240 
       
   241         MFSMailRequestObserver* observer = request.iObserver;
       
   242 
       
   243         TRAPD( err, plugin->CreateMessageToSendL( 
       
   244             GetId(), *observer, request.iRequestId ) );
       
   245 
       
   246         if( err != KErrNone )
       
   247             {
       
   248             iRequestHandler->CompleteRequest( request.iRequestId );
       
   249             User::Leave( err );
       
   250             }
       
   251         }    
       
   252     else
       
   253         {
       
   254         User::Leave( KErrNotFound );
       
   255         }
       
   256     
       
   257     return request.iRequestId;
       
   258     }
       
   259 // </qmail>
       
   260 
       
   261 //<qmail>
       
   262 EXPORT_C int CFSMailBox::UpdateMessageFlagsL( 
       
   263     const TFSMailMsgId aMailboxId,
       
   264     RPointerArray<CFSMailMessage> &messages,
       
   265     MFSMailRequestObserver& aOperationObserver)
       
   266 {
       
   267     NM_FUNCTION;
       
   268     
       
   269     Q_UNUSED(aMailboxId);
       
   270     TFSPendingRequest request;
       
   271         
       
   272     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
       
   273     
       
   274     if ( plugin )
       
   275         {
       
   276         // init asynchronous request
       
   277         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
       
   278                                                       aOperationObserver );
       
   279 
       
   280         MFSMailRequestObserver* observer = request.iObserver;
       
   281 
       
   282         TRAPD( err, plugin->StoreMessagesL( 
       
   283                 GetId(), 
       
   284                 messages,
       
   285                 *observer, request.iRequestId ) );
       
   286 
       
   287         if( err != KErrNone )
       
   288             {
       
   289             iRequestHandler->CompleteRequest( request.iRequestId );
       
   290             User::Leave( err );
       
   291             }
       
   292         }
       
   293     else
       
   294         {
       
   295         User::Leave( KErrNotFound );
       
   296         }
       
   297     
       
   298     return request.iRequestId;
       
   299     
       
   300 }
       
   301 //</qmail>
       
   302 
       
   303 // -----------------------------------------------------------------------------
       
   304 // CFSMailBox::CreateForwardMessage
       
   305 // -----------------------------------------------------------------------------
       
   306 EXPORT_C CFSMailMessage* CFSMailBox::CreateForwardMessage(  TFSMailMsgId aOriginalMessageId,
       
   307                                                             const TDesC& aHeaderDescriptor )
       
   308 {
       
   309     NM_FUNCTION;
       
   310     
       
   311     CFSMailMessage* message(NULL);
       
   312     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   313         {
       
   314         TRAPD(err,message = plugin->CreateForwardMessageL( GetId(), 
       
   315                                                                 aOriginalMessageId,
       
   316                                                                 aHeaderDescriptor ));
       
   317         if(err != KErrNone)
       
   318             {
       
   319             message = NULL;
       
   320             }
       
   321         }
       
   322     return message;
       
   323 }
       
   324 
       
   325 // <qmail>
       
   326 // -----------------------------------------------------------------------------
       
   327 // CFSMailBox::CreateForwardMessageL
       
   328 // -----------------------------------------------------------------------------
       
   329 EXPORT_C TInt CFSMailBox::CreateForwardMessageL( const TFSMailMsgId aOriginalMessageId,
       
   330                         MFSMailRequestObserver& aOperationObserver,
       
   331                         const TDesC& aHeaderDescriptor )
       
   332     {
       
   333     NM_FUNCTION;
       
   334     
       
   335     TFSPendingRequest request;
       
   336     
       
   337     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
       
   338     
       
   339     if ( plugin )
       
   340         {
       
   341         // init asynchronous request
       
   342         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
       
   343                                                       aOperationObserver );
       
   344 
       
   345         MFSMailRequestObserver* observer = request.iObserver;
       
   346 
       
   347         TRAPD( err, plugin->CreateForwardMessageL( 
       
   348             GetId(), aOriginalMessageId, *observer, request.iRequestId, aHeaderDescriptor ) );
       
   349 
       
   350         if( err != KErrNone )
       
   351             {
       
   352             iRequestHandler->CompleteRequest( request.iRequestId );
       
   353             User::Leave( err );
       
   354             }
       
   355         }    
       
   356     else
       
   357         {
       
   358         User::Leave( KErrNotFound );
       
   359         }
       
   360     
       
   361     return request.iRequestId;
       
   362     }
       
   363 // </qmail>
       
   364 
       
   365 // -----------------------------------------------------------------------------
       
   366 // CFSMailBox::CreateReplyMessage
       
   367 // -----------------------------------------------------------------------------
       
   368 EXPORT_C CFSMailMessage* CFSMailBox::CreateReplyMessage( TFSMailMsgId aOriginalMessageId,
       
   369                                                          TBool aReplyToAll,
       
   370                                                          const TDesC& aHeaderDescriptor )
       
   371 {
       
   372     NM_FUNCTION;
       
   373     
       
   374     CFSMailMessage* message = NULL;
       
   375     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   376         {
       
   377         TRAPD(err,message = plugin->CreateReplyMessageL( GetId(),
       
   378                                                             aOriginalMessageId,
       
   379                                                             aReplyToAll,
       
   380                                                             aHeaderDescriptor ));
       
   381         if(err != KErrNone)
       
   382             {
       
   383             message = NULL;
       
   384             }
       
   385         }
       
   386     return message;
       
   387 }
       
   388 
       
   389 // <qmail>
       
   390 // -----------------------------------------------------------------------------
       
   391 // CFSMailBox::CreateReplyMessageL
       
   392 // -----------------------------------------------------------------------------
       
   393 EXPORT_C TInt CFSMailBox::CreateReplyMessageL( const TFSMailMsgId aOriginalMessageId,
       
   394                                       const TBool aReplyToAll,
       
   395                                       MFSMailRequestObserver& aOperationObserver,
       
   396                                       const TDesC& aHeaderDescriptor )
       
   397 {
       
   398     NM_FUNCTION;
       
   399     
       
   400     TFSPendingRequest request;
       
   401     
       
   402     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
       
   403     
       
   404     if ( plugin )
       
   405         {
       
   406         // init asynchronous request
       
   407         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
       
   408                                                       aOperationObserver );
       
   409 
       
   410         MFSMailRequestObserver* observer = request.iObserver;
       
   411 
       
   412         TRAPD( err, plugin->CreateReplyMessageL( 
       
   413             GetId(), aOriginalMessageId, aReplyToAll, *observer, request.iRequestId, aHeaderDescriptor ) );
       
   414 
       
   415         if( err != KErrNone )
       
   416             {
       
   417             iRequestHandler->CompleteRequest( request.iRequestId );
       
   418             User::Leave( err );
       
   419             }
       
   420         }    
       
   421     else
       
   422         {
       
   423         User::Leave( KErrNotFound );
       
   424         }
       
   425     
       
   426     return request.iRequestId;
       
   427 }
       
   428 // </qmail>
       
   429 
       
   430 // -----------------------------------------------------------------------------
       
   431 // CFSMailBox::GetStandardFolderId
       
   432 // -----------------------------------------------------------------------------
       
   433 EXPORT_C TFSMailMsgId CFSMailBox::GetStandardFolderId(TFSFolderType aFolderType)
       
   434 {
       
   435     NM_FUNCTION;
       
   436     
       
   437     TFSMailMsgId folderId;
       
   438     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   439         {
       
   440         TRAPD(err, folderId = plugin->GetStandardFolderIdL(GetId(), aFolderType ));
       
   441         if(err != KErrNone)
       
   442             {
       
   443             folderId.SetNullId();
       
   444             }
       
   445         }
       
   446     return folderId;
       
   447 }
       
   448 
       
   449 // -----------------------------------------------------------------------------
       
   450 // CFSMailBox::SendMessageL
       
   451 // -----------------------------------------------------------------------------
       
   452 EXPORT_C void CFSMailBox::SendMessageL( CFSMailMessage& aMessage )
       
   453     {
       
   454     NM_FUNCTION;
       
   455     
       
   456     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   457         {
       
   458         // <qmail> Removed UpdateMrusL. </qmail>
       
   459         plugin->SendMessageL( aMessage );
       
   460         }
       
   461 	}
       
   462 
       
   463 // <qmail>
       
   464 // -----------------------------------------------------------------------------
       
   465 // CFSMailBox::SendMessageL
       
   466 // -----------------------------------------------------------------------------
       
   467 EXPORT_C TInt CFSMailBox::SendMessageL(
       
   468         CFSMailMessage& aMessage,
       
   469         MFSMailRequestObserver& aOperationObserver )
       
   470     {
       
   471     NM_FUNCTION;
       
   472 
       
   473     TFSPendingRequest request;
       
   474 
       
   475     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
       
   476 
       
   477     if ( plugin )
       
   478         {
       
   479         // <qmail> Removed UpdateMrusL. </qmail>
       
   480 
       
   481         // init asynchronous request
       
   482         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
       
   483                                                       aOperationObserver );
       
   484 
       
   485         MFSMailRequestObserver* observer = request.iObserver;
       
   486 
       
   487         TRAPD( err, plugin->SendMessageL(
       
   488             aMessage, *observer, request.iRequestId ) );
       
   489 
       
   490         if( err != KErrNone )
       
   491             {
       
   492             iRequestHandler->CompleteRequest( request.iRequestId );
       
   493             User::Leave( err );
       
   494             }
       
   495         }
       
   496     else
       
   497         {
       
   498         User::Leave( KErrNotFound );
       
   499         }
       
   500 
       
   501     return request.iRequestId;
       
   502     }
       
   503 // </qmail>
       
   504 
       
   505 // -----------------------------------------------------------------------------
       
   506 // CFSMailBox::ListFolders
       
   507 // -----------------------------------------------------------------------------
       
   508 EXPORT_C void CFSMailBox::ListFolders(  TFSMailMsgId aFolder,
       
   509                                         RPointerArray<CFSMailFolder>& aFolderList)
       
   510 {
       
   511     NM_FUNCTION;
       
   512     
       
   513     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   514     {
       
   515         TRAPD(err, plugin->ListFoldersL(GetId(),aFolder,aFolderList));
       
   516         if(err != KErrNone)
       
   517             {
       
   518             aFolderList.ResetAndDestroy();
       
   519             }
       
   520     }
       
   521 }
       
   522 
       
   523 // -----------------------------------------------------------------------------
       
   524 // CFSMailBox::ListFolders
       
   525 // -----------------------------------------------------------------------------
       
   526 EXPORT_C RPointerArray<CFSMailFolder>& CFSMailBox::ListFolders( )
       
   527 {   
       
   528     NM_FUNCTION;
       
   529     
       
   530     iFolders.ResetAndDestroy();
       
   531     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   532     {
       
   533         TRAPD(err,plugin->ListFoldersL(GetId(),iFolders));
       
   534         if(err != KErrNone)
       
   535             {
       
   536             iFolders.ResetAndDestroy();
       
   537             }
       
   538     }
       
   539 
       
   540     return iFolders;
       
   541 }
       
   542 
       
   543 // -----------------------------------------------------------------------------
       
   544 // CFSMailBox::GetBrandingIdL
       
   545 // -----------------------------------------------------------------------------
       
   546 EXPORT_C TDesC& CFSMailBox::GetBrandingIdL( )
       
   547 {
       
   548     NM_FUNCTION;
       
   549 	if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
       
   550         {
       
   551         TDesC& result = plugin->GetBrandingIdL( GetId() );
       
   552         return result;
       
   553         }
       
   554     
       
   555     return BrandingId();
       
   556 }
       
   557 
       
   558 // -----------------------------------------------------------------------------
       
   559 // CFSMailBox::MoveMessagesL
       
   560 // -----------------------------------------------------------------------------
       
   561 EXPORT_C void CFSMailBox::MoveMessagesL( const RArray<TFSMailMsgId>& aMessageIds, 
       
   562                                          const TFSMailMsgId aSourceFolderId, 
       
   563                                          const TFSMailMsgId aDestinationFolderId )
       
   564 {
       
   565     NM_FUNCTION;
       
   566     
       
   567     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   568         {
       
   569         plugin->MoveMessagesL(GetId(), aMessageIds, aSourceFolderId, aDestinationFolderId);
       
   570         }
       
   571 }
       
   572 
       
   573 // -----------------------------------------------------------------------------
       
   574 // CFSMailBox::MoveMessagesL
       
   575 // -----------------------------------------------------------------------------
       
   576 EXPORT_C TInt CFSMailBox::MoveMessagesL( MFSMailRequestObserver& aOperationObserver,
       
   577                                          const RArray<TFSMailMsgId>& aMessageIds, 
       
   578                                          const TFSMailMsgId aSourceFolderId, 
       
   579                                          const TFSMailMsgId aDestinationFolderId )
       
   580 {
       
   581     NM_FUNCTION;
       
   582     
       
   583     TFSPendingRequest request;
       
   584     request.iRequestId = 0;
       
   585     if( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
       
   586         {
       
   587         // init asynchronous request
       
   588         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
       
   589                                                         aOperationObserver );
       
   590         plugin->MoveMessagesL(
       
   591             GetId(), 
       
   592             aMessageIds, 
       
   593             aSourceFolderId, 
       
   594             aDestinationFolderId, 
       
   595             aOperationObserver, 
       
   596             request.iRequestId );
       
   597         }
       
   598     return request.iRequestId;
       
   599 }
       
   600 
       
   601 // -----------------------------------------------------------------------------
       
   602 // CFSMailBox::CopyMessagesL
       
   603 // -----------------------------------------------------------------------------
       
   604 EXPORT_C void CFSMailBox::CopyMessagesL( const RArray<TFSMailMsgId>& aMessageIds, 
       
   605                                          RArray<TFSMailMsgId>& aNewMessages, 
       
   606                                          const TFSMailMsgId aSourceFolderId, 
       
   607                                          const TFSMailMsgId aDestinationFolderId )
       
   608 {
       
   609     NM_FUNCTION;
       
   610     
       
   611     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   612         {
       
   613         plugin->CopyMessagesL(GetId(), aMessageIds, aNewMessages,
       
   614                                 aSourceFolderId, aDestinationFolderId );    
       
   615         }
       
   616 }
       
   617     
       
   618 // -----------------------------------------------------------------------------
       
   619 // CFSMailBox::SearchL
       
   620 // -----------------------------------------------------------------------------
       
   621 EXPORT_C void CFSMailBox::SearchL( const RPointerArray<TDesC>& aSearchStrings,
       
   622                                    const TFSMailSortCriteria& aSortCriteria,
       
   623                                    MFSMailBoxSearchObserver& aSearchObserver )
       
   624     {
       
   625     NM_FUNCTION;
       
   626     
       
   627     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   628         {
       
   629 
       
   630         // get mailbox folder list
       
   631         iFolders.ResetAndDestroy();
       
   632         plugin->ListFoldersL(GetId(),iFolders);
       
   633 
       
   634         TFSMailMsgId draftsFolderId = GetStandardFolderId( EFSDraftsFolder );
       
   635         TFSMailMsgId outboxId = GetStandardFolderId( EFSOutbox );
       
   636         
       
   637         // remove outbox, drafts folder from folder list
       
   638         RArray<TFSMailMsgId> folderIds;
       
   639         CleanupClosePushL( folderIds );  
       
   640         for(TInt i=0;i<iFolders.Count();i++)
       
   641         {
       
   642             TFSMailMsgId id = iFolders[i]->GetFolderId();
       
   643             if( id != draftsFolderId && id != outboxId )
       
   644             {
       
   645                 folderIds.AppendL(id);
       
   646             }
       
   647         }
       
   648         
       
   649         // start search
       
   650         plugin->SearchL( GetId(), folderIds, aSearchStrings, aSortCriteria, aSearchObserver );
       
   651         CleanupStack::PopAndDestroy( &folderIds );
       
   652         }
       
   653     }
       
   654 
       
   655 // -----------------------------------------------------------------------------
       
   656 // CFSMailBox::CancelSearch
       
   657 // -----------------------------------------------------------------------------
       
   658 EXPORT_C void CFSMailBox::CancelSearch()
       
   659     {
       
   660     NM_FUNCTION;
       
   661     
       
   662     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   663         {
       
   664         plugin->CancelSearch( GetId() );
       
   665         }
       
   666     }
       
   667 
       
   668 // -----------------------------------------------------------------------------
       
   669 // CFSMailBox::ClearSearchResultCache
       
   670 // -----------------------------------------------------------------------------
       
   671 EXPORT_C void CFSMailBox::ClearSearchResultCache()
       
   672     {
       
   673     NM_FUNCTION;
       
   674     
       
   675     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
       
   676         {
       
   677         plugin->ClearSearchResultCache( GetId() );
       
   678         }
       
   679     }
       
   680 
       
   681 // -----------------------------------------------------------------------------
       
   682 // CFSMailBox::CurrentSyncState
       
   683 // -----------------------------------------------------------------------------
       
   684 EXPORT_C TSSMailSyncState CFSMailBox::CurrentSyncState() const
       
   685     {
       
   686     NM_FUNCTION;
       
   687     
       
   688     TSSMailSyncState syncState(Idle);
       
   689     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
       
   690         {
       
   691         syncState = plugin->CurrentSyncState( GetId() );
       
   692         }
       
   693     return syncState;
       
   694     }
       
   695 
       
   696 
       
   697 // -----------------------------------------------------------------------------
       
   698 // CFSMailBox::GetMailBoxStatus
       
   699 // -----------------------------------------------------------------------------
       
   700 EXPORT_C TFSMailBoxStatus CFSMailBox::GetMailBoxStatus()
       
   701 {
       
   702     NM_FUNCTION;
       
   703     
       
   704     TFSMailBoxStatus status(EFSMailBoxOffline);
       
   705     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId() ) )
       
   706     {
       
   707         status = plugin->GetMailBoxStatus( GetId() );
       
   708     }
       
   709     return status;
       
   710 }
       
   711 
       
   712 
       
   713 
       
   714 // -----------------------------------------------------------------------------
       
   715 // CFSMailBox::ReleaseExtension
       
   716 // -----------------------------------------------------------------------------
       
   717 EXPORT_C void CFSMailBox::ReleaseExtension( CEmailExtension* aExtension )
       
   718     {
       
   719     NM_FUNCTION;
       
   720 	// <qmail> Not using KMailboxExtMrCalInfo
       
   721     
       
   722     // no specialized behaviour, call base class
       
   723     CExtendableEmail::ReleaseExtension( aExtension );
       
   724 	// </qmail>
       
   725     }
       
   726     
       
   727 // -----------------------------------------------------------------------------
       
   728 // CFSMailBox::ExtensionL
       
   729 // -----------------------------------------------------------------------------
       
   730 EXPORT_C CEmailExtension* CFSMailBox::ExtensionL( const TUid& aInterfaceUid )
       
   731     {
       
   732     NM_FUNCTION;
       
   733     
       
   734     CEmailExtension* extension = NULL;
       
   735 // <qmail>
       
   736     extension = CExtendableEmail::ExtensionL( aInterfaceUid );    
       
   737     if ( aInterfaceUid == KMailboxExtMrCalInfo )
       
   738         {
       
   739 // </qmail>        
       
   740         if ( !extension )
       
   741             {
       
   742             extension = new ( ELeave ) CMRCalendarInfoImpl();
       
   743             CleanupStack::PushL( extension );
       
   744             iExtensions.AddL( extension );
       
   745             CleanupStack::Pop(); // calInfo
       
   746             }
       
   747         }    
       
   748     else if ( aInterfaceUid == KEmailMailboxStateExtensionUid )
       
   749 		// <qmail> Not using KEmailSettingExtensionUid or KEmailConnectionStatusQueryExtensionUid </qmail>
       
   750         {
       
   751         if ( !extension )
       
   752             {
       
   753             // check that plugin supports requested extension.
       
   754             if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
       
   755                 {
       
   756                 // request extension from plugin, leaves if not supported
       
   757                 extension = plugin->ExtensionL( aInterfaceUid );
       
   758                 }
       
   759     
       
   760             }
       
   761         }
       
   762     else
       
   763         {
       
   764         User::Leave( KErrNotSupported );
       
   765         }
       
   766     return extension;
       
   767     }
       
   768