wvuing/wvuiprocess/Src/CCAPCUtils.cpp
changeset 0 094583676ce7
--- /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 <EscapeUtils.h>
+#include <collate.h>
+#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<MCAError>* 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<MCAError>* 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
+                }
+            }
+        }
+    }