emailservices/emailclientapi/src/emailmailbox.cpp
branchRCL_3
changeset 26 67369d1b217f
parent 24 b5fbb9b25d57
child 63 d189ee25cf9d
--- 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<TReplyForwardParams> 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<TFSMailMsgId>* newEntries( static_cast< RArray<TFSMailMsgId>* >( aParam1 ) );
+    CleanupClosePushL( *newEntries );
+    TFSMailMsgId* parentFolder = static_cast<TFSMailMsgId*>( 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(