--- /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 <e32std.h>
+#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