diff -r 000000000000 -r 094583676ce7 PECengine/JanitorPlugin2/Src/PEngContactIdTools.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/JanitorPlugin2/Src/PEngContactIdTools.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,152 @@ +/* +* 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: WV ID handling tools +* +*/ + +// INCLUDE FILES + +#include +#include "PEngContactIdTools.h" + +// CONSTANTS +_LIT( KPengWVIDPrefix, "wv:" ); +const TInt KPengWVIDPrefixLength( 3 ); +_LIT( KCharAdd, "@" ); + +// ----------------------------------------------------------------------------- +// FindContactIdInArray() +// Find Contact Id in the aray +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +GLREF_C TInt FindContactIdInArray( + const MDesCArray& aArray, + const TDesC& aId ) + { + TInt count ( aArray.MdcaCount() ); + for ( TInt x( 0 ) ; x < count ; x++ ) + { + TInt err ( CompareContactIds( aArray.MdcaPoint( x ), aId ) ); + if ( err == KErrNone ) + { + return x; + } + if ( err > 0 ) // no sense to look further in the array + { + return KErrNotFound; + } + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// AddContactIToArrayL() +// Add contact Id to the array of the contact Ids +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +GLREF_C TInt AddContactIdToArrayL( + CDesCArray& aArray, + const TDesC& aId ) + { + // insert the id in sequence + TInt count ( aArray.MdcaCount() ); + for ( TInt x( 0 ) ; x < count ; x++ ) + { + TInt err ( CompareContactIds( aArray.MdcaPoint( x ), aId ) ); + if ( err > 0 ) + { + aArray.InsertL( x, aId ); + return x; + } + if ( err == 0 ) + { + return KErrAlreadyExists; + } + // go for another loop + } + // was not inserted, then add it to the end of the array + aArray.AppendL( aId ); + return count; + } + +// ----------------------------------------------------------------------------- +// CompareContactIs() +// Compare two contact Ids +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +GLREF_C TInt CompareContactIds( + const TDesC& aId1, + const TDesC& aId2 ) + { + // get name without wv: part on the beginning + TPtrC id1( aId1 ); + TPtrC id2( aId2 ); + + if ( aId1.Left( KPengWVIDPrefixLength ).CompareF( KPengWVIDPrefix ) == KErrNone ) + { + id1.Set( aId1.Mid( KPengWVIDPrefixLength ) ); + } + + if ( aId2.Left( KPengWVIDPrefixLength ).CompareF( KPengWVIDPrefix ) == KErrNone ) + { + id2.Set( aId2.Mid( KPengWVIDPrefixLength ) ); + } + + // fix 21.04.2005 OK: + // check how it goes with the domains, if they are different + // no match, if one missing and base id is same, then same ids + TInt err ( id1.CompareF( id2 ) ); + + if ( err == KErrNone ) + { + return err; + } + + // try to compare them without domain + // if home domain info is missing + // or wv id domain is same as home one, remove it from the wv id + TInt offset1( id1.Find( KCharAdd ) ); + TInt offset2( id2.Find( KCharAdd ) ); + + // if both are with domain, then they are not same + if ( ( offset1 != KErrNotFound ) && ( offset2 != KErrNotFound ) ) + { + return err; + } + // remove domains from wv id1 + TInt domainCount( 0 ); + if ( KErrNotFound != offset1 ) + { + id1.Set( id1.Left( offset1 ) ); // cause we need length + domainCount++; + } + // remove domains from wv id2 + if ( KErrNotFound != offset2 ) + { + id2.Set( id2.Left( offset2 ) ); // cause we need length + domainCount++; + } + + // if none of then or both have domain, no need to compare + if ( ( !domainCount ) || ( domainCount == 2 ) ) + { + return err; + } + return id1.CompareF( id2 ); + } + +// End of File