phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp
changeset 21 92ab7f8d0eab
parent 4 c84cf270c54f
child 22 6bb1b21d2484
--- a/phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp	Tue Feb 02 00:10:04 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,523 +0,0 @@
-/*
-* Copyright (c) 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:  Contact manager
-*
-*/
-
-#include <CVPbkContactManager.h>
-#include <CVPbkContactStoreUriArray.h>
-#include <TVPbkContactStoreUriPtr.h>
-#include <MVPbkContactStoreList.h>
-#include <MPbk2ContactNameFormatter.h>
-#include <CPbk2SortOrderManager.h>
-#include <Pbk2ContactNameFormatterFactory.h>
-#include <CVPbkContactIdConverter.h>
-#include <MVPbkContactStore.h>
-#include <MVPbkContactLink.h>
-#include <CVPbkContactLinkArray.h>
-#include <MVPbkContactAttributeManager.h>
-#include <CVPbkSpeedDialAttribute.h>
-#include <CPbk2ImageManager.h>
-#include <MVPbkStoreContact.h>
-#include <VPbkContactStoreUris.h>
-#include <MVPbkFieldType.h>
-#include <CVPbkFieldTypeRefsList.h>
-#include <VPbkEng.rsg>
-#include <MVPbkContactStoreProperties.h>
-#include <CVPbkFieldTypeSelector.h>
-#include <VPbkContactViewFilterBuilder.h>
-#include <talogger.h>
-
-#include "cphcntcontactmatchstrategy.h"
-#include "CPhCntContactManager.h"
-#include "CPhCntContact.h"
-#include "cphcntcontactstoreuris.h"
-#include "mphcntstoreloaderobserver.h"
-
-// ---------------------------------------------------------------------------
-// Static constructor
-// ---------------------------------------------------------------------------
-//
-CPhCntContactManager* CPhCntContactManager::NewL()
-    {
-    CPhCntContactManager* self = new( ELeave )CPhCntContactManager();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CPhCntContactManager::~CPhCntContactManager()
-    {
-    delete iVoipFieldTypeList;
-    delete iImageManager;
-    delete iSpeedDialAttribute;
-    delete iContactIdConverter;
-    delete iContactNameFormatter;
-    delete iSortOrder;
-    if( iContactManager )
-        {
-        TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) );
-        }
-    delete iContactManager;
-    delete iContactStoreUris;
-    }
-
-// ---------------------------------------------------------------------------
-// Gives contact manager.
-// ---------------------------------------------------------------------------
-//
-CVPbkContactManager& CPhCntContactManager::ContactManager() const
-    {
-    return *iContactManager;
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Retrieves contact from contact stores.
-// ---------------------------------------------------------------------------
-//
-MVPbkContactOperationBase* CPhCntContactManager::RetrieveContactL(
-    const MVPbkContactLink& aLink,
-    MVPbkSingleContactOperationObserver& aObserver)
-    {
-    return iContactManager->RetrieveContactL( aLink, aObserver );
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Gives contact stores.
-// ---------------------------------------------------------------------------
-//
-MVPbkContactStoreList& CPhCntContactManager::ContactStoresL() const
-    {
-    return iContactManager->ContactStoresL();
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Creates contact match strategy.
-// ---------------------------------------------------------------------------
-//
-MPhCntContactMatchStrategy* CPhCntContactManager::CreateContactMatchStrategyL(
-    MVPbkContactFindObserver& aObserver,
-    TBool aRemoveDuplicates )
-    {
-    return CPhCntContactMatchStrategy::NewL(
-        *iContactManager,
-        *iContactStoreUris,
-        aObserver,
-        aRemoveDuplicates ?
-        CVPbkPhoneNumberMatchStrategy::EVPbkDuplicatedContactsMatchFlag :
-        CVPbkPhoneNumberMatchStrategy::EVPbkMatchFlagsNone );
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Converts contact ids to contact links.
-// ---------------------------------------------------------------------------
-//
-MVPbkContactLinkArray* CPhCntContactManager::ConvertContactIdsToLinksL(
-        const CArrayFix<TContactItemId>& aContactId ) const
-    {
-    CVPbkContactLinkArray* contactLinks = CVPbkContactLinkArray::NewLC();
-
-    const TInt contactIdCount( aContactId.Count() );
-    for( TInt i = 0; i < contactIdCount; i++ )
-        {
-        MVPbkContactLink* link =
-            ConvertContactIdToLinkL( aContactId.At( i ) );
-
-        if( link )
-            {
-            contactLinks->AppendL( link );
-            }
-        }
-    CleanupStack::Pop( contactLinks );
-    return contactLinks;
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Converts contact id to contact link.
-// ---------------------------------------------------------------------------
-//
-MVPbkContactLink* CPhCntContactManager::ConvertContactIdToLinkL(
-    TContactItemId aContactId ) const
-    {
-    MVPbkContactLink* link = NULL;
-    if( aContactId != KNullContactId )
-        {
-        link = iContactIdConverter->IdentifierToLinkLC( aContactId );
-        CleanupStack::Pop(); // link
-        }
-    return link;
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Converts contact link to contact id.
-// ---------------------------------------------------------------------------
-//
-TContactItemId CPhCntContactManager::ConvertContactLinkToContactId(
-    const MVPbkContactLink& aContactLink ) const
-    {
-    return iContactIdConverter->LinkToIdentifier( aContactLink );
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Converts contact link descriptor to contact link.
-// ---------------------------------------------------------------------------
-//
-MVPbkContactLink* CPhCntContactManager::ConvertDescriptorToLinkL(
-    const TDesC8& aPackedLink ) const
-    {
-    MVPbkContactLink* link = NULL;
-    if( aPackedLink.Length() > 0 )
-        {
-        MVPbkContactLinkArray* links =
-            iContactManager->CreateLinksLC( aPackedLink );
-        if( links && links->Count() > 0 )
-            {
-            link = links->At( 0 ).CloneLC();
-            CleanupStack::Pop(); // Link from CloneLC
-            }
-        CleanupStack::PopAndDestroy(); // Links
-        }
-    return link;
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Retrieves speed dial contact link.
-// ---------------------------------------------------------------------------
-//
-MVPbkContactOperationBase* CPhCntContactManager::RetrieveSpeedDialContactLinkL(
-        const TInt aSpeedDialPosition,
-        MVPbkContactFindObserver& aObserver )
-    {
-    MVPbkContactAttributeManager& attributeManager =
-        iContactManager->ContactAttributeManagerL();
-
-    iSpeedDialAttribute->SetIndex( aSpeedDialPosition );
-
-
-    return attributeManager.ListContactsL(
-                *iSpeedDialAttribute,
-                aObserver );
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Indicates whether the field had a speed dial attribute set.
-// ---------------------------------------------------------------------------
-//
-TBool CPhCntContactManager::HasSpeedDialL(
-		const TInt aSpeedDialPosition,
-		const MVPbkStoreContactField& aField )
-    {
-    TBool result = EFalse;
-
-    MVPbkContactAttributeManager& attributeManager =
-        iContactManager->ContactAttributeManagerL();
-
-	CVPbkSpeedDialAttribute* attr = CVPbkSpeedDialAttribute::NewL( aSpeedDialPosition );
-    CleanupStack::PushL( attr );
-
-    result = attributeManager.HasFieldAttributeL(
-    			*attr,
-    			aField );
-
-	CleanupStack::PopAndDestroy( attr );
-
-	return result;
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Retrieves contacts image.
-// ---------------------------------------------------------------------------
-//
-MPbk2ImageOperation* CPhCntContactManager::RetrieveImageL(
-    MVPbkStoreContact& aStoreContact,
-    const MVPbkFieldType& aFieldType,
-    MPbk2ImageGetObserver& aObserver )
-    {
-
-    return iImageManager->GetImageAsyncL(
-        	NULL,
-            aStoreContact,
-            aFieldType,
-            aObserver );
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Creates field type selector.
-// ---------------------------------------------------------------------------
-//
-CVPbkFieldTypeSelector* CPhCntContactManager::CreateFieldTypeSelectorL() const
-    {
-    return CVPbkFieldTypeSelector::NewL( iContactManager->FieldTypes() );
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Appends filter to selector.
-// ---------------------------------------------------------------------------
-//
-void CPhCntContactManager::AppendFilterToSelectorL(
-    CVPbkFieldTypeSelector& aSelector,
-    TVPbkContactViewFilter aFilter )
-    {
-    VPbkContactViewFilterBuilder::BuildContactViewFilterL(
-		aSelector,
-		aFilter,
-		*iContactManager );
-    }
-
-
-//-----------------------------------------------------------------------------
-// From base class MPhCntContactFinder.
-// Loads the contact store specified in the given contact link.
-//-----------------------------------------------------------------------------
-//
-void CPhCntContactManager::LoadContactStoreL( const TDesC8& aContactLink,
-        MPhCntStoreLoaderObserver& aObserver )
-    {
-    __ASSERT_ALWAYS( NULL == iStoreLoaderObserver, User::Leave( KErrInUse ) );
-
-    MVPbkContactLink* link = ConvertDescriptorToLinkL( aContactLink );
-
-    // Link conversion has a side effect of loading store plug-in, but
-    // make sure that store really gets loaded.
-    const TVPbkContactStoreUriPtr uri
-        = link->ContactStore().StoreProperties().Uri();
-    delete link;
-    iContactManager->LoadContactStoreL( uri );
-
-    // Start asynchronous opening of the store.
-    MVPbkContactStore* store = iContactManager->ContactStoresL().Find( uri );
-    __ASSERT_ALWAYS( NULL != store, User::Leave( KErrNotFound ) );
-
-    store->OpenL( *this );
-    iStoreLoaderObserver = &aObserver;
-    }
-
-//-----------------------------------------------------------------------------
-// From base class MPhCntContactManager.
-//-----------------------------------------------------------------------------
-//
-CPhCntContactStoreUris& CPhCntContactManager::ContactStoreUrisL()
-    {
-    TEFLOGSTRING( KTAOBJECT, "CNT CPhCntContactManager::ContactStoreListL" );
-    return *iContactStoreUris;
-    }
-
-//-----------------------------------------------------------------------------
-// From base class MPhCntContactFinder.
-// Constructs fieldtype list, which identifies voip fields and
-// performs the find for voip fields.
-//-----------------------------------------------------------------------------
-//
-MVPbkContactOperationBase* CPhCntContactManager::FindVoipContactsL(
-    const TDesC& aSipURI,
-    MVPbkContactFindObserver& aObserver ) const
-    {
-    return iContactManager->FindL( aSipURI, *iVoipFieldTypeList, aObserver );
-    }
-
-// ---------------------------------------------------------------------------
-// From MPhCntContactManager
-// Gives contact name formatter.
-// ---------------------------------------------------------------------------
-//
-MPbk2ContactNameFormatter& CPhCntContactManager::ContactNameFormatter()
-    {
-    return *iContactNameFormatter;
-    }
-
-// ---------------------------------------------------------------------------
-// From MVPbkContactStoreListObserver
-// Indication that contact stores has been opened.
-// ---------------------------------------------------------------------------
-//
-void CPhCntContactManager::OpenComplete()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// From MVPbkContactStoreListObserver
-// Indication that contact store has been opened.
-// ---------------------------------------------------------------------------
-//
-void CPhCntContactManager::StoreReady(
-    MVPbkContactStore& aContactStore )
-    {
-    TVPbkContactStoreUriPtr uri = aContactStore.StoreProperties().Uri();
-
-    if ( iStoreLoaderObserver
-            && !iContactStoreUris->ContactStores().IsIncluded( uri ) )
-        {
-        TRAP_IGNORE( iContactStoreUris->AddContactStoreL( uri ) );
-
-        iStoreLoaderObserver->ContactStoreLoadingCompleted(
-            &aContactStore, KErrNone );
-        iStoreLoaderObserver = NULL;
-        }
-    iContactStoreUris->StoreReady( uri );
-    }
-
-// ---------------------------------------------------------------------------
-// From MVPbkContactStoreListObserver
-// Indication that contact store has become unavailable.
-// ---------------------------------------------------------------------------
-//
-void CPhCntContactManager::StoreUnavailable(
-    MVPbkContactStore& aContactStore,
-    TInt /*aReason*/ )
-    {
-    TVPbkContactStoreUriPtr uri = aContactStore.StoreProperties().Uri();
-    iContactStoreUris->StoreUnavailable( uri );
-    }
-
-// ---------------------------------------------------------------------------
-// From MVPbkContactStoreListObserver
-// Contact store event.
-// ---------------------------------------------------------------------------
-//
-void CPhCntContactManager::HandleStoreEventL(
-    MVPbkContactStore& aContactStore,
-    TVPbkContactStoreEvent aStoreEvent )
-    {
-    switch( aStoreEvent.iEventType )
-        {
-        case TVPbkContactStoreEvent::EStoreRestoreBeginning:
-        case TVPbkContactStoreEvent::EStoreBackupBeginning:
-            StoreUnavailable( aContactStore, KErrNone );
-            break;
-
-        case TVPbkContactStoreEvent::EStoreBackupRestoreCompleted:
-            StoreReady( aContactStore );
-            break;
-        default:
-            break;
-        }
-    }
-
-//-----------------------------------------------------------------------------
-// From base class MPhCntContactFinder.
-// Loads the contact store specified with URI.
-//-----------------------------------------------------------------------------
-void CPhCntContactManager::LoadContactStoreWithUriL(
-    const TDesC& aStoreUri,
-    MPhCntStoreLoaderObserver& aObserver )
-    {
-    __ASSERT_ALWAYS( NULL == iStoreLoaderObserver, User::Leave( KErrInUse ) );
-    iContactManager->LoadContactStoreL( aStoreUri );
-
-    // Start asynchronous opening of the store.
-    MVPbkContactStore* store = iContactManager->ContactStoresL().Find( aStoreUri );
-    __ASSERT_ALWAYS( NULL != store, User::Leave( KErrNotFound ) );
-
-    store->OpenL( *this );
-    iStoreLoaderObserver = &aObserver;
-    }
-
-// ---------------------------------------------------------------------------
-// Constructor
-// ---------------------------------------------------------------------------
-//
-CPhCntContactManager::CPhCntContactManager()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// Second phase constructor
-// ---------------------------------------------------------------------------
-//
-void CPhCntContactManager::ConstructL()
-    {
-    iContactStoreUris = CPhCntContactStoreUris::NewL();
-
-    iContactManager =
-        CVPbkContactManager::NewL( iContactStoreUris->ContactStores() );
-
-    // Open stores so that they are accesible.
-    iContactManager->ContactStoresL().OpenAllL( *this );
-
-    const MVPbkFieldTypeList& fieldTypes = iContactManager->FieldTypes();
-
-    iSortOrder = CPbk2SortOrderManager::NewL( fieldTypes );
-
-    iContactNameFormatter = Pbk2ContactNameFormatterFactory::CreateL(
-            KNullDesC, fieldTypes,
-            *iSortOrder );
-    MVPbkContactStoreList& contactStores = iContactManager->ContactStoresL();
-    TVPbkContactStoreUriPtr uri(VPbkContactStoreUris::DefaultCntDbUri() );
-    iContactDBStore = contactStores.Find( uri );
-    iContactIdConverter = CVPbkContactIdConverter::NewL( *iContactDBStore );
-    iSpeedDialAttribute = CVPbkSpeedDialAttribute::NewL();
-
-    iImageManager = CPbk2ImageManager::NewL( *iContactManager );
-
-    iVoipFieldTypeList = CVPbkFieldTypeRefsList::NewL();
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_VOIPGEN ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_VOIPHOME ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_VOIPWORK ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_MOBILEPHONEHOME ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_MOBILEPHONEWORK ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_LANDPHONEHOME ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_LANDPHONEWORK ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_LANDPHONEGEN ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_CARPHONE ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_IMPP ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_SIP ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_PAGERNUMBER ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_FAXNUMBERGEN ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_FAXNUMBERHOME ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_FAXNUMBERWORK ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_VIDEONUMBERHOME ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_VIDEONUMBERWORK ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_VIDEONUMBERGEN ) );
-    AddVoipFieldTypeL( fieldTypes.Find( R_VPBK_FIELD_TYPE_ASSTPHONE ) );
-    }
-
-// ---------------------------------------------------------------------------
-// Adds voip field type to array.
-// ---------------------------------------------------------------------------
-//
-void CPhCntContactManager::AddVoipFieldTypeL(
-    const MVPbkFieldType* aVoipFieldType )
-    {
-    if( aVoipFieldType )
-        {
-        iVoipFieldTypeList->AppendL( *aVoipFieldType );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Return list of additional contact store uris.
-// ---------------------------------------------------------------------------
-//
-const CVPbkContactStoreUriArray& CPhCntContactManager::AdditionalContactStoreUris()
-    {
-    return iContactStoreUris->AdditionalContactStores();
-    }