diff -r b5fbb9b25d57 -r 67369d1b217f emailservices/emailclientapi/src/emailmailbox.cpp --- a/emailservices/emailclientapi/src/emailmailbox.cpp Tue May 11 15:57:15 2010 +0300 +++ b/emailservices/emailclientapi/src/emailmailbox.cpp Tue May 25 12:23:16 2010 +0300 @@ -41,8 +41,6 @@ // Constants -_LIT( KNewLine, "\n" ); - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -201,15 +199,21 @@ { case EInbox: fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSInbox ); + break; case EOutbox: fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSOutbox ); + break; case EDrafts: fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSDraftsFolder ); + break; case EDeleted: fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSDeleted ); + break; case ESent: fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSSentFolder ); + break; case EOther: + break; default: User::Leave( KErrNotFound ); break; @@ -286,13 +290,27 @@ // ----------------------------------------------------------------------------- MEmailMessage* CEmailMailbox::CreateForwardMessageL( const TMessageId& aMessageId ) const { + // create temp header descriptor + TReplyForwardParams params; + params.iHeader = HBufC::NewLC(1); + params.iHeader->Des().Copy(KNullDesC()); + params.iSmartTag = HBufC::NewLC(1); + params.iSmartTag->Des().Copy(KNullDesC()); + TPckgBuf buf( params ); + HBufC* temp = HBufC::NewLC( buf.Length() ); + temp->Des().Copy( buf ); + CFSMailMessage* fsMessage = iFsMailbox->CreateForwardMessage( - FsMsgId( iPluginData, aMessageId ), KNewLine() ); + FsMsgId( iPluginData, aMessageId ), *temp ); User::LeaveIfNull( fsMessage ); CleanupStack::PushL( fsMessage ); MEmailMessage* message = CEmailMessage::NewL( iPluginData, fsMessage, EClientOwns ); CleanupStack::Pop(); // fsMessage - + + CleanupStack::PopAndDestroy( temp ); + CleanupStack::PopAndDestroy( params.iSmartTag ); + CleanupStack::PopAndDestroy( params.iHeader ); + return message; } @@ -448,6 +466,7 @@ &CEmailMailbox::TObserverEventMapper::IgnoreEventL, &CEmailMailbox::TObserverEventMapper::IgnoreEventL, &CEmailMailbox::TObserverEventMapper::IgnoreEventL, + &CEmailMailbox::TObserverEventMapper::IgnoreEventL, &CEmailMailbox::TObserverEventMapper::NewMessageL, &CEmailMailbox::TObserverEventMapper::MessageChangedL, &CEmailMailbox::TObserverEventMapper::MessageDeletedL, @@ -471,24 +490,68 @@ } } +void CEmailMailbox::TObserverEventMapper::ConvertParamsL( TMailboxId aMailbox, TAny* aParam1, + TAny* aParam2, REmailMessageIdArray& aMessageIds, TFolderId& aFolderId ) + { + RArray* newEntries( static_cast< RArray* >( aParam1 ) ); + CleanupClosePushL( *newEntries ); + TFSMailMsgId* parentFolder = static_cast( aParam2 ); + aFolderId = TFolderId( parentFolder->Id(), aMailbox ); + + for (TInt j = 0; j < newEntries->Count(); j++ ) + { + TFSMailMsgId fsId(( *newEntries )[j]); + TMessageId messageId( fsId.Id(), aFolderId.iId, aMailbox); + aMessageIds.Append(messageId); + } + + CleanupStack::PopAndDestroy( newEntries ); + } + void CEmailMailbox::TObserverEventMapper::IgnoreEventL( TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ ) { } void CEmailMailbox::TObserverEventMapper::NewMessageL( - TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ ) - { + TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* /*aParam3*/ ) + { + REmailMessageIdArray messageIds; + TFolderId folderId; + ConvertParamsL( aMailbox, aParam1, aParam2, messageIds, folderId ); + for ( TInt i = 0; i < iClientObservers.Count(); i++ ) + { + MMailboxContentObserver* observer = iClientObservers[i]; + observer->NewMessageEventL( aMailbox, messageIds, folderId ); + } } void CEmailMailbox::TObserverEventMapper::MessageChangedL( - TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ ) + TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* /*aParam3*/ ) { + REmailMessageIdArray messageIds; + TFolderId folderId; + ConvertParamsL( aMailbox, aParam1, aParam2, messageIds, folderId ); + + for ( TInt i = 0; i < iClientObservers.Count(); i++ ) + { + MMailboxContentObserver* observer = iClientObservers[i]; + observer->MessageChangedEventL( aMailbox, messageIds, folderId ); + } } void CEmailMailbox::TObserverEventMapper::MessageDeletedL( - TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ ) + TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* /*aParam3*/ ) { + REmailMessageIdArray messageIds; + TFolderId folderId; + ConvertParamsL( aMailbox, aParam1, aParam2, messageIds, folderId ); + + for ( TInt i = 0; i < iClientObservers.Count(); i++ ) + { + MMailboxContentObserver* observer = iClientObservers[i]; + observer->MessageDeletedEventL( aMailbox, messageIds, folderId ); + } } void CEmailMailbox::TObserverEventMapper::MessageMoved(