emailservices/emailcommon/src/CFSMailBox.cpp
changeset 20 ecc8def7944a
parent 18 578830873419
child 30 759dc5235cdb
--- a/emailservices/emailcommon/src/CFSMailBox.cpp	Fri Apr 16 14:51:52 2010 +0300
+++ b/emailservices/emailcommon/src/CFSMailBox.cpp	Mon May 03 12:23:15 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -15,12 +15,17 @@
 *
 */
 
+// <qmail>
 #include <nmcommonheaders.h>
+// <//qmail>
 
 #include "emailtrace.h"
+#include <bamdesca.h>
 #include "CFSMailPlugin.h"
+#include "cmrcalendarinfoimpl.h"
 #include "CFSMailBox.h"
 #include "CFSMailRequestObserver.h"
+#include "cmailboxstateext.h"
 // <qmail>
 #include "CFSMailFolder.h"
 #include "CFSMailAddress.h"
@@ -32,24 +37,24 @@
 // -----------------------------------------------------------------------------
 // CFSMailBox::NewLC
 // -----------------------------------------------------------------------------
-EXPORT_C CFSMailBox* CFSMailBox::NewLC( TFSMailMsgId aMailBoxId )
+EXPORT_C CFSMailBox* CFSMailBox::NewLC(TFSMailMsgId aMailBoxId)
 {
     FUNC_LOG;
-    CFSMailBox* api = new (ELeave) CFSMailBox();
-    CleanupStack:: PushL(api);
-    api->ConstructL(aMailBoxId);
-    return api;
+  CFSMailBox* api = new (ELeave) CFSMailBox();
+  CleanupStack:: PushL(api);
+  api->ConstructL(aMailBoxId);
+  return api;
 } 
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::NewL
 // -----------------------------------------------------------------------------
-EXPORT_C CFSMailBox* CFSMailBox::NewL( TFSMailMsgId aMailBoxId )
+EXPORT_C CFSMailBox* CFSMailBox::NewL(TFSMailMsgId aMailBoxId)
 {
     FUNC_LOG;
-    CFSMailBox* api =  CFSMailBox::NewLC(aMailBoxId);
-    CleanupStack:: Pop(api);
-    return api;
+  CFSMailBox* api =  CFSMailBox::NewLC(aMailBoxId);
+  CleanupStack:: Pop(api);
+  return api;
 }
 
 // -----------------------------------------------------------------------------
@@ -74,76 +79,84 @@
 // -----------------------------------------------------------------------------
 // CFSMailBox::ConstructL
 // -----------------------------------------------------------------------------
-void CFSMailBox::ConstructL( TFSMailMsgId aMailBoxId )
+void CFSMailBox::ConstructL(TFSMailMsgId aMailBoxId)
 {
     FUNC_LOG;
+// <qmail>
     CFSMailBoxBase::ConstructL(aMailBoxId);
+// </qmail>
 }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::GoOnlineL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::GoOnlineL()
-{
-    FUNC_LOG;  
+    {
+    FUNC_LOG;
+    
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         plugin->GoOnlineL( GetId() );
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::GoOfflineL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::GoOfflineL()
-{
-    FUNC_LOG;    
+    {
+    FUNC_LOG;
+    
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         plugin->GoOfflineL( GetId() );
         }
-}
+        
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::CancelSyncL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::CancelSyncL()
-{
-    FUNC_LOG;  
+    {
+    FUNC_LOG;
+    
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         plugin->CancelSyncL( GetId() );
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::GetLastSyncStatusL
 // -----------------------------------------------------------------------------
 EXPORT_C TFSProgress CFSMailBox::GetLastSyncStatusL()
-{
+    {
     FUNC_LOG;
     TFSProgress progress;
+    progress.iError = EFalse;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
-        progress = plugin->GetLastSyncStatusL( GetId() );   
+        progress = plugin->GetLastSyncStatusL( GetId() );       
         }
     return progress;
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::RefreshNowL
 // -----------------------------------------------------------------------------
 EXPORT_C TInt CFSMailBox::RefreshNowL(
     MFSMailRequestObserver& aOperationObserver )
-{
+    {
     FUNC_LOG;
 
     TFSPendingRequest request;
+    request.iRequestId = 0;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         // init asynchronous request
         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
-                              aOperationObserver );
+                                                        aOperationObserver );
         MFSMailRequestObserver* observer = request.iObserver;
         TRAPD(err,plugin->RefreshNowL( GetId(), *observer, request.iRequestId));
         if(err != KErrNone)
@@ -153,37 +166,40 @@
             }
         }
     return request.iRequestId;
-}
+
+   }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::RefreshNowL
 // -----------------------------------------------------------------------------
-EXPORT_C TInt CFSMailBox::RefreshNowL()
-{
+EXPORT_C TInt CFSMailBox::RefreshNowL( )
+    {
     FUNC_LOG;
 
     TFSPendingRequest request;
+    request.iRequestId = 0;
     MFSMailRequestObserver* observer = NULL;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         // init asynchronous request
         request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(), *observer );
-      
+        
         observer = request.iObserver;
         TRAPD(err,plugin->RefreshNowL( GetId(), *observer, request.iRequestId));
         if(err != KErrNone)
-        {
+            {
             iRequestHandler->CompleteRequest(request.iRequestId);
             User::Leave(err);
+            }
         }
-    }
     return request.iRequestId;
-}
+
+   }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::CreateMessageToSend
 // -----------------------------------------------------------------------------
-EXPORT_C CFSMailMessage* CFSMailBox::CreateMessageToSend()
+EXPORT_C CFSMailMessage* CFSMailBox::CreateMessageToSend( )
 {
     FUNC_LOG;
 
@@ -279,16 +295,16 @@
 // -----------------------------------------------------------------------------
 // CFSMailBox::CreateForwardMessage
 // -----------------------------------------------------------------------------
-EXPORT_C CFSMailMessage* CFSMailBox::CreateForwardMessage( TFSMailMsgId aOriginalMessageId,
-                              const TDesC& aHeaderDescriptor )
+EXPORT_C CFSMailMessage* CFSMailBox::CreateForwardMessage(  TFSMailMsgId aOriginalMessageId,
+                                                            const TDesC& aHeaderDescriptor )
 {
     FUNC_LOG;
     CFSMailMessage* message = NULL;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         TRAPD(err,message = plugin->CreateForwardMessageL( GetId(), 
-                                aOriginalMessageId,
-                                aHeaderDescriptor ));
+                                                                aOriginalMessageId,
+                                                                aHeaderDescriptor ));
         if(err != KErrNone)
             {
             message = NULL;
@@ -339,22 +355,22 @@
 // CFSMailBox::CreateReplyMessage
 // -----------------------------------------------------------------------------
 EXPORT_C CFSMailMessage* CFSMailBox::CreateReplyMessage( TFSMailMsgId aOriginalMessageId,
-                             TBool aReplyToAll,
-                             const TDesC& aHeaderDescriptor )
+                                                         TBool aReplyToAll,
+                                                         const TDesC& aHeaderDescriptor )
 {
     FUNC_LOG;
     CFSMailMessage* message = NULL;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         TRAPD(err,message = plugin->CreateReplyMessageL( GetId(),
-                              aOriginalMessageId,
-                              aReplyToAll,
-                              aHeaderDescriptor ));
+                                                            aOriginalMessageId,
+                                                            aReplyToAll,
+                                                            aHeaderDescriptor ));
         if(err != KErrNone)
             {
             message = NULL;
             }
-    }
+        }
     return message;
 }
 
@@ -400,7 +416,7 @@
 // -----------------------------------------------------------------------------
 // CFSMailBox::GetStandardFolderId
 // -----------------------------------------------------------------------------
-EXPORT_C TFSMailMsgId CFSMailBox::GetStandardFolderId( TFSFolderType aFolderType )
+EXPORT_C TFSMailMsgId CFSMailBox::GetStandardFolderId(TFSFolderType aFolderType)
 {
     FUNC_LOG;
 
@@ -420,7 +436,7 @@
 // CFSMailBox::SendMessageL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::SendMessageL( CFSMailMessage& aMessage )
-{
+    {
     FUNC_LOG;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
@@ -431,7 +447,7 @@
         // </qmail>
         plugin->SendMessageL( aMessage );
         }
-}
+	}
 
 // <qmail>
 // -----------------------------------------------------------------------------
@@ -483,41 +499,42 @@
 // CFSMailBox::ListFolders
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::ListFolders(  TFSMailMsgId aFolder,
-                    RPointerArray<CFSMailFolder>& aFolderList )
+                                        RPointerArray<CFSMailFolder>& aFolderList)
 {
     FUNC_LOG;
 
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
-        {
+    {
         TRAPD(err, plugin->ListFoldersL(GetId(),aFolder,aFolderList));
         if(err != KErrNone)
             {
             aFolderList.ResetAndDestroy();
             }
-        }
+    }
 }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::ListFolders
 // -----------------------------------------------------------------------------
-EXPORT_C RPointerArray<CFSMailFolder>& CFSMailBox::ListFolders()
-{ 
+EXPORT_C RPointerArray<CFSMailFolder>& CFSMailBox::ListFolders( )
+{   
     iFolders.ResetAndDestroy();
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
-        {
+    {
         TRAPD(err,plugin->ListFoldersL(GetId(),iFolders));
         if(err != KErrNone)
             {
             iFolders.ResetAndDestroy();
             }
-        }
+    }
+
     return iFolders;
 }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::GetBrandingIdL
 // -----------------------------------------------------------------------------
-EXPORT_C TDesC& CFSMailBox::GetBrandingIdL()
+EXPORT_C TDesC& CFSMailBox::GetBrandingIdL( )
 {
     FUNC_LOG;
     return BrandingId();
@@ -527,8 +544,8 @@
 // CFSMailBox::MoveMessagesL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::MoveMessagesL( const RArray<TFSMailMsgId>& aMessageIds, 
-                                   const TFSMailMsgId aSourceFolderId, 
-                                   const TFSMailMsgId aDestinationFolderId )
+                                         const TFSMailMsgId aSourceFolderId, 
+                                         const TFSMailMsgId aDestinationFolderId )
 {
     FUNC_LOG;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
@@ -538,18 +555,44 @@
 }
 
 // -----------------------------------------------------------------------------
+// CFSMailBox::MoveMessagesL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::MoveMessagesL( MFSMailRequestObserver& aOperationObserver,
+                                         const RArray<TFSMailMsgId>& aMessageIds, 
+                                         const TFSMailMsgId aSourceFolderId, 
+                                         const TFSMailMsgId aDestinationFolderId )
+{
+    FUNC_LOG;
+    TFSPendingRequest request;
+    if( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
+        {
+        // init asynchronous request
+        request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
+                                                        aOperationObserver );
+        plugin->MoveMessagesL(
+            GetId(), 
+            aMessageIds, 
+            aSourceFolderId, 
+            aDestinationFolderId, 
+            aOperationObserver, 
+            request.iRequestId );
+        }
+    return request.iRequestId;
+}
+
+// -----------------------------------------------------------------------------
 // CFSMailBox::CopyMessagesL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::CopyMessagesL( const RArray<TFSMailMsgId>& aMessageIds, 
-                                       RArray<TFSMailMsgId>& aNewMessages, 
-                                       const TFSMailMsgId aSourceFolderId, 
-                                       const TFSMailMsgId aDestinationFolderId )
+                                         RArray<TFSMailMsgId>& aNewMessages, 
+                                         const TFSMailMsgId aSourceFolderId, 
+                                         const TFSMailMsgId aDestinationFolderId )
 {
     FUNC_LOG;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         plugin->CopyMessagesL(GetId(), aMessageIds, aNewMessages,
-                aSourceFolderId, aDestinationFolderId );  
+                                aSourceFolderId, aDestinationFolderId );    
         }
 }
 
@@ -557,27 +600,29 @@
 // CFSMailBox::SearchL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::SearchL( const RPointerArray<TDesC>& /*aSearchStrings*/,
-                   const TFSMailSortCriteria&  /*aSortCriteria*/,
-                   MFSMailBoxSearchObserver&   /*aSearchObserver*/,
-                   const RArray<TFSMailMsgId>  /*aFolderIds */ )
-{
+                                   const TFSMailSortCriteria&  /*aSortCriteria*/,
+                                   MFSMailBoxSearchObserver&   /*aSearchObserver*/,
+                                   const RArray<TFSMailMsgId>  /*aFolderIds */ )
+    {
     FUNC_LOG;
-}
-  
+
+    }
+    
 // -----------------------------------------------------------------------------
 // CFSMailBox::SearchL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::SearchL( const RPointerArray<TDesC>& aSearchStrings,
-                   const TFSMailSortCriteria& aSortCriteria,
-                   MFSMailBoxSearchObserver& aSearchObserver )
-{
+                                   const TFSMailSortCriteria& aSortCriteria,
+                                   MFSMailBoxSearchObserver& aSearchObserver )
+    {
     FUNC_LOG;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
+
         // get mailbox folder list
         iFolders.ResetAndDestroy();
         plugin->ListFoldersL(GetId(),iFolders);
-    
+
         TFSMailMsgId draftsFolderId = GetStandardFolderId( EFSDraftsFolder );
         TFSMailMsgId outboxId = GetStandardFolderId( EFSOutbox );
         
@@ -585,49 +630,49 @@
         RArray<TFSMailMsgId> folderIds;
         folderIds.Reset();
         for(TInt i=0;i<iFolders.Count();i++)
-            {
+        {
             TFSMailMsgId id = iFolders[i]->GetFolderId();
             if( id != draftsFolderId && id != outboxId )
-                {
+            {
                 folderIds.Append(id);
-                }
             }
-    
+        }
+        
         // start search
         plugin->SearchL( GetId(), folderIds, aSearchStrings, aSortCriteria, aSearchObserver );
         folderIds.Reset();
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::CancelSearch
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::CancelSearch()
-{
+    {
     FUNC_LOG;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         plugin->CancelSearch( GetId() );
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::ClearSearchResultCache
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::ClearSearchResultCache()
-{
+    {
     FUNC_LOG;
     if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
         {
         plugin->ClearSearchResultCache( GetId() );
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::ListMrusL
 // -----------------------------------------------------------------------------
 EXPORT_C MDesCArray* CFSMailBox::ListMrusL() const
-{
+    {
     FUNC_LOG;
     MDesCArray* mruList(0);
     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId() ) )
@@ -635,14 +680,14 @@
         mruList = plugin->GetMrusL( GetId() );
         }
     return mruList;
-}
+    }
 
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::CurrentSyncState
 // -----------------------------------------------------------------------------
 EXPORT_C TSSMailSyncState CFSMailBox::CurrentSyncState() const
-{
+    {
     FUNC_LOG;
     TSSMailSyncState syncState(Idle);
     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
@@ -650,7 +695,7 @@
         syncState = plugin->CurrentSyncState( GetId() );
         }
     return syncState;
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::HasCapability
@@ -666,7 +711,7 @@
             {
             capability = EFalse;
             }
-    }
+        }
     return capability;
 }
 
@@ -678,9 +723,9 @@
     FUNC_LOG;
     TFSMailBoxStatus status(EFSMailBoxOffline);
     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId() ) )
-        {
+    {
         status = plugin->GetMailBoxStatus( GetId() );
-        }
+    }
     return status;
 }
 
@@ -688,19 +733,19 @@
 // CFSMailBox::SetCredentialsL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::SetCredentialsL( const TDesC& aUsername, const TDesC& aPassword )
-{
+    {
     FUNC_LOG;
     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId() ) )
         {
         plugin->SetCredentialsL( GetId(), aUsername, aPassword );
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::RemoveDownLoadedAttachmentsL
 // -----------------------------------------------------------------------------
 EXPORT_C void CFSMailBox::RemoveDownLoadedAttachmentsL()
-{
+    {
     FUNC_LOG;
     
     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
@@ -715,13 +760,13 @@
             delete folder;
             }
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::GetConnectionId
 // -----------------------------------------------------------------------------
 EXPORT_C TInt CFSMailBox::GetConnectionId( TUint32& aConnectionId )
-{
+    {
     FUNC_LOG;
     TInt rcode = KErrNotSupported;
     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
@@ -729,13 +774,13 @@
         rcode = plugin->GetConnectionId( GetId(), aConnectionId );
         }
     return rcode;
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::IsConnectionAllowedWhenRoaming
 // -----------------------------------------------------------------------------
 EXPORT_C TInt CFSMailBox::IsConnectionAllowedWhenRoaming( TBool& aConnectionAllowed )
-{
+    {
     FUNC_LOG;
     TInt rcode = KErrNotSupported;
     if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
@@ -743,6 +788,20 @@
         rcode = plugin->IsConnectionAllowedWhenRoaming( GetId(), aConnectionAllowed );
         }
     return rcode;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::CreateMessageFromFileL
+// -----------------------------------------------------------------------------
+EXPORT_C CFSMailMessage* CFSMailBox::CreateMessageFromFileL( const RFile& aFile )
+{
+    FUNC_LOG;
+    CFSMailMessage* message = NULL;
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+    {
+		message = plugin->CreateMessageFromFileL( GetId(), aFile );
+    }
+    return message;
 }
 
 // -----------------------------------------------------------------------------
@@ -752,7 +811,7 @@
     const RPointerArray<CFSMailAddress>& aRecipients,
     const RPointerArray<CFSMailAddress>& aCCRecipients,
     const RPointerArray<CFSMailAddress>& aBCCRecipients ) const
-{
+    {
     FUNC_LOG;
     
     // First lets make a copy of the current mru list
@@ -801,13 +860,13 @@
     plugin->SetMrusL( GetId(), newMruList );
     
     CleanupStack::PopAndDestroy( newMruList );
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::CopyArrayL
 // -----------------------------------------------------------------------------    
 CDesCArraySeg* CFSMailBox::CopyArrayL( MDesCArray& aArrayToBeCopied ) const
-{
+    {
     FUNC_LOG;
     CDesCArraySeg* newArray = new (ELeave) CDesCArraySeg( 10 );
     CleanupStack::PushL( newArray );
@@ -822,7 +881,7 @@
     
     CleanupStack::Pop( newArray );
     return newArray;
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::UpdateMruListL
@@ -830,7 +889,7 @@
 void CFSMailBox::UpdateMruListL(
     CDesCArraySeg& aMruList,
     const RPointerArray<CFSMailAddress>& aNewRecentlyUsedOnes ) const
-{
+    {
     FUNC_LOG;
     TUint newCount( aNewRecentlyUsedOnes.Count() );
     TUint newIndexer( 0 );
@@ -863,7 +922,7 @@
         
         ++newIndexer;
         }
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::FindAddressFromMruList
@@ -871,7 +930,7 @@
 TInt CFSMailBox::FindAddressFromMruList( CDesCArraySeg& aMruList,
                                          TDesC& searchedAddress,
                                          TInt& aPos ) const
-{
+    {
     FUNC_LOG;
     // CDesCArray::Find() is not used here because there is
     // possibility that we have to go through the whole array
@@ -903,12 +962,15 @@
     return 1;
     }
 
+
+
+
 // -----------------------------------------------------------------------------
 // CFSMailBox::AddAndRemoveExcessMruL
 // -----------------------------------------------------------------------------
 void CFSMailBox::AddAndRemoveExcessMruL( CDesCArraySeg& aMruList,
                                          CFSMailAddress& aToBeAdded ) const
-{
+    {
     FUNC_LOG;
     if ( aMruList.Count() == KMaxMruEntries )
         {
@@ -917,7 +979,7 @@
         }
     // Latest address is always found from the end.
     AppendMruItemL( aMruList, aToBeAdded );
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::SetAsMostRecentMruL
@@ -925,21 +987,21 @@
 void CFSMailBox::SetAsMostRecentMruL( CDesCArraySeg& aMruList,
                                       TInt aPosition,
                                       CFSMailAddress& aMostRecent ) const
-{
+    {
     FUNC_LOG;
     // Position of the address is given so the possible display name is
     // in the previous slot. Delete both.
     aMruList.Delete( aPosition - 1, 2 );
     // Latest address is always found from the end.
     AppendMruItemL( aMruList, aMostRecent );
-}
+    }
 
 // -----------------------------------------------------------------------------
 // CFSMailBox::AppendMruItemL
 // -----------------------------------------------------------------------------
 void CFSMailBox::AppendMruItemL( CDesCArraySeg& aMruList,
                                  CFSMailAddress& aToBeAppended ) const
-{
+    {
     FUNC_LOG;
     // In the array, display name is always the first and then comes
     // the actual address.
@@ -950,15 +1012,62 @@
     TDesC* emailAddress = &aToBeAppended.GetEmailAddress();
 
     if( displayName->Length() > 0 && displayName->Compare(*emailAddress) == 0 )
+    {
+        aMruList.AppendL( KNullDesC );
+    }
+    else
+    {
+        aMruList.AppendL( *displayName );                
+    }
+    
+    aMruList.AppendL( *emailAddress );    
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::ReleaseExtension
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::ReleaseExtension( CEmailExtension* aExtension )
+    {
+    FUNC_LOG;
+    // no specialized behaviour, call base class
+    CExtendableEmail::ReleaseExtension( aExtension );
+    }
+    
+// -----------------------------------------------------------------------------
+// CFSMailBox::ExtensionL
+// -----------------------------------------------------------------------------
+EXPORT_C CEmailExtension* CFSMailBox::ExtensionL( const TUid& aInterfaceUid )
+    {
+    FUNC_LOG;
+    CEmailExtension* extension = NULL;
+    if ( aInterfaceUid == KMailboxExtMrCalInfo )
         {
-        aMruList.AppendL( KNullDesC );
+        extension = CExtendableEmail::ExtensionL( aInterfaceUid );
+        if ( extension == NULL )
+            {
+            extension = new ( ELeave ) CMRCalendarInfoImpl();
+            CleanupStack::PushL( extension );
+            iExtensions.AddL( extension );
+            CleanupStack::Pop(); // calInfo
+            }
+        }    
+    else if ( aInterfaceUid == KEmailMailboxStateExtensionUid )
+        {
+        if ( !extension )
+            {
+            // check that plugin supports requested extension.
+            if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
+                {
+                // request extension from plugin, leaves if not supported
+                extension = plugin->ExtensionL( aInterfaceUid );
+                }
+    
+            }
         }
     else
         {
-        aMruList.AppendL( *displayName );                
+        User::Leave( KErrNotSupported );
         }
-    
-    aMruList.AppendL( *emailAddress );    
-    // </cmail>
-}
+    return extension;
+    }