diff -r 2580314736af -r 2669f8761a99 simpledatamodeladapter/src/presenceplugincontacts.cpp --- a/simpledatamodeladapter/src/presenceplugincontacts.cpp Thu Aug 19 10:19:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,507 +0,0 @@ -/* -* Copyright (c) 2010 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: IETF SIMPLE Protocol implementation for XIMP Framework -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "presenceplugincontacts.h" -#include "presencelogger.h" -#include "presenceplugincontactsobs.h" -#include "presenceplugincontactstatehandler.h" -#include "presencepluginlocalstore.h" -// States -#include "presenceplugincontactstate.h" -#include "presenceplugincontactstateopen.h" -#include "presenceplugincontactstateresolve.h" -#include "presenceplugincontactstatesearch.h" -#include "presenceplugincontactstateend.h" - -const TInt KSDMASPSMaxPropertyLength = 512; - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CPresencePluginContacts::CPresencePluginContacts() -// --------------------------------------------------------------------------- -// -CPresencePluginContacts::CPresencePluginContacts( TInt aServiceId, - MPresencePluginContactsObs& aObserver ) - : CActive( CActive::EPriorityStandard ), - iServiceId( aServiceId ), - iObserver( &aObserver ) - { - CActiveScheduler::Add(this); - } - - -// --------------------------------------------------------------------------- -// CPresencePluginContacts::ConstructL() -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::ConstructL( const TDesC& aServiceName ) - { - DP_SDA( "CPresencePluginContacts::ConstructL()" ); - - iServiceName = aServiceName.AllocL(); - CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC(); - HBufC* storeName = ContactStoreNameL(); - - if ( NULL != storeName ) - { - DP_SDA2( "CPresencePluginContacts::ConstructL() %S", storeName ); - CleanupStack::PushL( storeName ); - uriArray->AppendL( TVPbkContactStoreUriPtr( *storeName ) ); - CleanupStack::PopAndDestroy( storeName ); - } - else - { - DP_SDA( "CPresencePluginContacts::ConstructL() Use default contact store uri" ); - uriArray->AppendL( TVPbkContactStoreUriPtr( - VPbkContactStoreUris::DefaultCntDbUri() ) ); - } - iContactManager = CVPbkContactManager::NewL( *uriArray ); - CleanupStack::PopAndDestroy( uriArray ); - - DP_SDA( "CPresencePluginContacts::ConstructL() -exit" ); - } - - -// --------------------------------------------------------------------------- -// CPresencePluginContacts::NewL() -// --------------------------------------------------------------------------- -// -CPresencePluginContacts* CPresencePluginContacts::NewL( TInt aServiceId, - const TDesC& aServiceName, MPresencePluginContactsObs& aObserver ) - { - CPresencePluginContacts* self = - CPresencePluginContacts::NewLC( aServiceId, aServiceName, aObserver ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// CPresencePluginContacts::NewLC() -// --------------------------------------------------------------------------- -// -CPresencePluginContacts* CPresencePluginContacts::NewLC( TInt aServiceId, - const TDesC& aServiceName, MPresencePluginContactsObs& aObserver ) - { - CPresencePluginContacts* self = - new( ELeave ) CPresencePluginContacts( aServiceId, aObserver ); - CleanupStack::PushL( self ); - self->ConstructL( aServiceName ); - return self; - } - - -// --------------------------------------------------------------------------- -// CPresencePluginContacts::~CPresencePluginContacts() -// --------------------------------------------------------------------------- -// -CPresencePluginContacts::~CPresencePluginContacts() - { - DP_SDA("CPresencePluginContacts::~CPresencePluginContacts"); - - delete iServiceName; - delete iSearchText; - delete iContactOperation; - iStoreContactArray.ResetAndDestroy(); - delete iStateHandler; - delete iFieldTypeRefList; - delete iContactLinkArray; - if( iContactManager ) - { - TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) ); - } - delete iContactManager; - iClientStatus = NULL; - } - - -// --------------------------------------------------------------------------- -// CPresencePluginContacts::PresenceIdStoredL -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::IsPresenceIdStoredL( - const TDesC16& aPresenceId, TRequestStatus& aStatus ) - { - DP_SDA( "CPresencePluginContacts::IsPresenceIdStoredL -Enter" ); - - iOperation = EOperationIsPresenceStoredToContacts; - - aStatus = KRequestPending; - iClientStatus = &aStatus; - - iSearchText = HBufC::NewL( - iServiceName->Length() + aPresenceId.Length() + 1 ); - TPtr searchTextPtr = iSearchText->Des(); - searchTextPtr.Copy( *iServiceName ); - searchTextPtr.Append( ':' ); - searchTextPtr.Append( aPresenceId ); - - iFieldTypeRefList = CVPbkFieldTypeRefsList::NewL(); - iFieldTypeRefList->AppendL( - *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_IMPP ) ); - - iStateHandler = CPresencePluginContactStateHandler::NewL(); - - iStateHandler->AddStateL( new( ELeave ) CPresencePluginContactStateOpen( - *this, *iStateHandler ) ); - iStateHandler->AddStateL( new( ELeave ) CPresencePluginContactStateSearch( - *this, *iStateHandler ) ); - iStateHandler->AddStateL( new( ELeave ) CPresencePluginContactStateResolve( - *this, *iStateHandler ) ); - iStateHandler->AddStateL( new( ELeave ) CPresencePluginContactStateEnd( - *this, *iStateHandler ) ); - - iStateHandler->Start( &iStatus ); - SetActive(); - - DP_SDA( "CPresencePluginContacts::IsPresenceIdStoredL - exit" ); - } - - -// --------------------------------------------------------------------------- -// CPresencePluginContacts::ContactStoreNameL -// --------------------------------------------------------------------------- -// -HBufC* CPresencePluginContacts::ContactStoreNameL() - { - DP_SDA( "CPresencePluginContacts::ContactStoreNameL()" ); - - HBufC* storeName = NULL; - CSPSettings* spSettings = CSPSettings::NewLC(); - CSPProperty* property = CSPProperty::NewLC(); - - TInt err = spSettings->FindPropertyL( iServiceId, - EPropertyContactStoreId, - *property ); - - if ( KErrNone == err ) - { - storeName = HBufC::NewL( KSDMASPSMaxPropertyLength ); - TPtr16 storeNamePtr = storeName->Des(); - err = property->GetValue( storeNamePtr ); - } - - CleanupStack::PopAndDestroy( property ); - CleanupStack::PopAndDestroy( spSettings ); - - return storeName; - } - - -// --------------------------------------------------------------------------- -// From class MPresenceContactsContextBase. -// CPresencePluginContacts::Open -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::OpenL() - { - DP_SDA( "CPresencePluginContacts::Open()" ); - iContactManager->ContactStoresL().OpenAllL( *this ); - } - - -// --------------------------------------------------------------------------- -// From class MPresenceContactsContextBase. -// CPresencePluginContacts::Search -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::SearchL() - { - DP_SDA( "CPresencePluginContacts::Search()" ); - iContactOperation = iContactManager->FindL( - *iSearchText, *iFieldTypeRefList, *this ); - } - - -// --------------------------------------------------------------------------- -// From class MPresenceContactsContextBase. -// CPresencePluginContacts::ContactLinkArray -// --------------------------------------------------------------------------- -// -const MVPbkContactLinkArray& CPresencePluginContacts::ContactLinkArrayL() - { - if ( NULL == iContactLinkArray ) - { - User::Leave( KErrNotReady ); - } - return *iContactLinkArray; - } - - -// --------------------------------------------------------------------------- -// From class MPresenceContactsContextBase. -//CPresencePluginContacts::RetrieveContactL -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::RetrieveContactL( - const MVPbkContactLink& aContactLink ) - { - DP_SDA( "CPresencePluginContacts::RetrieveContactL()" ); - iContactOperation = - iContactManager->RetrieveContactL( aContactLink, *this ); - } - - -// --------------------------------------------------------------------------- -// From class MVPbkContactStoreListObserver. -// CPresencePluginContacts::OpenComplete -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::OpenComplete() - { - DP_SDA( "CPresencePluginContacts::OpenComplete()" ); - iStateHandler->State()->Complete(); - } - - -// --------------------------------------------------------------------------- -// From class MVPbkContactStoreObserver. -// CPresencePluginContacts::StoreReady -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::StoreReady( - MVPbkContactStore& /*aContactStore*/ ) - { - DP_SDA( "CPresencePluginContacts::StoreReady()" ); - } - - -// --------------------------------------------------------------------------- -// From class MVPbkContactStoreObserver. -// CPresencePluginContacts::StoreUnavailable -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::StoreUnavailable( - MVPbkContactStore& /*aContactStore*/, TInt /*aReason*/ ) - { - DP_SDA( "CPresencePluginContacts::StoreUnavailable()" ); - } - - -// --------------------------------------------------------------------------- -// From class MVPbkContactStoreObserver. -// CPresencePluginContacts::HandleStoreEventL -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::HandleStoreEventL( - MVPbkContactStore& /*aContactStore*/, - TVPbkContactStoreEvent /*aStoreEvent*/ ) - { - DP_SDA( "CPresencePluginContacts::HandleStoreEventL()" ); - } - - -// --------------------------------------------------------------------------- -// From class MVPbkContactFindObserver. -// CPresencePluginContacts::FindCompleteL -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::FindCompleteL( MVPbkContactLinkArray* aResults ) - { - DP_SDA( "CPresencePluginContacts::FindCompleteL()" ); - - delete iContactLinkArray; - iContactLinkArray = NULL; - iContactLinkArray = aResults; - - delete iContactOperation; - iContactOperation = NULL; - - iStateHandler->State()->Complete(); - } - - -// --------------------------------------------------------------------------- -// From class MVPbkContactFindObserver. -// CPresencePluginContacts::FindFailed -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::FindFailed( TInt aError ) - { - DP_SDA( "CPresencePluginContacts::FindFailed()" ); - - delete iContactOperation; - iContactOperation = NULL; - - iStateHandler->State()->Error( aError ); - } - - -// --------------------------------------------------------------------------- -// From class MVPbkSingleContactOperationObserver. -// CPresencePluginContacts::VPbkSingleContactOperationComplete -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::VPbkSingleContactOperationComplete( - MVPbkContactOperationBase& aOperation, - MVPbkStoreContact* aContact ) - { - DP_SDA( "CPresencePluginContacts::VPbkSingleContactOperationComplete()" ); - - if ( iContactOperation == &aOperation ) - { - delete iContactOperation; - iContactOperation = NULL; - } - - TInt error = iStoreContactArray.Append( aContact ); - if ( KErrNone != error ) - { - delete aContact; - aContact = NULL; - iStateHandler->State()->Error( error ); - } - else - { - iStateHandler->State()->Complete(); - } - } - - -// --------------------------------------------------------------------------- -// From class MVPbkSingleContactOperationObserver. -// CPresencePluginContacts::VPbkSingleContactOperationFailed -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::VPbkSingleContactOperationFailed( - MVPbkContactOperationBase& aOperation, - TInt aError ) - { - DP_SDA( "CPresencePluginContacts::VPbkSingleContactOperationFailed()" ); - - if ( iContactOperation == &aOperation ) - { - delete iContactOperation; - iContactOperation = NULL; - } - - iStateHandler->State()->Error( aError); - } - - -// --------------------------------------------------------------------------- -// From class CActive. -// CPresencePluginContacts::RunL -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::RunL() - { - DP_SDA2( "CPresencePluginContacts::RunL - status %d", iStatus.Int() ); - - TBool result( EFalse ); - TBool found( EFalse ); - CPresencePluginLocalstore* localStore = NULL; - TInt error = iStatus.Int(); - - switch( iOperation ) - { - case EOperationIsPresenceStoredToContacts: - DP_SDA( "CPresencePluginContacts::RunL -EOperationIsPresenceStoredToContacts" ); - - if ( KErrNone == error ) - { - localStore = CPresencePluginLocalstore::NewLC( *iServiceName ); - - for ( TInt i( 0 ); ( i < iStoreContactArray.Count() ) && !found; i++ ) - { - MVPbkContactLink* link = iStoreContactArray[ i ]->CreateLinkLC(); - CVPbkContactIdConverter* converter = - CVPbkContactIdConverter::NewL( link->ContactStore() ); - CleanupStack::PushL( converter ); - - TInt32 id = converter->LinkToIdentifier( *link ); - if ( localStore->SeekRowAtContactColL( id ) ) - { - found = ETrue; - result = ETrue; - } - CleanupStack::PopAndDestroy( converter ); - CleanupStack::PopAndDestroy(); // link - } - - CleanupStack::PopAndDestroy( localStore ); - } - if ( KErrNotFound == error ) - { - error = KErrNone; - } - iObserver->RequestComplete( &result, iOperation, error ); - break; - default: - break; - } - // Operation completed. - // State handler not needet anymore - delete iStateHandler; - iStateHandler = NULL; - // Close contact stores - iContactManager->ContactStoresL().CloseAll( *this ); - - User::RequestComplete( iClientStatus, error ); - } - - -// --------------------------------------------------------------------------- -// From class CActive. -// CPresencePluginContacts::DoCancel -// --------------------------------------------------------------------------- -// -void CPresencePluginContacts::DoCancel() - { - if ( iClientStatus && *iClientStatus == KRequestPending ) - { - User::RequestComplete( iClientStatus, KErrCancel ); - } - iStateHandler->Complete( KErrCancel ); - } - - -// --------------------------------------------------------------------------- -// From class CActive. -// CPresencePluginContacts::RunError -// --------------------------------------------------------------------------- -// -TInt CPresencePluginContacts::RunError( TInt aError ) - { - DP_SDA2( "CPresencePluginContacts::RunError - status %d", aError ); - User::RequestComplete( iClientStatus, aError ); - return KErrNone; - } - -// End of file