diff -r 000000000000 -r 094583676ce7 wvuing/wvuieng/EngSrc/CCAMessageBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuieng/EngSrc/CCAMessageBase.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,880 @@ +/* +* Copyright (c) 2005 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: Message Base class. +* +*/ + + +#include "CCAMessageBase.h" +#include "MCAMessageContainerInfo.h" +#include "PublicEngineDefinitions.h" +#include "PrivateEngineDefinitions.h" +#include "CAUtils.h" +#include "MCAContentProcessor.h" +#include "MCAContentProcessObserver.h" + +#include "ChatDebugAssert.h" +#include "ChatDebugPrint.h" + +#include +#include +#include +#include //for CEditableText::ELineBreak + +_LIT( KLineFeedFormat, "%c" ); +_LIT( KSpace, " " ); +const TInt KTimeStampMaxLength = 20; // max timestamp string length + +// Identification tool +TBool Compare( const CCAMessageBase::SProcessorObserverPair& aFirst, + const CCAMessageBase::SProcessorObserverPair& aSecond ) + { + if ( aFirst.iProcessor == aSecond.iProcessor ) + { + return ETrue; + } + return EFalse; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::CCAMessageBase +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +CCAMessageBase::CCAMessageBase() + { + } + + +//----------------------------------------------------------------------------- +// CCAMessageBase::ConstructL +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::ConstructL( TInt aOpCode, + const TDesC& aSender, + const TDesC& aRecipient, + const MDesCArray* aRecipients, + const MDesCArray* aScreenNames ) + { + iOperationCode = aOpCode; + + iSender = aSender.AllocL(); + iRecipient = aRecipient.AllocL(); + + // Sender & recipient + if ( aRecipients ) + { + CDesCArrayFlat* tempArray = new ( ELeave ) CDesCArrayFlat( 1 ); + CleanupStack::PushL( tempArray ); + TInt count( aRecipients->MdcaCount() ); + for ( TInt a( 0 ); a < count; ++a ) + { + tempArray->AppendL( aRecipients->MdcaPoint( a ) ); + } + CleanupStack::Pop( tempArray ); + delete iRecipients; + iRecipients = tempArray; + } + + if ( aScreenNames ) + { + CDesCArrayFlat* tempArray = new ( ELeave ) CDesCArrayFlat( 1 ); + CleanupStack::PushL( tempArray ); + TInt count( aScreenNames->MdcaCount() ); + for ( TInt a( 0 ); a < count; ++a ) + { + tempArray->AppendL( aScreenNames->MdcaPoint( a ) ); + } + CleanupStack::Pop( tempArray ); + delete iScreenNames; + iScreenNames = tempArray; + } + + + iMessagerType = EMessageOther; + iSystemMessageType = ESystemMessageNone; + iTime.HomeTime(); + iMessageVersion = KVersionNum; + + ResolveMessageType( aRecipients, aScreenNames ); + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::~CCAMessageBase +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +CCAMessageBase::~CCAMessageBase() + { + __CHAT_ASSERT_DEBUG( iOwnerCount == 0 ); + delete iMimeType; + delete iSender; + delete iRecipient; + delete iContentData; + delete iText; + delete iRecipients; + delete iScreenNames; + if ( iProcessors.Count() ) + { + TInt ignore = KErrNone; + TRAP( ignore, iProcessors[ 0 ].iProcessor->RemoveProcessingL( *this ) ); + } + iProcessors.Close(); + delete iForwardPart; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::TimeStamp +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TTime& CCAMessageBase::TimeStamp() const + { + return iTime; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::MessageType +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +MCAMessage::TMessageType CCAMessageBase::MessageType() const + { + return iMessageType; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::MessagerType +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +MCAMessage::TMessagerType CCAMessageBase::MessagerType() const + { + return iMessagerType; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::OperationCode +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +TInt CCAMessageBase::OperationCode() const + { + return iOperationCode; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Recipient +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::SetOperationCode( TInt aOpId ) + { + iOperationCode = aOpId; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Recipient +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC& CCAMessageBase::Recipient() const + { + if ( iRecipient ) + { + return *iRecipient; + } + return KNullDesC; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Recipients +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const MDesCArray* CCAMessageBase::Recipients() const + { + return iRecipients; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::ScreenNames +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const MDesCArray* CCAMessageBase::ScreenNames() const + { + return iScreenNames; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::IncreaseOwnerCount +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::IncreaseOwnerCount() + { + ++iOwnerCount; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::DecreaseOwnerCount +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +TBool CCAMessageBase::DecreaseOwnerCount() + { + return ( --iOwnerCount <= 0 ); + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Target +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC& CCAMessageBase::ServerAddress() const + { + if ( iInfo ) + { + return iInfo->ServerAddress(); + } + return KNullDesC; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Target +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC& CCAMessageBase::UserId() const + { + if ( iInfo ) + { + return iInfo->UserId(); + } + return KNullDesC; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Target +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC& CCAMessageBase::Target() const + { + if ( iInfo ) + { + return iInfo->Target(); + } + return KNullDesC; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::SetMessageContainerInfo +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::SetContainerInfo( MCAMessageContainerInfo* aInfo ) + { + iInfo = aInfo; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Text +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +MCALoggerMessage& CCAMessageBase::LoggerMessage() + { + return *this; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::AddContentProcessor +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +TInt CCAMessageBase::AddContentProcessor( MCAContentProcessor& aProcessor, + MCAContentProcessObserver* aObserver ) + { + CHAT_DP_FUNC_ENTER( "CCAMessageBase::AddContentProcessor" ); + + SProcessorObserverPair pair = + { + &aProcessor, + aObserver + }; + + TInt originalCountOfProcessors = iProcessors.Count(); + TInt error = iProcessors.Append( pair ); + if ( error == KErrNone ) + { + CHAT_DP( D_CHAT_LIT( " Processor added." ) ); + if ( iProcessors.Count() == 1 ) + { + TRAP( error, LaunchProcessingL() ); + CHAT_DP( D_CHAT_LIT( " Launch processing. Retval = %d" ), error ); + } + } + CHAT_DP_FUNC_DONE( "CCAMessageBase::AddContentProcessor" ); + if ( error < KErrNone ) + { + return error; + } + return iProcessors.Count() > originalCountOfProcessors; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::HandleProcessingComplete +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::HandleProcessingComplete( MCAContentProcessor& aProcessor, + TInt aStatus ) + { + CHAT_DP_FUNC_ENTER( "CCAMessageBase::HandleProcessingComplete" ); + SProcessorObserverPair pair = + { + &aProcessor, + NULL + }; + TIdentityRelation< SProcessorObserverPair > rule( *Compare ); + TInt index = iProcessors.Find( pair, rule ); + if ( index >= 0 ) + { + if ( iProcessors[ index ].iObserver ) + { + CHAT_DP( D_CHAT_LIT( "Inform processing observer about completion \ + of processor." ) ); + iProcessors[ index ].iObserver->HandleProcessingComplete( + aProcessor, *this, aStatus ); + } + iProcessors.Remove( index ); + } + if ( iDefaultContentObserver ) + { + iDefaultContentObserver->HandleProcessingComplete( aProcessor, *this, + aStatus ); + } + CHAT_DP_FUNC_DONE( "CCAMessageBase::HandleProcessingComplete" ); + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::MimeType +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC8& CCAMessageBase::MimeType() const + { + if ( iMimeType ) + { + return *iMimeType; + } + return KNullDesC8; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::ContentData +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC8& CCAMessageBase::ContentData() const + { + if ( iContentData ) + { + return *iContentData; + } + return KNullDesC8; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::SetContentData +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::SetContentData( HBufC8* aNewContent ) + { + delete iContentData; + iContentData = aNewContent; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::ContentProcessState +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +MCAMessage::TContentProcessState CCAMessageBase::ContentProcessState() const + { + return iContentProcessingState; + } + + +//----------------------------------------------------------------------------- +// CCAMessageBase::SetProcessState +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::SetProcessState( TContentProcessState aNewState ) + { + iContentProcessingState = aNewState; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::ReleaseTemporaryContentData +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::ReleaseTemporaryContentData() + { + // No temporary content data. + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Text +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC& CCAMessageBase::Text() const + { + if ( iText ) + { + return *iText; + } + return KNullDesC; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Sender +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +const TDesC& CCAMessageBase::Sender() const + { + if ( iSender ) + { + return *iSender; + } + return KNullDesC; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::Sender +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +void CCAMessageBase::SetContentProcessObserver( + MCAContentProcessObserver* aObserver ) + { + iDefaultContentObserver = aObserver; + } + +//----------------------------------------------------------------------------- +// CCAMessageBase::SizeInBytes +// ( Other items commented in header ) +//----------------------------------------------------------------------------- +TInt CCAMessageBase::SizeInBytes() const + { + return iSender->Size() + + iRecipient->Size(); + } + +// --------------------------------------------------------- +// CCAMessageBase::FailedMessage() +// --------------------------------------------------------- +// +TBool CCAMessageBase::FailedMessage() const + { + return iFailed; + } + +// --------------------------------------------------------- +// CCAMessageBase::SetForwardPart() +// --------------------------------------------------------- +// +void CCAMessageBase::SetForwardPartL( const HBufC* aFwdPart ) + { + // If NULL + if ( !aFwdPart ) + { + delete iForwardPart; + iForwardPart = NULL; + return; + } + + HBufC* temp = aFwdPart->AllocL(); + // Delete old + delete iForwardPart; + iForwardPart = NULL; + iForwardPart = temp; + } + +// --------------------------------------------------------- +// CCAMessageBase::ForwardPart() +// --------------------------------------------------------- +// +const HBufC* CCAMessageBase::ForwardPart() const + { + return iForwardPart; + } + +// --------------------------------------------------------- +// CCAMessageBase::FailedMessage() +// --------------------------------------------------------- +// +void CCAMessageBase::SetFailed( TBool aFailed /* = ETrue */ ) + { + iFailed = aFailed; + } + +// --------------------------------------------------------- +// CCAMessageBase::InternalizeL() +// --------------------------------------------------------- +// +void CCAMessageBase::InternalizeL( RReadStream& aStream ) + { + iMessageType = static_cast< TMessageType >( aStream.ReadUint16L() ); + iMessagerType = static_cast< TMessagerType >( aStream.ReadUint16L() ); + + // This item does not exist in version 0 + if ( iMessageVersion > 0 ) + { + iSystemMessageType = + static_cast< TSystemMessage >( aStream.ReadUint16L() ); + } + + iFailed = static_cast< TBool >( aStream.ReadUint8L() ); + + //this member was newly added. + //read also this member from the file, because + //the user could have saved the image before saving a conversation + iSaved = static_cast< TBool >( aStream.ReadUint8L() ); + + TUint32 high = aStream.ReadUint32L(); + TUint32 low = aStream.ReadUint32L(); + + iTime = MAKE_TINT64( high, low ); + + HBufC* tempSender = CAUtils::InternalizeBufferFromStreamL( aStream ); + delete iSender; + iSender = tempSender; + + HBufC* tempRecipient = CAUtils::InternalizeBufferFromStreamL( aStream ); + delete iRecipient; + iRecipient = tempRecipient; + + HBufC* tempMessage = CAUtils::InternalizeBufferFromStreamL( aStream ); + delete iText; + iText = tempMessage; + + if ( ContentType() != EContentText && ContentType() != EContentInvalid ) + { + HBufC8* tempContentType = + CAUtils::InternalizeBuffer8FromStreamL( aStream ); + delete iMimeType; + iMimeType = tempContentType; + + HBufC8* tempContent = CAUtils::InternalizeBuffer8FromStreamL( aStream ); + delete iContentData; + iContentData = tempContent; + } + SetProcessState( EContentReady ); + } + +// --------------------------------------------------------- +// CCAMessageBase::ExternalizeL() +// --------------------------------------------------------- +// +void CCAMessageBase::ExternalizeL( RWriteStream& aStream ) const + { + aStream.WriteUint16L( static_cast< TUint16 >( ContentType() ) ); + aStream.WriteUint16L( static_cast< TUint16 >( KVersionNum ) ); + aStream.WriteUint16L( static_cast< TUint16 >( iMessageType ) ); + aStream.WriteUint16L( static_cast< TUint16 >( iMessagerType ) ); + aStream.WriteUint16L( static_cast< TUint16 >( iSystemMessageType ) ); + aStream.WriteUint8L( static_cast< TUint8 >( iFailed ) ); + + //this member was newly added. + //write also this member to the file, because + //the user could have saved the image. + aStream.WriteUint8L( static_cast< TUint8 >( iSaved ) ); + + aStream.WriteUint32L( I64HIGH( iTime.Int64() ) ); + aStream.WriteUint32L( I64LOW( iTime.Int64() ) ); + + CAUtils::ExternalizeBufferToStreamL( *iSender, aStream ); + // if the type of current received message are EMessageWhisper and EMessageGroup, + // store recipient's screen name when try to save conversation. + if ( iMessagerType == EMessageReceived && ( iMessageType == EMessageWhisper || iMessageType == EMessageGroup ) ) + { + TInt count = iScreenNames->MdcaCount(); + if ( count ) + { + // iScreenNames have only one element as current account's ScreenName. + CAUtils::ExternalizeBufferToStreamL( iScreenNames->MdcaPoint( 0 ), aStream ); + } + else + { + CAUtils::ExternalizeBufferToStreamL( *iRecipient, aStream ); + } + } + else + { + CAUtils::ExternalizeBufferToStreamL( *iRecipient, aStream ); + } + + CAUtils::ExternalizeBufferToStreamL( *iText, aStream ); + + if ( ContentType() != EContentText && ContentType() != EContentInvalid ) + { + CAUtils::ExternalizeBufferToStreamL( *iMimeType, aStream ); + CAUtils::ExternalizeBufferToStreamL( *iContentData, aStream ); + } + } + +// --------------------------------------------------------- +// CCAMessageBase::MessageSizeInBytesL() +// --------------------------------------------------------- +// +TInt CCAMessageBase::MessageSizeInBytesL() const + { + TInt memoryRequired( 0 ); + + if ( iMessageType != EMessageSystem ) + { + HBufC* separator = + StringLoader::LoadLC( R_CHATCLIENT_HISTORY_MSG_SEPARATOR ); + if ( iMessagerType == EMessageSent ) + { + memoryRequired += KFromMe().Size(); + memoryRequired += CAUtils::DisplayId( *iRecipient ).Size(); + } + else + { + memoryRequired += CAUtils::DisplayId( *iSender ).Size(); + if ( iMessageType == EMessagePTOP ) + { + memoryRequired += KWhiteSpace().Size(); + memoryRequired += KToMe().Size(); + } + memoryRequired += separator->Size(); + memoryRequired += KWhiteSpace().Size(); + } + CleanupStack::PopAndDestroy( separator ); + } + + memoryRequired += iText->Size(); + memoryRequired += KLineEnd().Size(); + + return memoryRequired; + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::ExternalizeForMTML +// Externalize message to MTM send format. +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::ExternalizeForMTML( RWriteStream& aStream, + TBool aShowTimeStamps ) const + { + if ( !aShowTimeStamps && + iSystemMessageType == ESystemMessageDateChange ) + { + // Hide date change messages when we don't show timestamps + return; + } + + // TimeStamp + if ( aShowTimeStamps && + iSystemMessageType != ESystemMessageDateChange ) + { + HBufC* timeStamp = + HBufC::NewLC( KTimeStampMaxLength ); + TPtr timePtr( timeStamp->Des() ); + + HBufC* timeStampFormat = + StringLoader::LoadLC( R_QTN_TIME_USUAL_WITH_ZERO ); + + // construct timestamp + TRAPD( err, TimeStamp().FormatL( timePtr, *timeStampFormat ) ); + if ( err == KErrNone ) + { + // Convert timestamp to correct number mode + CAUtils::LanguageSpecificNumberConversion( timePtr ); + aStream.WriteL( timePtr ); + aStream.WriteL( KSpace ); + } + + //timeStamp, timeStampFormat + CleanupStack::PopAndDestroy( 2, timeStamp ); + } + + if ( iMessageType != EMessageSystem ) + { + HBufC* separator = + StringLoader::LoadLC( R_CHATCLIENT_HISTORY_MSG_SEPARATOR ); + + if ( iMessageType != EMessageGroup ) + { + if ( iMessagerType == EMessageSent ) + { + aStream.WriteL( KFromMe ); + aStream.WriteL( CAUtils::DisplayId( *iRecipient ) ); + } + else + { + aStream.WriteL( CAUtils::DisplayId( *iSender ) ); + aStream.WriteL( KWhiteSpace ); + aStream.WriteL( KToMe ); + } + } + else + { + if ( iMessagerType == EMessageSent ) + { + aStream.WriteL( CAUtils::DisplayId( *iSender ) ); + } + else + { + aStream.WriteL( CAUtils::DisplayId( *iSender ) ); + } + } + aStream.WriteL( *separator ); + aStream.WriteL( KWhiteSpace ); + CleanupStack::PopAndDestroy( separator ); + } + + if ( ContentType() != EContentText ) // For media files. + { + HBufC* mediaFile = StringLoader::LoadLC( R_QTN_CHAT_LOG_MEDIA_FILE ); + aStream.WriteL( *mediaFile ); + CleanupStack::PopAndDestroy( mediaFile ); + } + else if ( aShowTimeStamps && + iSystemMessageType == ESystemMessageDateChange ) + { + // Date change system msg + HBufC* dateChange = iText->AllocLC(); + TPtr dateChangePtr( dateChange->Des() ); + // Convert message to correct number mode + CAUtils::LanguageSpecificNumberConversion( dateChangePtr ); + // Write to stream + aStream.WriteL( dateChangePtr ); + CleanupStack::PopAndDestroy( dateChange ); + } + else + { + aStream.WriteL( *iText ); + } + + TBuf<1> lineFeed; + lineFeed.Format( KLineFeedFormat, CEditableText::ELineBreak ); + aStream.WriteL( lineFeed ); + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::SetMessageType +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::SetMessageType( TMessageType aNewType ) + { + iMessageType = aNewType; + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::SetMessagerType +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::SetMessagerType( TMessagerType aNewType ) + { + iMessagerType = aNewType; + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::LaunchProcessing +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::LaunchProcessingL() + { + if ( iProcessors.Count() > 0 ) + { + CHAT_DP( D_CHAT_LIT( "Request processing." ) ); + iProcessors[ 0 ].iProcessor->RequestProcessingL( *this ); + } + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::ResolveMessageType +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::ResolveMessageType( const MDesCArray* aRecipients, + const MDesCArray* aScreenNames ) + { + // aData.iRecipients > 0 -> ptop + // aData.iScreenNames > 0 -> whisper + // other cases -> group + + TInt countOfRecipients( aRecipients ? aRecipients->MdcaCount() : 0 ); + TInt countOfScreenNames( aScreenNames ? aScreenNames->MdcaCount() : 0 ); + + if ( countOfRecipients ) // received ptop + { + iMessageType = EMessagePTOP; + } + else if ( countOfScreenNames ) // sent / received whisper + { + iMessageType = EMessageWhisper; + } + else if ( !aRecipients && !aScreenNames ) // sent ptop + { + iMessageType = EMessagePTOP; + } + else + { + iMessageType = EMessageGroup; + } + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::SetSystem +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::SetSystem( TSystemMessage aType ) + { + iSystemMessageType = aType; + iMessagerType = EMessageSent; + iMessageType = EMessageSystem; + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::SystemMessageType +// ----------------------------------------------------------------------------- +// +MCAMessage::TSystemMessage CCAMessageBase::SystemMessageType() + { + if ( iMessageType != EMessageSystem ) + { + // not a system message + return ESystemMessageNone; + } + return iSystemMessageType; + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::SetVersionNumber +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::SetVersionNumber( TUint16 aVersion ) + { + iMessageVersion = aVersion; + } + + + +//The following API's are used, if message content is a image +//This is part of new implementation required for wvuing +//While merging with wvui20, please make sure you preserve +//this change also. + +// ----------------------------------------------------------------------------- +// CCAMessageBase::SetImageAsSaved +// ----------------------------------------------------------------------------- +// +void CCAMessageBase::SetImageAsSaved( const TBool aSaved ) + { + iSaved = aSaved; + } + +// ----------------------------------------------------------------------------- +// CCAMessageBase::IsImageSaved +// ----------------------------------------------------------------------------- +// +TBool CCAMessageBase::IsImageSaved() + { + return iSaved; + } + + +// end of file