diff -r 578830873419 -r ecc8def7944a emailservices/emailcommon/src/CFSMailBox.cpp --- 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 @@ * */ +// #include +// #include "emailtrace.h" +#include #include "CFSMailPlugin.h" +#include "cmrcalendarinfoimpl.h" #include "CFSMailBox.h" #include "CFSMailRequestObserver.h" +#include "cmailboxstateext.h" // #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; +// CFSMailBoxBase::ConstructL(aMailBoxId); +// } // ----------------------------------------------------------------------------- // 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 @@ // plugin->SendMessageL( aMessage ); } -} + } // // ----------------------------------------------------------------------------- @@ -483,41 +499,42 @@ // CFSMailBox::ListFolders // ----------------------------------------------------------------------------- EXPORT_C void CFSMailBox::ListFolders( TFSMailMsgId aFolder, - RPointerArray& aFolderList ) + RPointerArray& 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& CFSMailBox::ListFolders() -{ +EXPORT_C RPointerArray& 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& 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& 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& aMessageIds, - RArray& aNewMessages, - const TFSMailMsgId aSourceFolderId, - const TFSMailMsgId aDestinationFolderId ) + RArray& 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& /*aSearchStrings*/, - const TFSMailSortCriteria& /*aSortCriteria*/, - MFSMailBoxSearchObserver& /*aSearchObserver*/, - const RArray /*aFolderIds */ ) -{ + const TFSMailSortCriteria& /*aSortCriteria*/, + MFSMailBoxSearchObserver& /*aSearchObserver*/, + const RArray /*aFolderIds */ ) + { FUNC_LOG; -} - + + } + // ----------------------------------------------------------------------------- // CFSMailBox::SearchL // ----------------------------------------------------------------------------- EXPORT_C void CFSMailBox::SearchL( const RPointerArray& 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 folderIds; folderIds.Reset(); for(TInt i=0;iGetFolderId(); 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& aRecipients, const RPointerArray& aCCRecipients, const RPointerArray& 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& 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 ); - // -} + return extension; + }