diff -r 000000000000 -r 094583676ce7 PECengine/JanitorPlugin2/Src/CPEngContact.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/JanitorPlugin2/Src/CPEngContact.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,227 @@ +/* +* 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: Container of one contact item. It includes contact ID and WV IDs +* +* +*/ + + + +// INCLUDE FILES +#include +#include +#include "CPEngContact.h" +#include "PEngContactIdTools.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPEngContact::CPEngContact +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPEngContact::CPEngContact( + TContactItemId& aContactId ) + : iWVIds( 1 ), // usually only one WV per contact + iContactItemId( aContactId ) + { + } + +// ----------------------------------------------------------------------------- +// CPEngContact::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPEngContact::ConstructL( + CContactItem* aContactItem ) + { + iWVIds.Reset(); + // if there is no WV ID field then the array of the WV IDs will be empty + CContactItemFieldSet& cardFieldSet = aContactItem->CardFields(); + + TInt fieldIndex ( cardFieldSet.FindNext( KPbkFieldIMAddress, + KPbkFieldWVIdMapping, + KContactFieldSetSearchAll ) ); + // now read all wv ID fields + while ( fieldIndex != KErrNotFound ) + { + CContactTextField* textField = ( cardFieldSet[fieldIndex] ).TextStorage(); // does not take ownership + // read contact only if it's length is more then 0 + TPtrC wvId ( textField->Text() ); + if ( wvId.Length() != 0 ) + { + // if it leaves, it is cause of KErrNoMemory + AddContactIdToArrayL( iWVIds, wvId ); + } + // +1 is to start from next field + fieldIndex = cardFieldSet.FindNext( KPbkFieldIMAddress, KPbkFieldWVIdMapping, fieldIndex + 1 ); + } + } + +// ----------------------------------------------------------------------------- +// CPEngContact::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngContact* CPEngContact::NewL( + CContactItem* aContactItem ) + { + CPEngContact* self = NewLC( aContactItem ); + + CleanupStack::Pop( self ); // self + + return self; + } + +// ----------------------------------------------------------------------------- +// CPEngContact::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngContact* CPEngContact::NewLC( + CContactItem* aContactItem ) + { + TContactItemId contactID( aContactItem->Id() ); + CPEngContact* self = new( ELeave ) CPEngContact( contactID ); + + CleanupStack::PushL( self ); + self->ConstructL( aContactItem ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CPEngContact::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngContact* CPEngContact::NewL( + TContactItemId& aContactID ) + { + CPEngContact* self = new( ELeave ) CPEngContact( aContactID ); + + // no need to call ConstructL + + return self; + } + +// Destructor +CPEngContact::~CPEngContact() + { + iWVIds.Reset(); + } +// ============================================================================= +// ===============Function of base class ======================================= +// ============================================================================= + +// ----------------------------------------------------------------------------- +// CPEngContact::ContactId() +// Return contact Item ID +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TContactItemId CPEngContact::ContactId() const + { + return iContactItemId; + } + +// ----------------------------------------------------------------------------- +// CPEngContact::WvIds() +// Get List of the WV IDs +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +const MDesCArray& CPEngContact::WvIds() const + { + return iWVIds; + } + +// ----------------------------------------------------------------------------- +// CPEngContact::Compare() +// Compare two Contacts if they match, based on Contact Item ID +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPEngContact::Compare( + const CPEngContact& aContactA, + const CPEngContact& aContactB ) + { + return aContactA.Compare( aContactB ); + } + +// ----------------------------------------------------------------------------- +// CPEngContact::CompareContactID() +// Compare two Contacts if they match, based on Contact Item ID +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPEngContact::Compare( + const CPEngContact& aContact ) const + { + if ( aContact.ContactId() == iContactItemId ) + { + return KErrNone; + } + if ( aContact.ContactId() < iContactItemId ) + { + return 1; // does not match + } + return -1; // does not match + } + +// ----------------------------------------------------------------------------- +// CPEngContact::ValidateWVId() +// Search if WV Id is presented in the contact +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CPEngContact::ValidateWVId( + const TDesC& aWVId ) const + { + return !( KErrNotFound == FindContactIdInArray( iWVIds, aWVId ) ); + } + +// ----------------------------------------------------------------------------- +// CPEngContact::WVIdsCount() +// Count of the WV IDs in the contact +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPEngContact::WVIdsCount() + { + return iWVIds.Count(); + } + +// ----------------------------------------------------------------------------- +// CPEngContact::UpdateContactL() +// Update contact from the contact db +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPEngContact::UpdateContactL( + CContactDatabase& aContactDatabase ) + { + // update content of the Contact from the database + CContactItem* contactItem = + aContactDatabase.ReadMinimalContactLC( iContactItemId ); + + iWVIds.Reset(); + ConstructL( contactItem ); + CleanupStack::PopAndDestroy(); // contactItem + } + + +// End of File