diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Src/CCAPCUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiprocess/Src/CCAPCUtils.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,176 @@ +/* +* Copyright (c) 2004-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 IM modules. +* +*/ + + +#include "CCAPCUtils.h" +#include "CCAStorageManagerFactory.h" +#include "MCAStoredContacts.h" +#include "ChatDebugPrint.h" +#include "impsbuilddefinitions.h" + +#include +#include +#include "MCAError.h" +#include "CCAProcessManagerFactory.h" +#include "MCAProcessManager.h" +#include "CCAEngine.h" +#include "MCAStoredContact.h" +#include "CAUtils.h" + +// general colon needed in various places +_LIT( KColon, ":" ); + +// general slash needed in various places +_LIT( KSlash, "/" ); + +// needed to skip domains in domain-neutral comparison +_LIT( KAt, "@" ); + +_LIT( KSpace, " " ); + + +// ----------------------------------------------------------------------------- +// CCAPCUtils::DisplayId +// ----------------------------------------------------------------------------- +// + + +EXPORT_C TPtrC CCAPCUtils::DisplayId( const TDesC& aId, TBool aListHiding ) + { + TPtrC ret( aId ); + + MCAStoredContacts* contacts = NULL; + TRAPD( err, contacts = CCAStorageManagerFactory::ContactListInterfaceL() ); + if ( err != KErrNone || !contacts ) + { + // some error, don't modify + CHAT_DP_FUNC_DP( "DisplayId", "Got some error, not hiding" ); + return ret; + } + + // if we've branded the feature out, don't modify anything + if ( contacts->WVHiding() || contacts->WVHidingPrefixOnly() ) + { + // locate ":" for userid, groupid. + // locate "/" for list id. + TInt pos = aId.FindC( aListHiding ? KSlash : KColon ); + + if ( ( pos != KErrNotFound ) && ( pos != aId.Length() - 1 ) ) + { + // contains the special character, and it is not the last char + // remove everything before the special char (including the char) + ret.Set( aId.Mid( pos + 1 ) ); + } + if ( contacts->WVHiding() || aListHiding ) + { + // remove also the domain part + TInt domainPos = ret.FindC( KAt ); + if ( ( domainPos != KErrNotFound ) && ( domainPos != 0 ) ) + { + ret.Set( ret.Mid( 0, domainPos ) ); + } + } + } + + return ret; + } + +// ----------------------------------------------------------------------------- +// CCAPCUtils::CreateBufLC +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC* CCAPCUtils::CreateBufLC( const CDesCArray& aArray, TBool aDisplayId /*= EFalse*/ ) + { + // calculate required space for the combined buffer + TInt bufLength( 0 ); + TInt count( aArray.MdcaCount() ); + TInt i( 0 ); + for ( ; i < count; ++i ) + { + bufLength += aArray.MdcaPoint( i ).Length() + KSpace().Length(); + } + + // allocate the buffer and fill it up + HBufC* buf = HBufC::NewLC( bufLength ); + TPtr bufPtr( buf->Des() ); + for ( i = 0; i < count; ++i ) + { + TPtrC ptr( aArray.MdcaPoint( i ) ); + if ( aDisplayId ) + { + ptr.Set( DisplayId( ptr ) ); + } + + bufPtr.Append( ptr ); + bufPtr.Append( KSpace ); + } + return buf; + } +// ----------------------------------------------------------------------------- +// CCAPCUtils::PartialSucessCountL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + +EXPORT_C TInt CCAPCUtils::PartialSucessCountL() + { + MCAProcessManager *processManager = CCAProcessManagerFactory::InstanceL()->GetProcessManager(); + CCAEngine* engine = processManager->GetEngine(); + const RPointerArray* errorArray = engine->PartialSuccessData(); + return errorArray->Count(); + } +// ----------------------------------------------------------------------------- +// CCAPCUtils::GetErrorCodeL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + +EXPORT_C TInt CCAPCUtils::GetErrorCodeL( TInt aIndex ) + { + MCAProcessManager *processManager = CCAProcessManagerFactory::InstanceL()->GetProcessManager(); + CCAEngine* engine = processManager->GetEngine(); + const RPointerArray* errorArray = engine->PartialSuccessData(); + return ( *errorArray )[ aIndex ]->Code(); + } + +// ----------------------------------------------------------------------------- +// CCAPCUtils::RemoveDuplicateWVIds +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C void CCAPCUtils::RemoveDuplicateWVIds( CDesCArray& aArray ) + { + TInt count = aArray.Count(); + + // Go through whole array + for ( TInt i = 0; i < count; i++ ) + { + const TDesC& curId = aArray[i]; + + for ( TInt j = i + 1; j < count; j++ ) + { + if ( CAUtils::NeutralCompare( curId, aArray[j] ) == 0 ) + { + // Duplicate found, remove from array + aArray.Delete( j ); + count = aArray.Count(); + j--; // decrease by one to keep index the same in next for-loop + } + } + } + }