--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/ListLibrary2/ContactListSrc/CPEngContactListModChangeMonitor.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,378 @@
+/*
+* 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: Monitors contact list changes.
+*
+*/
+
+// INCLUDE FILES
+#include "PEngContactIdsTools.h"
+#include "CPEngContactListModChangeMonitor.h"
+#include "MPEngContactListModStore.h"
+#include "PEngListLibraryPanics.h"
+#include <s32strm.h>
+#include <e32std.h>
+
+
+// ============================= LOCAL FUNCTIONS ==============================
+/**
+ * Helper to grow RBuf buffer if needed.
+ */
+void GrowBufferIfRequiredL( RBuf& aBuffer, TInt aRequiredLength )
+ {
+ if ( aRequiredLength > aBuffer.MaxLength() )
+ {
+ aBuffer.ReAllocL( aRequiredLength );
+ }
+
+ aBuffer.Zero();
+ }
+
+
+//Default granurality for change monitor arrays
+const TInt KChangeMonitorGranurality = 5;
+
+//Byte size needed to stream TInt type data => 4 bytes
+const TInt KIntStreamBytes = 4;
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::CPEngContactListModChangeMonitor()
+// -----------------------------------------------------------------------------
+//
+CPEngContactListModChangeMonitor::CPEngContactListModChangeMonitor(
+ MPEngContactListModStore& aStoreEntry )
+ : iAddedContactIds( KChangeMonitorGranurality ),
+ iRemovedContactIds( KChangeMonitorGranurality ),
+ iStoreEntry( aStoreEntry )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::NewL()
+// -----------------------------------------------------------------------------
+//
+CPEngContactListModChangeMonitor* CPEngContactListModChangeMonitor::NewL(
+ MPEngContactListModStore& aStoreEntry )
+ {
+ CPEngContactListModChangeMonitor* self =
+ new ( ELeave ) CPEngContactListModChangeMonitor( aStoreEntry );
+ return self;
+ }
+
+
+
+// Destructor
+CPEngContactListModChangeMonitor::~CPEngContactListModChangeMonitor()
+
+ {
+ iAddedContactIds.Reset();
+ iRemovedContactIds.Reset();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::AddedContactIds()
+// -----------------------------------------------------------------------------
+//
+const MDesCArray& CPEngContactListModChangeMonitor::AddedContactIds() const
+ {
+ return iAddedContactIds;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::RemovedContactIds()
+// -----------------------------------------------------------------------------
+//
+const MDesCArray& CPEngContactListModChangeMonitor::RemovedContactIds() const
+ {
+ return iRemovedContactIds;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::CountAddedContactIds()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngContactListModChangeMonitor::CountAddedContactIds() const
+ {
+ return iAddedContactIds.Count();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::CountRemovedContactIds()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngContactListModChangeMonitor::CountRemovedContactIds() const
+ {
+ return iRemovedContactIds.Count();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::FindContactIdInAdded()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngContactListModChangeMonitor::FindContactIdInAdded(
+ const TDesC& aContactId,
+ const TDesC& aUserDomain ) const
+ {
+ return NContactIdsTools::FindContactIdInArray( iAddedContactIds,
+ aContactId,
+ aUserDomain );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::FindContactIdInRemoved()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngContactListModChangeMonitor::FindContactIdInRemoved(
+ const TDesC& aContactId,
+ const TDesC& aUserDomain ) const
+ {
+ return NContactIdsTools::FindContactIdInArray( iRemovedContactIds,
+ aContactId,
+ aUserDomain );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::ExternalizeL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListModChangeMonitor::ExternalizeArrayL(
+ RWriteStream& aStream ) const
+ {
+ // first list of added WV IDs
+ TInt count( iAddedContactIds.MdcaCount() );
+ aStream.WriteInt32L( count );
+ for ( TInt i( 0 ); i < count; i++ )
+ {
+ aStream.WriteInt32L( iAddedContactIds.MdcaPoint( i ).Length() );
+ aStream.WriteL( iAddedContactIds.MdcaPoint( i ) );
+ }
+
+
+ // now store removed WV IDs
+ count = iRemovedContactIds.Count();
+ aStream.WriteInt32L( count );
+ for ( TInt ii( 0 ) ; ii < count ; ii++ )
+ {
+ aStream.WriteInt32L( iRemovedContactIds.MdcaPoint( ii ).Length() );
+ aStream.WriteL( iRemovedContactIds.MdcaPoint( ii ) );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::InternalizeL()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListModChangeMonitor::InternalizeArrayL(
+ RReadStream& aStream )
+ {
+ iAddedContactIds.Reset();
+ iRemovedContactIds.Reset();
+ TInt& storeSize = iStoreEntry.StoreSizeCount();
+ storeSize += KIntStreamBytes * 2 ; // two counts of the arrays
+
+
+ RBuf buffer;
+ buffer.CleanupClosePushL();
+
+
+ // internalize array of Added WV IDs
+ TInt count ( aStream.ReadInt32L() );
+ for ( TInt x ( 0 ); x < count; x++ )
+ {
+ TInt size = aStream.ReadInt32L();
+ GrowBufferIfRequiredL( buffer, size );
+ aStream.ReadL( buffer, size );
+
+ // array was stored in order
+ iAddedContactIds.AppendL( buffer );
+ storeSize += size + KIntStreamBytes; // length
+ }
+
+
+ // internalize array of Added WV IDs
+ count = aStream.ReadInt32L();
+ for ( TInt y( 0 ) ; y < count; y++ )
+ {
+ TInt size = aStream.ReadInt32L();
+ GrowBufferIfRequiredL( buffer, size );
+ aStream.ReadL( buffer, size );
+
+ iRemovedContactIds.AppendL( buffer );
+ storeSize += size + KIntStreamBytes; // length
+ }
+
+
+ CleanupStack::PopAndDestroy(); // buffer
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::InsertAddedContactIdL()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngContactListModChangeMonitor::InsertAddedContactIdL(
+ const TDesC& aContactId )
+ {
+ RemoveRemovedContactId( aContactId );
+
+ // insert WV ID into the array
+ TInt position( NContactIdsTools::AddContactIdToArrayL( iAddedContactIds,
+ aContactId ) );
+
+ // was WV already existing
+ if ( position == KErrAlreadyExists )
+ {
+ return NContactIdsTools::FindContactIdInArray( iAddedContactIds,
+ aContactId );
+ }
+ else
+ {
+ // added successfully
+ TInt& entrySize = iStoreEntry.StoreSizeCount();
+ entrySize += aContactId.Size() + KIntStreamBytes; // length
+ return position;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::RemoveAddedContactId()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListModChangeMonitor::RemoveAddedContactId(
+ const TDesC& aContactId )
+ {
+ TInt err = NContactIdsTools::RemoveContactIdFromArray( iAddedContactIds,
+ aContactId );
+ if ( err == KErrNone )
+ {
+ TInt& entrySize = iStoreEntry.StoreSizeCount();
+ entrySize -= aContactId.Size() - KIntStreamBytes; // length
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::ResetAddedContactId()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListModChangeMonitor::ResetAddedContactId()
+ {
+ iAddedContactIds.Reset();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::InsertRemovedContactIdL()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngContactListModChangeMonitor::InsertRemovedContactIdL(
+ const TDesC& aContactId )
+ {
+ RemoveAddedContactId( aContactId );
+
+ // insert WV ID into the array
+ TInt position = NContactIdsTools::AddContactIdToArrayL( iRemovedContactIds,
+ aContactId );
+ // was WV already existing
+ if ( position == KErrAlreadyExists )
+ {
+ return NContactIdsTools::FindContactIdInArray( iRemovedContactIds,
+ aContactId );
+ }
+
+ else
+ {
+ // added successfully
+ TInt& entrySize = iStoreEntry.StoreSizeCount();
+ entrySize += aContactId.Size() + KIntStreamBytes; // length
+ return position;
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::RemoveRemovedContactId()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListModChangeMonitor::RemoveRemovedContactId(
+ const TDesC& aContactId )
+ {
+ TInt err = NContactIdsTools::RemoveContactIdFromArray( iRemovedContactIds,
+ aContactId );
+ if ( err == KErrNone )
+ {
+ TInt& entrySize = iStoreEntry.StoreSizeCount();
+ entrySize -= aContactId.Size() - KIntStreamBytes;// length
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::ResetRemovedContactIds()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListModChangeMonitor::ResetRemovedContactIds()
+ {
+ iRemovedContactIds.Reset();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngContactListModChangeMonitor::Reset()
+// -----------------------------------------------------------------------------
+//
+void CPEngContactListModChangeMonitor::Reset()
+ {
+ iAddedContactIds.Reset();
+ iRemovedContactIds.Reset();
+ }
+
+
+// End of File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+