emailservices/emailcommon/src/CFSMailBox.cpp
branchRCL_3
changeset 63 d189ee25cf9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailcommon/src/CFSMailBox.cpp	Tue Aug 31 15:04:17 2010 +0300
@@ -0,0 +1,768 @@
+/*
+* 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  common mailbox object
+*
+*/
+
+#include "emailtrace.h"
+
+// <qmail>
+#include <nmcommonheaders.h>
+// <//qmail>
+
+#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"
+// </qmail>
+
+
+// ================= MEMBER FUNCTIONS ==========================================
+// -----------------------------------------------------------------------------
+// CFSMailBox::NewLC
+// -----------------------------------------------------------------------------
+EXPORT_C CFSMailBox* CFSMailBox::NewLC(TFSMailMsgId aMailBoxId)
+{
+    NM_FUNCTION;
+    
+    CFSMailBox* api = new (ELeave) CFSMailBox();
+    CleanupStack:: PushL(api);
+    api->ConstructL(aMailBoxId);
+    return api;
+} 
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::NewL
+// -----------------------------------------------------------------------------
+EXPORT_C CFSMailBox* CFSMailBox::NewL(TFSMailMsgId aMailBoxId)
+{
+    NM_FUNCTION;
+    
+    CFSMailBox* api =  CFSMailBox::NewLC(aMailBoxId);
+    CleanupStack:: Pop(api);
+    return api;
+}
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::CFSMailBox
+// -----------------------------------------------------------------------------
+CFSMailBox::CFSMailBox()
+{
+    NM_FUNCTION;
+    
+    // get requesthandler pointer
+    iRequestHandler = static_cast<CFSMailRequestHandler*>(Dll::Tls());
+}
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::~CFSMailBox
+// -----------------------------------------------------------------------------
+EXPORT_C CFSMailBox::~CFSMailBox()
+{
+    NM_FUNCTION;
+    // <qmail> Not using KMailboxExtMrCalInfo </qmail>
+    iFolders.ResetAndDestroy();
+}
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::ConstructL
+// -----------------------------------------------------------------------------
+void CFSMailBox::ConstructL(TFSMailMsgId aMailBoxId)
+{
+    NM_FUNCTION;
+    
+// <qmail>
+    CFSMailBoxBase::ConstructL(aMailBoxId);
+// </qmail>
+}
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::GoOnlineL
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::GoOnlineL()
+    {
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        plugin->GoOnlineL( GetId() );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::GoOfflineL
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::GoOfflineL()
+    {
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        plugin->GoOfflineL( GetId() );
+        }
+        
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::CancelSyncL
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::CancelSyncL()
+    {
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        plugin->CancelSyncL( GetId() );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::GetLastSyncStatusL
+// -----------------------------------------------------------------------------
+EXPORT_C TFSProgress CFSMailBox::GetLastSyncStatusL()
+    {
+    NM_FUNCTION;
+    
+    TFSProgress progress;
+    progress.iError = EFalse;
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        progress = plugin->GetLastSyncStatusL( GetId() );       
+        }
+    return progress;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::RefreshNowL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::RefreshNowL(
+    MFSMailRequestObserver& aOperationObserver )
+    {
+    NM_FUNCTION;
+    
+    TFSPendingRequest request;
+    request.iRequestId = 0;
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        // init asynchronous request
+        request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
+                                                        aOperationObserver );
+        MFSMailRequestObserver* 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::RefreshNowL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::RefreshNowL( )
+    {
+    NM_FUNCTION;
+    
+    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( )
+{
+    NM_FUNCTION;
+    
+    CFSMailMessage* message(NULL);
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        TRAPD(err,message = plugin->CreateMessageToSendL( GetId() ));
+        if(err != KErrNone)
+            {
+            message = NULL;
+            }
+        }
+    return message;
+}
+
+// <qmail>
+// -----------------------------------------------------------------------------
+// CFSMailBox::CreateMessageToSendL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::CreateMessageToSendL(
+        MFSMailRequestObserver& aOperationObserver )
+    {
+    NM_FUNCTION;
+    
+    TFSPendingRequest request;
+    
+    CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
+    
+    if ( plugin )
+        {
+        // init asynchronous request
+        request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
+                                                      aOperationObserver );
+
+        MFSMailRequestObserver* observer = request.iObserver;
+
+        TRAPD( err, plugin->CreateMessageToSendL( 
+            GetId(), *observer, request.iRequestId ) );
+
+        if( err != KErrNone )
+            {
+            iRequestHandler->CompleteRequest( request.iRequestId );
+            User::Leave( err );
+            }
+        }    
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+    
+    return request.iRequestId;
+    }
+// </qmail>
+
+//<qmail>
+EXPORT_C int CFSMailBox::UpdateMessageFlagsL( 
+    const TFSMailMsgId aMailboxId,
+    RPointerArray<CFSMailMessage> &messages,
+    MFSMailRequestObserver& aOperationObserver)
+{
+    NM_FUNCTION;
+    
+    Q_UNUSED(aMailboxId);
+    TFSPendingRequest request;
+        
+    CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
+    
+    if ( plugin )
+        {
+        // init asynchronous request
+        request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
+                                                      aOperationObserver );
+
+        MFSMailRequestObserver* observer = request.iObserver;
+
+        TRAPD( err, plugin->StoreMessagesL( 
+                GetId(), 
+                messages,
+                *observer, request.iRequestId ) );
+
+        if( err != KErrNone )
+            {
+            iRequestHandler->CompleteRequest( request.iRequestId );
+            User::Leave( err );
+            }
+        }
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+    
+    return request.iRequestId;
+    
+}
+//</qmail>
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::CreateForwardMessage
+// -----------------------------------------------------------------------------
+EXPORT_C CFSMailMessage* CFSMailBox::CreateForwardMessage(  TFSMailMsgId aOriginalMessageId,
+                                                            const TDesC& aHeaderDescriptor )
+{
+    NM_FUNCTION;
+    
+    CFSMailMessage* message(NULL);
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        TRAPD(err,message = plugin->CreateForwardMessageL( GetId(), 
+                                                                aOriginalMessageId,
+                                                                aHeaderDescriptor ));
+        if(err != KErrNone)
+            {
+            message = NULL;
+            }
+        }
+    return message;
+}
+
+// <qmail>
+// -----------------------------------------------------------------------------
+// CFSMailBox::CreateForwardMessageL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::CreateForwardMessageL( const TFSMailMsgId aOriginalMessageId,
+                        MFSMailRequestObserver& aOperationObserver,
+                        const TDesC& aHeaderDescriptor )
+    {
+    NM_FUNCTION;
+    
+    TFSPendingRequest request;
+    
+    CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
+    
+    if ( plugin )
+        {
+        // init asynchronous request
+        request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
+                                                      aOperationObserver );
+
+        MFSMailRequestObserver* observer = request.iObserver;
+
+        TRAPD( err, plugin->CreateForwardMessageL( 
+            GetId(), aOriginalMessageId, *observer, request.iRequestId, aHeaderDescriptor ) );
+
+        if( err != KErrNone )
+            {
+            iRequestHandler->CompleteRequest( request.iRequestId );
+            User::Leave( err );
+            }
+        }    
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+    
+    return request.iRequestId;
+    }
+// </qmail>
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::CreateReplyMessage
+// -----------------------------------------------------------------------------
+EXPORT_C CFSMailMessage* CFSMailBox::CreateReplyMessage( TFSMailMsgId aOriginalMessageId,
+                                                         TBool aReplyToAll,
+                                                         const TDesC& aHeaderDescriptor )
+{
+    NM_FUNCTION;
+    
+    CFSMailMessage* message = NULL;
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        TRAPD(err,message = plugin->CreateReplyMessageL( GetId(),
+                                                            aOriginalMessageId,
+                                                            aReplyToAll,
+                                                            aHeaderDescriptor ));
+        if(err != KErrNone)
+            {
+            message = NULL;
+            }
+        }
+    return message;
+}
+
+// <qmail>
+// -----------------------------------------------------------------------------
+// CFSMailBox::CreateReplyMessageL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::CreateReplyMessageL( const TFSMailMsgId aOriginalMessageId,
+                                      const TBool aReplyToAll,
+                                      MFSMailRequestObserver& aOperationObserver,
+                                      const TDesC& aHeaderDescriptor )
+{
+    NM_FUNCTION;
+    
+    TFSPendingRequest request;
+    
+    CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
+    
+    if ( plugin )
+        {
+        // init asynchronous request
+        request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
+                                                      aOperationObserver );
+
+        MFSMailRequestObserver* observer = request.iObserver;
+
+        TRAPD( err, plugin->CreateReplyMessageL( 
+            GetId(), aOriginalMessageId, aReplyToAll, *observer, request.iRequestId, aHeaderDescriptor ) );
+
+        if( err != KErrNone )
+            {
+            iRequestHandler->CompleteRequest( request.iRequestId );
+            User::Leave( err );
+            }
+        }    
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+    
+    return request.iRequestId;
+}
+// </qmail>
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::GetStandardFolderId
+// -----------------------------------------------------------------------------
+EXPORT_C TFSMailMsgId CFSMailBox::GetStandardFolderId(TFSFolderType aFolderType)
+{
+    NM_FUNCTION;
+    
+    TFSMailMsgId folderId;
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        TRAPD(err, folderId = plugin->GetStandardFolderIdL(GetId(), aFolderType ));
+        if(err != KErrNone)
+            {
+            folderId.SetNullId();
+            }
+        }
+    return folderId;
+}
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::SendMessageL
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::SendMessageL( CFSMailMessage& aMessage )
+    {
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        // <qmail> Removed UpdateMrusL. </qmail>
+        plugin->SendMessageL( aMessage );
+        }
+	}
+
+// <qmail>
+// -----------------------------------------------------------------------------
+// CFSMailBox::SendMessageL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::SendMessageL(
+        CFSMailMessage& aMessage,
+        MFSMailRequestObserver& aOperationObserver )
+    {
+    NM_FUNCTION;
+
+    TFSPendingRequest request;
+
+    CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() );
+
+    if ( plugin )
+        {
+        // <qmail> Removed UpdateMrusL. </qmail>
+
+        // init asynchronous request
+        request = iRequestHandler->InitAsyncRequestL( GetId().PluginId(),
+                                                      aOperationObserver );
+
+        MFSMailRequestObserver* observer = request.iObserver;
+
+        TRAPD( err, plugin->SendMessageL(
+            aMessage, *observer, request.iRequestId ) );
+
+        if( err != KErrNone )
+            {
+            iRequestHandler->CompleteRequest( request.iRequestId );
+            User::Leave( err );
+            }
+        }
+    else
+        {
+        User::Leave( KErrNotFound );
+        }
+
+    return request.iRequestId;
+    }
+// </qmail>
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::ListFolders
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::ListFolders(  TFSMailMsgId aFolder,
+                                        RPointerArray<CFSMailFolder>& aFolderList)
+{
+    NM_FUNCTION;
+    
+    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( )
+{   
+    NM_FUNCTION;
+    
+    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( )
+{
+    NM_FUNCTION;
+	if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
+        {
+        TDesC& result = plugin->GetBrandingIdL( GetId() );
+        return result;
+        }
+    
+    return BrandingId();
+}
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::MoveMessagesL
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::MoveMessagesL( const RArray<TFSMailMsgId>& aMessageIds, 
+                                         const TFSMailMsgId aSourceFolderId, 
+                                         const TFSMailMsgId aDestinationFolderId )
+{
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        plugin->MoveMessagesL(GetId(), aMessageIds, aSourceFolderId, aDestinationFolderId);
+        }
+}
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::MoveMessagesL
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CFSMailBox::MoveMessagesL( MFSMailRequestObserver& aOperationObserver,
+                                         const RArray<TFSMailMsgId>& aMessageIds, 
+                                         const TFSMailMsgId aSourceFolderId, 
+                                         const TFSMailMsgId aDestinationFolderId )
+{
+    NM_FUNCTION;
+    
+    TFSPendingRequest request;
+    request.iRequestId = 0;
+    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 )
+{
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        plugin->CopyMessagesL(GetId(), aMessageIds, aNewMessages,
+                                aSourceFolderId, aDestinationFolderId );    
+        }
+}
+    
+// -----------------------------------------------------------------------------
+// CFSMailBox::SearchL
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::SearchL( const RPointerArray<TDesC>& aSearchStrings,
+                                   const TFSMailSortCriteria& aSortCriteria,
+                                   MFSMailBoxSearchObserver& aSearchObserver )
+    {
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+
+        // get mailbox folder list
+        iFolders.ResetAndDestroy();
+        plugin->ListFoldersL(GetId(),iFolders);
+
+        TFSMailMsgId draftsFolderId = GetStandardFolderId( EFSDraftsFolder );
+        TFSMailMsgId outboxId = GetStandardFolderId( EFSOutbox );
+        
+        // remove outbox, drafts folder from folder list
+        RArray<TFSMailMsgId> folderIds;
+        CleanupClosePushL( folderIds );  
+        for(TInt i=0;i<iFolders.Count();i++)
+        {
+            TFSMailMsgId id = iFolders[i]->GetFolderId();
+            if( id != draftsFolderId && id != outboxId )
+            {
+                folderIds.AppendL(id);
+            }
+        }
+        
+        // start search
+        plugin->SearchL( GetId(), folderIds, aSearchStrings, aSortCriteria, aSearchObserver );
+        CleanupStack::PopAndDestroy( &folderIds );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::CancelSearch
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::CancelSearch()
+    {
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        plugin->CancelSearch( GetId() );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::ClearSearchResultCache
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::ClearSearchResultCache()
+    {
+    NM_FUNCTION;
+    
+    if(CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId()))
+        {
+        plugin->ClearSearchResultCache( GetId() );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::CurrentSyncState
+// -----------------------------------------------------------------------------
+EXPORT_C TSSMailSyncState CFSMailBox::CurrentSyncState() const
+    {
+    NM_FUNCTION;
+    
+    TSSMailSyncState syncState(Idle);
+    if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ) )
+        {
+        syncState = plugin->CurrentSyncState( GetId() );
+        }
+    return syncState;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::GetMailBoxStatus
+// -----------------------------------------------------------------------------
+EXPORT_C TFSMailBoxStatus CFSMailBox::GetMailBoxStatus()
+{
+    NM_FUNCTION;
+    
+    TFSMailBoxStatus status(EFSMailBoxOffline);
+    if ( CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetId() ) )
+    {
+        status = plugin->GetMailBoxStatus( GetId() );
+    }
+    return status;
+}
+
+
+
+// -----------------------------------------------------------------------------
+// CFSMailBox::ReleaseExtension
+// -----------------------------------------------------------------------------
+EXPORT_C void CFSMailBox::ReleaseExtension( CEmailExtension* aExtension )
+    {
+    NM_FUNCTION;
+	// <qmail> Not using KMailboxExtMrCalInfo
+    
+    // no specialized behaviour, call base class
+    CExtendableEmail::ReleaseExtension( aExtension );
+	// </qmail>
+    }
+    
+// -----------------------------------------------------------------------------
+// CFSMailBox::ExtensionL
+// -----------------------------------------------------------------------------
+EXPORT_C CEmailExtension* CFSMailBox::ExtensionL( const TUid& aInterfaceUid )
+    {
+    NM_FUNCTION;
+    
+    CEmailExtension* extension = NULL;
+// <qmail>
+    extension = CExtendableEmail::ExtensionL( aInterfaceUid );    
+    if ( aInterfaceUid == KMailboxExtMrCalInfo )
+        {
+// </qmail>        
+        if ( !extension )
+            {
+            extension = new ( ELeave ) CMRCalendarInfoImpl();
+            CleanupStack::PushL( extension );
+            iExtensions.AddL( extension );
+            CleanupStack::Pop(); // calInfo
+            }
+        }    
+    else if ( aInterfaceUid == KEmailMailboxStateExtensionUid )
+		// <qmail> Not using KEmailSettingExtensionUid or KEmailConnectionStatusQueryExtensionUid </qmail>
+        {
+        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
+        {
+        User::Leave( KErrNotSupported );
+        }
+    return extension;
+    }
+