diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpststorage/src/vimpststorageutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpststorage/src/vimpststorageutils.cpp Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2008 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 storage modules. +* +*/ + + +#include "vimpststorageutils.h" +#include "cvimpststoragemanagerfactory.h" +#include "mvimpststorageserviceview.h" + +#include "vimpstdebugtrace.h" +#include "vimpstbuilddefinitions.h" + +#include +#include + +// needed to skip prefixes in domain-neutral comparison (TUint version) +const TUint KColonUInt( ':' ); + +// needed to skip domains in domain-neutral comparison (TUint version) +const TUint KAtUInt( '@' ); + +// "test character identity and accents, ignore case" +const TInt KCollationLevel = 1; + + + +// defines how far we are going to search for the protocol part in user id +const TInt KMaxLengthSearchProtPart = 4; + +// ----------------------------------------------------------------------------- +// VIMPSTStorageUtils::NeutralCompare +// ----------------------------------------------------------------------------- +// +TInt VIMPSTStorageUtils::NeutralCompare( const TDesC& aId1, + const TDesC& aId2, TBool aDomainNeutral ) + { + // points to user part of id + TPtrC ptrId1( aId1 ); + TPtrC ptrId2( aId2 ); + + // Reduce looking for protocol part only to beginning of the WVID and + // skip protocol part ("anything:") in the beginning of the WVID + TInt colonPos1 = aId1.Left( KMaxLengthSearchProtPart ).Locate( KColonUInt ); + + // first id + if ( ( KErrNotFound != colonPos1 ) && ( aId1.Length() -1 != colonPos1 ) ) + { + // contains ":", and it is not the last char + ptrId1.Set( aId1.Mid( colonPos1 + 1 ) ); + } + + TInt colonPos2 = aId2.Left( KMaxLengthSearchProtPart ).Locate( KColonUInt ); + + // second id + if ( ( KErrNotFound != colonPos2 ) && ( aId2.Length() -1 != colonPos2 ) ) + { + // contains ":", and it is not the last char + ptrId2.Set( aId2.Mid( colonPos2 + 1 ) ); + } + + // find out if we have domains in the ids + TInt domainPos1( ptrId1.Locate( KAtUInt ) ); + TInt domainPos2( ptrId2.Locate( KAtUInt ) ); + + TBool domainIn1( KErrNotFound != domainPos1 ); + TBool domainIn2( KErrNotFound != domainPos2 ); + + // points to domains in the neutral id + TPtrC ptrDom1( KNullDesC ); + TPtrC ptrDom2( KNullDesC ); + + // points to user parts in the neutral id + TPtrC ptrUid1( ptrId1 ); + TPtrC ptrUid2( ptrId2 ); + + // separate user id parts and domain parts + if ( domainIn1 ) + { + ptrDom1.Set( ptrId1.Mid( domainPos1 + 1) ); + ptrUid1.Set( ptrId1.Mid( 0, domainPos1 ) ); + } + + if ( domainIn2 ) + { + ptrDom2.Set( ptrId2.Mid( domainPos2 + 1) ); + ptrUid2.Set( ptrId2.Mid( 0, domainPos2 ) ); + } + + // Create custom collation method to ignore punctuations + // index 0 gets the default method + TCollationMethod collation = + *Mem::CollationMethodByIndex( 0 ); + collation.iFlags |= TCollationMethod::EIgnoreNone; + + // domains are compared only when it is really needed + // check if userid part is the same in both ids + + TInt idResult = ptrUid1.Compare( ptrUid2); + + if( idResult != 0 ) + { + return idResult; + } + + // id part is same, we have to compare domain + + // If domain comparison is neutral and one id is without domain + // -> Domains are same. Other situation domainResult stays valid. + if( aDomainNeutral && ( domainIn1 ^ domainIn2 ) ) + { + return 0; + } + else + { + return ptrDom1.CompareC( ptrDom2, KCollationLevel, &collation ); + } + } + +// ----------------------------------------------------------------------------- +// VIMPSTStorageUtils::DisplayId +// ----------------------------------------------------------------------------- +// +TPtrC VIMPSTStorageUtils::DisplayId( const TDesC& aId, TBool /*aListHiding*/ ) + { + TPtrC ret( aId ); + + return ret; + } + + +// End of file