wvuing/wvuiprocess/Src/IMMessageUtilsPC.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiprocess/Src/IMMessageUtilsPC.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,495 @@
+/*
+* Copyright (c) 2006 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:  Utils for message handling
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "IMMessageUtilsPC.h"
+#include	"ChatDebugPrint.h"
+
+#include    "imutils.h"
+
+#include    "MCAMessagesWriteInterface.h"
+#include    "MCAMessagesReadInterface.h"
+
+#include    "MCAMessageCreator.h"
+#include    "MCAMessageContainerInfo.h"
+
+#include    "impsbuilddefinitions.h"
+
+#include	"CCAConversationPC.h"
+#include	"CCAEngine.h"
+#include 	"MCAProcessManager.h"
+#include 	"CCAProcessManagerFactory.h"
+#include	"MCAMessage.h"
+#include	"MCAConversationMessage.h"
+#include	"CCAConversationMessage.h"
+
+#include	"MCARecordedChatsPC.h"
+#include	"CCARecordedChatsPC.h"
+#include	"MCAMessageContainer.h"
+#include	"CCAGroupPC.h"
+
+#include	"MCAMessageFlowHandlerPC.h"
+#include	"CCAMessageFlowHandlerPC.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// IMMessageUtilsPC: SendFileL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void IMMessageUtilsPC::SendFileL(
+    MCAConversationPC& aMessageRWInterfacePC,
+    const MDesCArray* aSelectedNames,
+    const TBool aFileProtected,
+    const TDesC& aFileName,
+    const TDesC8& aContentType,
+    const TDesC8& aContentData,
+    const TDesC& aSender /*= KNullDesC*/,
+    const TDesC& aSapId /*= KNullDesC*/,
+    const TDesC& aUserId /*= KNullDesC*/,
+    const MDesCArray* aRecipients /*NULL*/ )
+    {
+
+    CCAEngine* engine = CCAProcessManagerFactory::InstanceL()->
+                        GetProcessManager()->GetEngine();
+
+    MCAMessageCreator& creator =
+        engine->MessageUtils().MessageCreator();
+
+    CCAConversationPC& msgRWInterface =
+        static_cast <CCAConversationPC&>( aMessageRWInterfacePC );
+    const MCAMessageContainerInfo& msgContainerInfo =
+        msgRWInterface.ReadInterfaceL().TargetId();
+
+
+
+    if ( !aFileProtected )
+        {
+
+        CHAT_DP( D_CHAT_LIT( "Sending file %S.." ), &aFileName );
+
+        MCAMessageCreator::SMessageData data =
+            {
+            KMessageDataVersion,
+            0,
+            aSapId,
+            aUserId,
+            aSender,
+            msgContainerInfo.Target(), // Recipient
+            aRecipients,
+            aSelectedNames,
+            aFileName,
+            aContentType,
+            aContentData,
+            MCAMessage::EMessageSent
+            };
+
+        MCAMessage* message = creator.CreateMessageL( data );
+#ifdef RD_SEND_NOT_SUPPORTED_CONTENT
+        if ( err != KErrNone )
+            {
+            message->SetProcessState( MCAMessage::EContentCorrupted );
+            }
+#endif //RD_SEND_NOT_SUPPORTED_CONTENT
+        // Lock write interface buffer memory handling for sending
+        // file, memory check is done when message is appended to
+        // read container after possible image processing.
+        msgRWInterface.WriteInterfaceL().LockBufferMemoryHandling( ETrue );
+        msgRWInterface.WriteInterfaceL().AppendL( message );
+        // Open interface
+        msgRWInterface.WriteInterfaceL().LockBufferMemoryHandling( EFalse );
+        }
+#ifdef RD_SEND_NOT_SUPPORTED_CONTENT
+    else
+        {
+
+        CHAT_DP( D_CHAT_LIT( "Sending file %S.." ), &aFileName );
+
+        MCAMessageCreator::SMessageData data =
+            {
+            KMessageDataVersion,
+            0,
+            aSapId,
+            aUserId,
+            aSender,
+            msgContainerInfo.Target(), // Recipient
+            aRecipients,
+            aSelectedNames,
+            aFileName,
+            aContentType,
+            aContentData,
+            MCAMessage::EMessageSent
+            };
+        MCAMessage* message = creator.CreateMessageL( data );
+        message->SetProcessState( MCAMessage::EContentNotSupportedDrm );
+        // Lock write interface buffer memory handling for sending
+        // file, memory check is done when message is appended to
+        // read container after possible image processing.
+        msgRWInterface.WriteInterface().LockBufferMemoryHandling( ETrue );
+        msgRWInterface.WriteInterface().AppendL( message );
+        // Open interface
+        msgRWInterface.WriteInterface().LockBufferMemoryHandling( EFalse );
+        }
+#endif //RD_SEND_NOT_SUPPORTED_CONTENT        
+    }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CCAMessageUtilsPC: SendMessageL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TBool IMMessageUtilsPC::SendMessageL(
+    const MCAConversationMessage& aMessage,
+    const TDesC& aRecipient,
+    MCAConversationPC& aMessageRWInterfacePC,
+    const MDesCArray* aSelectedNames,
+    const TDesC& aSender /*= KNullDesC*/,
+    const TDesC& aSapId /*= KNullDesC*/,
+    const TDesC& aUserId /*= KNullDesC*/,
+    const TDesC& aFileName /*= KNullDesC*/,
+    const MDesCArray* aRecipients /*NULL*/ )
+    {
+
+    CCAEngine* engine =
+        CCAProcessManagerFactory::InstanceL()->
+        GetProcessManager()->GetEngine();
+
+
+    MCAMessageCreator& creator =
+        engine->MessageUtils().MessageCreator();
+    CCAConversationPC& msgRWInterface =
+        static_cast <CCAConversationPC&>(
+            aMessageRWInterfacePC );
+
+
+    MCAMessageCreator::SMessageData data =
+        {
+        KMessageDataVersion,
+        0,
+        aSapId,
+        aUserId,
+        aSender,
+        aRecipient,
+        aRecipients,
+        aSelectedNames,
+        aFileName,
+        aMessage.MimeType(),
+        aMessage.ContentData(),
+        MCAMessage::EMessageSent
+        };
+
+    // Create and write
+    MCAMessage* newMessage = creator.CreateMessageL( data );
+    newMessage->SetProcessState( MCAMessage::EContentReady );
+    msgRWInterface.WriteInterfaceL().AppendL( newMessage );
+
+    // message handled succesfully
+    return ETrue;
+
+    }
+
+
+// ---------------------------------------------------------
+// IMMessageUtilsPC::CloneMessageL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C MCAConversationMessage* IMMessageUtilsPC::CloneMessageL(
+    const MCAConversationMessage& aFwdSource )
+    {
+
+    MCAConversationMessage& FwdMessageTmp =
+        const_cast <MCAConversationMessage&>( aFwdSource );
+
+
+    CCAConversationMessage* FwdMessage =
+        dynamic_cast <CCAConversationMessage*>( &FwdMessageTmp );
+
+    if ( !FwdMessage )
+        {
+        return NULL;
+        }
+
+    MCAProcessManager* processManager =
+        CCAProcessManagerFactory::InstanceL()->GetProcessManager();
+    CCAEngine&	engine ( *processManager->GetEngine() );
+
+    MCAMessage* Msg =
+        engine.MessageUtils().MessageCreator().CloneMessageL(
+            &FwdMessage->GetMessage() );
+
+    //transfer the ownership of Msg to the CCAConversationMessage
+    CCAConversationMessage* NewFwdMsg = CCAConversationMessage::NewL( *Msg, Msg );
+
+    return NewFwdMsg;
+
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAMessageFlowHandlerPC::CreateInstanceL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MCAMessageFlowHandlerPC* IMMessageUtilsPC::CreateInstanceL(
+    MCAMessageContainer& aMessageContainer,
+    MCAConversationPC& aConversationPC,
+    TBool aRecordedChatHandler )
+    {
+
+    CCAConversationPC& conversationPC =
+        *static_cast<CCAConversationPC*>( &aConversationPC );
+
+    MCAProcessManager* processManager =
+        CCAProcessManagerFactory::InstanceL()->GetProcessManager();
+    CCAEngine&	engine ( *processManager->GetEngine() );
+
+    CCAMessageFlowHandlerPC* FlowHandler =
+        CCAMessageFlowHandlerPC::NewL(
+            aMessageContainer,
+            conversationPC.ReadInterfaceL(),
+            *engine.GetInternalSettingsInterface(),
+            aRecordedChatHandler );
+
+    return 	FlowHandler;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageFlowHandlerPC::CreateInstanceL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MCAMessageFlowHandlerPC* IMMessageUtilsPC::CreateInstanceL(
+    MCAMessageContainer& aMessageContainer,
+    MCAGroupPC& aGroupPC,
+    TBool aRecordedChatHandler )
+    {
+
+    CCAGroupPC& groupPC =
+        *static_cast<CCAGroupPC*>( &aGroupPC );
+
+    MCAProcessManager* processManager =
+        CCAProcessManagerFactory::InstanceL()->GetProcessManager();
+    CCAEngine&	engine ( *processManager->GetEngine() );
+
+    CCAMessageFlowHandlerPC* FlowHandler =
+        CCAMessageFlowHandlerPC::NewL(
+            aMessageContainer,
+            groupPC.ReadInterfaceL(),
+            *engine.GetInternalSettingsInterface(),
+            aRecordedChatHandler );
+
+    return 	FlowHandler;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CCAMessageFlowHandlerPC::CreateInstanceL
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MCAMessageFlowHandlerPC* IMMessageUtilsPC::CreateInstanceL(
+    MCAMessageContainer& aMessageContainer,
+    MCARecordedChatsPC& aRecChatsPC,
+    TBool aRecordedChatHandler )
+    {
+
+    CCARecordedChatsPC& recordedChatsPC =
+        *static_cast<CCARecordedChatsPC*>( &aRecChatsPC );
+
+    MCAProcessManager* processManager =
+        CCAProcessManagerFactory::InstanceL()->GetProcessManager();
+    CCAEngine&	engine ( *processManager->GetEngine() );
+
+    CCAMessageFlowHandlerPC* FlowHandler = CCAMessageFlowHandlerPC::NewL(
+                                               aMessageContainer,
+                                               recordedChatsPC.ReadInterfaceL(),
+                                               *engine.GetInternalSettingsInterface(),
+                                               aRecordedChatHandler );
+
+    return FlowHandler;
+    }
+
+// -----------------------------------------------------------------------------
+// CCAMessageUtilsPC: SendFileL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void IMMessageUtilsPC::SendFileL(
+    MCAGroupPC& aMessageRWInterfacePC,
+    const MDesCArray* aSelectedNames,
+    const TBool aFileProtected,
+    const TDesC& aFileName,
+    const TDesC8& aContentType,
+    const TDesC8& aContentData,
+    const TDesC& aSender /*= KNullDesC*/,
+    const TDesC& aSapId /*= KNullDesC*/,
+    const TDesC& aUserId /*= KNullDesC*/,
+    const MDesCArray* aRecipients /*NULL*/ )
+    {
+
+    CCAEngine* engine = CCAProcessManagerFactory::InstanceL()->
+                        GetProcessManager()->GetEngine();
+
+    MCAMessageCreator& creator =
+        engine->MessageUtils().MessageCreator();
+
+    CCAGroupPC& msgRWInterface =
+        static_cast <CCAGroupPC&>( aMessageRWInterfacePC );
+    const MCAMessageContainerInfo& msgContainerInfo =
+        msgRWInterface.ReadInterfaceL().TargetId();
+
+
+
+    if ( !aFileProtected )
+        {
+
+        CHAT_DP( D_CHAT_LIT( "Sending file %S.." ), &aFileName );
+
+        MCAMessageCreator::SMessageData data =
+            {
+            KMessageDataVersion,
+            0,
+            aSapId,
+            aUserId,
+            aSender,
+            msgContainerInfo.Target(), // Recipient
+            aRecipients,
+            aSelectedNames,
+            aFileName,
+            aContentType,
+            aContentData,
+            MCAMessage::EMessageSent
+            };
+
+        MCAMessage* message = creator.CreateMessageL( data );
+#ifdef RD_SEND_NOT_SUPPORTED_CONTENT
+        if ( err != KErrNone )
+            {
+            message->SetProcessState( MCAMessage::EContentCorrupted );
+            }
+#endif //RD_SEND_NOT_SUPPORTED_CONTENT
+        // Lock write interface buffer memory handling for sending
+        // file, memory check is done when message is appended to
+        // read container after possible image processing.
+        msgRWInterface.WriteInterfaceL().LockBufferMemoryHandling( ETrue );
+        msgRWInterface.WriteInterfaceL().AppendL( message );
+        // Open interface
+        msgRWInterface.WriteInterfaceL().LockBufferMemoryHandling( EFalse );
+        }
+#ifdef RD_SEND_NOT_SUPPORTED_CONTENT
+    else
+        {
+
+        CHAT_DP( D_CHAT_LIT( "Sending file %S.." ), &aFileName );
+
+        MCAMessageCreator::SMessageData data =
+            {
+            KMessageDataVersion,
+            0,
+            aSapId,
+            aUserId,
+            aSender,
+            msgContainerInfo.Target(), // Recipient
+            aRecipients,
+            aSelectedNames,
+            aFileName,
+            aContentType,
+            aContentData,
+            MCAMessage::EMessageSent
+            };
+        MCAMessage* message = creator.CreateMessageL( data );
+        message->SetProcessState(
+            MCAMessage::EContentNotSupportedDrm );
+        // Lock write interface buffer memory handling for sending
+        // file, memory check is done when message is appended to
+        // read container after possible image processing.
+        msgRWInterface.WriteInterface().LockBufferMemoryHandling(
+            ETrue );
+        msgRWInterface.WriteInterface().AppendL( message );
+        // Open interface
+        msgRWInterface.WriteInterface().LockBufferMemoryHandling(
+            EFalse );
+        }
+#endif //RD_SEND_NOT_SUPPORTED_CONTENT        
+    }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CCAMessageUtilsPC: SendMessageL
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C TBool IMMessageUtilsPC::SendMessageL(
+    const MCAConversationMessage& aMessage,
+    const TDesC& aRecipient,
+    MCAGroupPC& aMessageRWInterfacePC,
+    const MDesCArray* aSelectedNames,
+    const TDesC& aSender /*= KNullDesC*/,
+    const TDesC& aSapId /*= KNullDesC*/,
+    const TDesC& aUserId /*= KNullDesC*/,
+    const TDesC& aFileName /*= KNullDesC*/,
+    const MDesCArray* aRecipients /*NULL*/ )
+    {
+
+    CCAEngine* engine = CCAProcessManagerFactory::InstanceL()->
+                        GetProcessManager()->GetEngine();
+
+
+    MCAMessageCreator& creator =
+        engine->MessageUtils().MessageCreator();
+    CCAGroupPC& msgRWInterface =
+        static_cast <CCAGroupPC&>( aMessageRWInterfacePC );
+
+
+    MCAMessageCreator::SMessageData data =
+        {
+        KMessageDataVersion,
+        0,
+        aSapId,
+        aUserId,
+        aSender,
+        aRecipient,
+        aRecipients,
+        aSelectedNames,
+        aFileName,
+        aMessage.MimeType(),
+        aMessage.ContentData(),
+        MCAMessage::EMessageSent
+        };
+
+    // Create and write
+    MCAMessage* newMessage = creator.CreateMessageL( data );
+    newMessage->SetProcessState( MCAMessage::EContentReady );
+    msgRWInterface.WriteInterfaceL().AppendL( newMessage );
+
+    // message handled succesfully
+    return ETrue;
+
+    }
+
+
+//  End of File