diff -r 84d9eb65b26f -r 518b245aa84c messagingapp/msgappfw/plugin/src/ccsmsgpluginutility.cpp --- a/messagingapp/msgappfw/plugin/src/ccsmsgpluginutility.cpp Mon May 03 12:29:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,462 +0,0 @@ -/* -* Copyright (c) 2007 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: CS Msg Plugin Utility class - * -*/ - - -// USER INCLUDES -#include "ccsmsgpluginutility.h" -#include "ccsdebug.h" - -//SYSTEM INCLUDES -#include -#include -#include -#include -#include - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::NewL -// Two Phase Construction -// ---------------------------------------------------------------------------- -CCsMsgPluginUtility* CCsMsgPluginUtility::NewL( ) - { - CCsMsgPluginUtility* self = new ( ELeave ) CCsMsgPluginUtility(); - return self; - } - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::~CCsMsgPluginUtility -// Destructor -// ---------------------------------------------------------------------------- -CCsMsgPluginUtility::~CCsMsgPluginUtility() - { - } - -// ---------------------------------------------------------------------------- -// Constructor -// ---------------------------------------------------------------------------- -CCsMsgPluginUtility::CCsMsgPluginUtility() - { - } - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::CreateConversationEntryL -// Creates CCsConversationEntry -// ---------------------------------------------------------------------------- -// -CCsConversationEntry* CCsMsgPluginUtility::CreateConversationEntryL( - const HBufC* aContact, - TMsvId aEnryId, - TInt64 aTimeStamp, - TMsvId aDir, - const HBufC* aDescription, - TCsSendState aSendState, - TCsAttribute aMsgAttribs, - TCsType aCsType) const - { - // create CCsConversationEntry - CCsConversationEntry *conversationEntry = CCsConversationEntry::NewL(); - CleanupStack::PushL(conversationEntry); - - //set the values - conversationEntry->SetContactL( *aContact ); - conversationEntry->SetEntryId( aEnryId ); - conversationEntry->SetTimeStampL( aTimeStamp ); - conversationEntry->SetDescriptionL( *aDescription ); - conversationEntry->SetConversationDir( MapDirection( aDir ) ); - conversationEntry->SetSendState( aSendState ); - conversationEntry->ChangeAttributes( aMsgAttribs, ECsAttributeNone ); - conversationEntry->SetType(aCsType); - - //pop and return - CleanupStack::Pop(conversationEntry); - return conversationEntry; - } - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::MapDirection -// Map the msg direction to TCsDirection -// ---------------------------------------------------------------------------- -// -TCsDirection CCsMsgPluginUtility::MapDirection( TMsvId aDir ) const - { - TCsDirection direction = ECsDirectionUnknown; - switch(aDir) - { - case KMsvSentEntryIdValue: - case KMsvGlobalOutBoxIndexEntryIdValue: // Fall-through - case KMsvDraftEntryIdValue: - { - direction = ECsDirectionOutgoing; - break; - } - case KMsvGlobalInBoxIndexEntryIdValue: - { - direction = ECsDirectionIncoming; - break; - } - } - return direction; - } - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::GetMsgAttributes -// Returns the message attributes as a bitmask of TCsAttribute values. -// ---------------------------------------------------------------------------- -// -TUint16 CCsMsgPluginUtility::GetMsgAttributes( const TMsvEntry& aEntry ) - { - TUint16 msgAttributes = ECsAttributeNone; - TMsvId parent = aEntry.Parent(); - - // New - if( aEntry.New() ) - { - msgAttributes |= ECsAttributeNew; - } - - // Drafts - if( KMsvDraftEntryIdValue == parent ) - { - msgAttributes |= ECsAttributeDraft; - } - - // Attachments - if( aEntry.Attachment() ) - { - msgAttributes |= ECsAttributeAttachment; - } - - // Priority - TMsvPriority priority = aEntry.Priority(); - if( EMsvHighPriority == priority ) - { - msgAttributes |= ECsAttributeHighPriority; - } - else if( EMsvLowPriority == priority ) - { - msgAttributes |= ECsAttributeLowPriority; - } - - // Read/Unread - if( KMsvGlobalInBoxIndexEntryIdValue == parent ) - { - if( EFalse == aEntry.Unread() ) - { - // Read - msgAttributes &= ~ECsAttributeUnread; - } - else - { - // Unread - msgAttributes |= ECsAttributeUnread; - } - } - - // Sent - if( KMsvSentEntryIdValue == parent ) - { - msgAttributes |= ECsAttributeSent; - } - - return msgAttributes; - } - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::GetSendState -// Returns the send status. -// ---------------------------------------------------------------------------- -// -TCsSendState CCsMsgPluginUtility::GetSendState( const TMsvEntry& aContext ) - { - TUint sendingState = aContext.SendingState(); - TCsSendState convSendState = ECsSendStateUnknown; - - switch( sendingState ) - { - case KMsvSendStateUponRequest: - { - convSendState = ECsSendStateUponRequest; - break; - } - case KMsvSendStateWaiting: - { - convSendState = ECsSendStateWaiting; - break; - } - case KMsvSendStateSending: - { - convSendState = ECsSendStateSending; - break; - } - case KMsvSendStateScheduled: - { - convSendState = ECsSendStateScheduled; - break; - } - case KMsvSendStateResend: - { - convSendState = ECsSendStateResend; - break; - } - case KMsvSendStateSuspended: - { - convSendState = ECsSendStateSuspended; - break; - } - case KMsvSendStateFailed: - { - convSendState = ECsSendStateFailed; - break; - } - case KMsvSendStateSent: - { - convSendState = ECsSendStateSent; - break; - } - case KMsvSendStateNotApplicable: - { - convSendState = ECsSendStateNotApplicable; - break; - } - } - return convSendState; - } - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::GetContact -// Get the Contact (From/To) of the message -// ---------------------------------------------------------------------------- -// -void CCsMsgPluginUtility::CreateContactL(CMsvSession* aSession, - const TMsvEntry& aEntry, - RPointerArray& addressList) - { - if ( aEntry.iMtm.iUid == KSenduiMtmSmsUidValue ) - { - CPlainText* nullString = CPlainText::NewL(); - CleanupStack::PushL( nullString ); - - CSmsHeader* smsHeader = NULL; - if ( aEntry.Parent() == KMsvGlobalInBoxIndexEntryIdValue ) - { - smsHeader = CSmsHeader::NewL( CSmsPDU::ESmsDeliver, *nullString ); - } - else if ( aEntry.Parent() == KMsvSentEntryIdValue || - aEntry.Parent() == KMsvGlobalOutBoxIndexEntryIdValue ) - { - smsHeader = CSmsHeader::NewL( CSmsPDU::ESmsSubmit, *nullString ); - } - else - { - CleanupStack::PopAndDestroy(nullString); - return; - } - CleanupStack::PushL( smsHeader ); - - CMsvEntry *cEntry = CMsvEntry::NewL(*aSession,aEntry.Id(), - TMsvSelectionOrdering() ); - CleanupStack::PushL( cEntry ); - - CMsvStore* store = cEntry->ReadStoreL(); - CleanupStack::PushL(store); - - TRAPD(err, smsHeader->RestoreL( *store )); - if ( err == KErrNone ) - { - if ( aEntry.Parent() == KMsvGlobalOutBoxIndexEntryIdValue || - aEntry.Parent() == KMsvSentEntryIdValue ) - { - const CArrayPtrFlat& rcpts = smsHeader->Recipients(); - const CSmsNumber& rcpt = *rcpts.At(0); - - HBufC* fromAddress = (rcpt.Address()).AllocL(); - addressList.Append(fromAddress); - } - else - { - // Check and add if any email addresses - const CSmsEmailFields& emailFields = smsHeader->EmailFields(); - if( emailFields.HasAddress() ) - { - TPtrC name; - TPtrC address; - - const MDesCArray& emailRecipients = emailFields.Addresses(); - for( TInt id = 0; id < emailRecipients.MdcaCount(); id++ ) - { - NameAndAddress( emailRecipients.MdcaPoint( id ), name, address); - - // Add address to list - HBufC* addressBuf = HBufC::NewL( address.Length() ); - TPtr addressPtr( 0, 0 ); - addressPtr.Set( addressBuf->Des() ); - addressPtr.Copy( address ); - addressList.Append(addressBuf); - } - } - else - { - HBufC* fromAddress = (smsHeader->FromAddress()).AllocL(); - - // Try iDetails if empty - if ( fromAddress->Length() == 0 ) - fromAddress = aEntry.iDetails.AllocL(); - - addressList.Append(fromAddress); - } - } - } - - // Cleanup - CleanupStack::PopAndDestroy(store); - CleanupStack::PopAndDestroy(cEntry); - CleanupStack::PopAndDestroy(smsHeader); - CleanupStack::PopAndDestroy(nullString); - } - else if ( aEntry.iMtm.iUid == KSenduiMtmBtUidValue || - aEntry.iMtm.iUid == KSenduiMtmBioUidValue || - aEntry.iMtm == KUidMtmWapPush ) - { - HBufC* fromAddress = aEntry.iDetails.AllocL(); - addressList.Append(fromAddress); - } - } - -// --------------------------------------------------------- -// CCsMsgPluginUtility::CompareEntry -// -// --------------------------------------------------------- -TBool CCsMsgPluginUtility::CompareEntry( const TMsvEntry& aOldContext, - const TMsvEntry& aNewContext, TMsvId aDir ) const - { - if( (aOldContext.Id() == aNewContext.Id()) - && (aOldContext.Parent() == aNewContext.Parent()) - && (0 == aOldContext.iDescription.Compare(aNewContext.iDescription)) ) - { - // incase of outbox, check sending state also - if(aDir == KMsvGlobalOutBoxIndexEntryIdValue) - { - if(aOldContext.SendingState() == aNewContext.SendingState()) - return ETrue; - else - return EFalse; - } - return ETrue; - } - - return EFalse; - } - -// ---------------------------------------------------------------------------- -// CCsMsgPluginUtility::NameAndAddress -// Extracts name and address from the aMsvAddress -// which is of the form name
-// ---------------------------------------------------------------------------- -void CCsMsgPluginUtility::NameAndAddress( const TPtrC& aMsvAddress, - TPtrC& aName, - TPtrC& aAddress ) - { - // For address information separation (start) - const TUint KMsgSmsAddressStartChar ('<'); - - // For address information separation (end) - const TUint KMsgSmsAddressEndChar ('>'); - - TInt addressStart = aMsvAddress.LocateReverse( KMsgSmsAddressStartChar ); - TInt addressEnd = aMsvAddress.LocateReverse( KMsgSmsAddressEndChar ); - - if ( addressStart != KErrNotFound && addressEnd != KErrNotFound - && addressEnd > addressStart ) - { - // verified address, will be used as selected from contacts manager - aName.Set( aMsvAddress.Ptr(), addressStart ); - aAddress.Set( - aMsvAddress.Mid( addressStart + 1 ).Ptr(), - ( addressEnd - addressStart ) -1 ); - if ( !aAddress.Length()) - { - aAddress.Set( aName ); - aName.Set( KNullDesC ); // empty string - } - } - else - { - // unverified string, will be used as entered in the header field - aName.Set( KNullDesC ); // empty string - aAddress.Set( aMsvAddress.Ptr(), aMsvAddress.Length() ); // a whole string to address - } - - if ( aName.CompareF( aAddress ) == 0 ) - { - aName.Set( KNullDesC ); // empty string - } - } - -// --------------------------------------------------------- -// CCsMsgPluginUtility::PureAddress -// Extract the phone number for MMS -// --------------------------------------------------------- -// -TPtrC CCsMsgPluginUtility::PureAddress( const TDesC& aAddress ) - { - _LIT( KOpen, "<" ); - _LIT( KClose, ">" ); - - // syntax is : - // | - // - TInt firstPos = 0; - TInt lastPos = 0; - TInt length = aAddress.Length(); - TInt sepaLen1 = KOpen().Length(); - TInt sepaLen2 = KClose().Length(); - TInt firstSeparatorPosition = 0; - - while( firstSeparatorPosition >= 0 ) - { - firstSeparatorPosition = aAddress.Mid( firstPos ).Find( KOpen ); - if ( firstSeparatorPosition >= 0 ) - { - firstPos += firstSeparatorPosition + sepaLen1; - } - } - if ( firstPos <= 0 ) - { - // No alias - return aAddress; - } - - // Check if the second separator ends the address - TPtrC last = aAddress.Right( sepaLen2 ); - lastPos = length - sepaLen2; - - if ( !last.Compare( KClose ) ) - { - // Alias part found - if ( lastPos > firstPos ) - { - return aAddress.Mid( firstPos, lastPos - firstPos ); - } - } - // No alias defined - return the original string as pure address - // If syntax is weird, namely - // alias <> - // with nothing between the separators, we return the original string as is - return aAddress; - } - -//End of File