diff -r dcf0eedfc1a3 -r d189ee25cf9d emailservices/emailcommon/src/CFSMailBox.cpp --- /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" + +// +#include +// + +#include +#include "CFSMailPlugin.h" +#include "cmrcalendarinfoimpl.h" +#include "CFSMailBox.h" +#include "CFSMailRequestObserver.h" +#include "cmailboxstateext.h" +// +#include "CFSMailFolder.h" +#include "CFSMailAddress.h" +// + + +// ================= 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(Dll::Tls()); +} + +// ----------------------------------------------------------------------------- +// CFSMailBox::~CFSMailBox +// ----------------------------------------------------------------------------- +EXPORT_C CFSMailBox::~CFSMailBox() +{ + NM_FUNCTION; + // Not using KMailboxExtMrCalInfo + iFolders.ResetAndDestroy(); +} + +// ----------------------------------------------------------------------------- +// CFSMailBox::ConstructL +// ----------------------------------------------------------------------------- +void CFSMailBox::ConstructL(TFSMailMsgId aMailBoxId) +{ + NM_FUNCTION; + +// + CFSMailBoxBase::ConstructL(aMailBoxId); +// +} + +// ----------------------------------------------------------------------------- +// 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; +} + +// +// ----------------------------------------------------------------------------- +// 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; + } +// + +// +EXPORT_C int CFSMailBox::UpdateMessageFlagsL( + const TFSMailMsgId aMailboxId, + RPointerArray &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; + +} +// + +// ----------------------------------------------------------------------------- +// 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; +} + +// +// ----------------------------------------------------------------------------- +// 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; + } +// + +// ----------------------------------------------------------------------------- +// 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; +} + +// +// ----------------------------------------------------------------------------- +// 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; +} +// + +// ----------------------------------------------------------------------------- +// 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())) + { + // Removed UpdateMrusL. + plugin->SendMessageL( aMessage ); + } + } + +// +// ----------------------------------------------------------------------------- +// CFSMailBox::SendMessageL +// ----------------------------------------------------------------------------- +EXPORT_C TInt CFSMailBox::SendMessageL( + CFSMailMessage& aMessage, + MFSMailRequestObserver& aOperationObserver ) + { + NM_FUNCTION; + + TFSPendingRequest request; + + CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid( GetId() ); + + if ( plugin ) + { + // Removed UpdateMrusL. + + // 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; + } +// + +// ----------------------------------------------------------------------------- +// CFSMailBox::ListFolders +// ----------------------------------------------------------------------------- +EXPORT_C void CFSMailBox::ListFolders( TFSMailMsgId aFolder, + RPointerArray& 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& 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& 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& 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& aMessageIds, + RArray& 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& 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 folderIds; + CleanupClosePushL( folderIds ); + for(TInt i=0;iGetFolderId(); + 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; + // Not using KMailboxExtMrCalInfo + + // no specialized behaviour, call base class + CExtendableEmail::ReleaseExtension( aExtension ); + // + } + +// ----------------------------------------------------------------------------- +// CFSMailBox::ExtensionL +// ----------------------------------------------------------------------------- +EXPORT_C CEmailExtension* CFSMailBox::ExtensionL( const TUid& aInterfaceUid ) + { + NM_FUNCTION; + + CEmailExtension* extension = NULL; +// + extension = CExtendableEmail::ExtensionL( aInterfaceUid ); + if ( aInterfaceUid == KMailboxExtMrCalInfo ) + { +// + if ( !extension ) + { + extension = new ( ELeave ) CMRCalendarInfoImpl(); + CleanupStack::PushL( extension ); + iExtensions.AddL( extension ); + CleanupStack::Pop(); // calInfo + } + } + else if ( aInterfaceUid == KEmailMailboxStateExtensionUid ) + // Not using KEmailSettingExtensionUid or KEmailConnectionStatusQueryExtensionUid + { + 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; + } +