diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Src/IMMessageUtilsPC.cpp --- /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 ( 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 ( + 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 ( aFwdSource ); + + + CCAConversationMessage* FwdMessage = + dynamic_cast ( &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( &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( &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( &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 ( 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 ( 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