--- /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