diff -r 2b7283837edb -r 3104fc151679 uiservicetab/vimpstengine/src/cvimpstenginesearchmgrextention.cpp --- a/uiservicetab/vimpstengine/src/cvimpstenginesearchmgrextention.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,615 +0,0 @@ -/* -* Copyright (c) 2008 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: Search manager extension for CVIMPSTEngine -* -*/ - -// INCLUDE FILES -#include "cvimpstenginesearchmgrextention.h" - -#include -#include -#include -#include -#include -#include -#include - - -#include "cvimpstenginerequestmapper.h" -#include "cvimpstenginerequest.h" - -#include "vimpstallerrors.h" -#include "tvimpstconsts.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mvimpstenginesearchextentioneventobserver.h" -#include "uiservicetabtracer.h" - - - -// ================= MEMBER FUNCTIONS ======================= -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::NewL -// Two-phased constructor. -// --------------------------------------------------------- -CVIMPSTEngineSearchMgrExtention* CVIMPSTEngineSearchMgrExtention::NewL( - MXIMPContext& aPresenceCtx, - CVIMPSTEngineRequestMapper& aRequestMapper) - { - TRACER_AUTO; - CVIMPSTEngineSearchMgrExtention* self = - CVIMPSTEngineSearchMgrExtention::NewLC( - aPresenceCtx, - aRequestMapper - ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::NewLC -// Two-phased constructor. -// --------------------------------------------------------- -CVIMPSTEngineSearchMgrExtention* CVIMPSTEngineSearchMgrExtention::NewLC( - MXIMPContext& aPresenceCtx, - CVIMPSTEngineRequestMapper& aRequestMapper) - { - TRACER_AUTO; - CVIMPSTEngineSearchMgrExtention* self = new (ELeave) - CVIMPSTEngineSearchMgrExtention(aPresenceCtx, aRequestMapper); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::ConstructL -// --------------------------------------------------------- -void CVIMPSTEngineSearchMgrExtention::ConstructL() - { - TRACER_AUTO; - - // ximp search plugin - iSearchFeature = MSearchFeature::NewL(&iPresenceCtx); - - iSearch = &iSearchFeature->Search(); - - iAlreadySubscibed = EFalse; - - - } - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::CVIMPSTEngineSearchMgrExtention -// --------------------------------------------------------- -CVIMPSTEngineSearchMgrExtention::CVIMPSTEngineSearchMgrExtention( MXIMPContext& aPresenceCtx, - CVIMPSTEngineRequestMapper& aRequestMapper) - :iPresenceCtx(aPresenceCtx), - iRequestMapper(aRequestMapper), - iSearchSupported(TVIMPSTEnums::ESupportUnKnown) - { - - } - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::~CVIMPSTEngineSearchMgrExtention -// --------------------------------------------------------- -CVIMPSTEngineSearchMgrExtention::~CVIMPSTEngineSearchMgrExtention() - { - TRACER_AUTO; - - iSearchObservers.Reset(); - delete iSearchFeature; - iSearchFeature = NULL; - - } - - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::SearchContactsL -// --------------------------------------------------------- -TInt CVIMPSTEngineSearchMgrExtention::SearchContactsL( RArray& aKeyDataArray ) - { - TRACER_AUTO; - - TInt err = KErrNotSupported; - if (iSearchSupported == TVIMPSTEnums::ESupported) - { - - TInt keydataCount = aKeyDataArray.Count(); - - MXIMPObjectFactory& objFactory = iPresenceCtx.ObjectFactory(); - MSearchObjectFactory& searchObjFact= iSearchFeature->SearchObjectFactory(); - - MXIMPIdentity* searchId = objFactory.NewIdentityLC(); - searchId->SetIdentityL(_L("SEARCH")); - - RPointerArray< MSearchElement > searchList; - CleanupClosePushL( searchList ); - - for( TInt i = 0; iSetIdentityL( data.iSearchKeyData ); - - MSearchElement* srchElement = searchObjFact.NewSearchElementLC(); - if( data.iSearchKey != TVIMPSTEnums::EVIMPSTSearchKeyUknown ) - { - srchElement->SetRequestL( *searchKeyId, ConverttoTSearchKey( data.iSearchKey ) ); - } - else - { - MXIMPIdentity* searchLabel = objFactory.NewIdentityLC(); - searchLabel->SetIdentityL( data.iSearchLabel ); - srchElement->SetRequestL( *searchKeyId, *searchLabel ); - CleanupStack::PopAndDestroy ();//searchLabel - } - searchList.Append(srchElement); - - CleanupStack::Pop();//srchElement - CleanupStack::PopAndDestroy();//searchKeyId - - } - - - TXIMPRequestId reqId = iSearch->SearchL(*searchId,searchList,KMaxSearchLimit ); - - iRequestMapper.CreateRequestL(reqId, ETrue,EVIMPSTXimpOperationSearchContact);// waite here - - CleanupStack::Pop() ; // searchList - searchList.ResetAndDestroy();// searchList - CleanupStack::PopAndDestroy ();//searchId - - err = iReqResult; - } - - return err; - } - - -// ----------------------------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::SubscribeForSearchKeysL() -// ----------------------------------------------------------------------------- -// -TInt CVIMPSTEngineSearchMgrExtention::SubscribeForSearchKeysL() - { - TRACER_AUTO; - TRACE( "iSearchSupported: %d" , iSearchSupported ); - TRACE( "iAlreadySubscibed: %d" , iAlreadySubscibed ); - - if ( (iSearchSupported == TVIMPSTEnums::ENotSupported) || iAlreadySubscibed ) - { - TRACE("inside if " ); - return KErrNone; - } - - if( iSearch ) - { - TRACE("inside if(iSearch) " ); - - iAlreadySubscibed = ETrue; - - TXIMPRequestId reqId = iSearch->GetSearchKeysL(); - TRACE( "iSearch->GetSearchKeysL() " ); - - iRequestMapper.CreateRequestL(reqId, ETrue ,EVIMPSTXimpOperationSubscribeSearchKeys);// waite here - } - - if( ( iReqResult != KPREQUESTERRSUCCESSFUL ) && ( iReqResult != KErrNone ) ) - { - iSearchSupported = TVIMPSTEnums::ENotSupported; - } - else - { - iSearchSupported = TVIMPSTEnums::ESupported; - } - - return iReqResult;; - } - -// ----------------------------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::IsSupported() -// ----------------------------------------------------------------------------- -// -TVIMPSTEnums::FeatureSupport CVIMPSTEngineSearchMgrExtention::IsSupported() const - { - return iSearchSupported; - } - -// ------------------------------------------------------------------------ -// CVIMPSTEngineSearchMgrExtention::ConverttoTSearchKey -// -// ------------------------------------------------------------------------ -TSearchKey CVIMPSTEngineSearchMgrExtention::ConverttoTSearchKey(TVIMPSTEnums::TVIMPSTSearchKey aKey) - { - TRACER_AUTO; - - TSearchKey ret = EUserFirstName; - switch( aKey ) - { - case TVIMPSTEnums::EVIMPSTFirstName : - { - ret = EUserFirstName; - break; - } - case TVIMPSTEnums::EVIMPSTMiddleName : - { - ret = EUserMiddleName ; - break; - } - case TVIMPSTEnums::EVIMPSTLastName : - { - ret = EUserLastName; - break; - } - case TVIMPSTEnums::EVIMPSTFullName : - { - ret = EUserFullName; - break; - } - case TVIMPSTEnums::EVIMPSTCountry : - { - ret = EUserCountry; - break; - } - case TVIMPSTEnums::EVIMPSTCity : - { - ret = EUserCity; - break; - } - case TVIMPSTEnums::EVIMPSTEmailAddress : - { - ret = EUserEmailAddress; - break; - } - case TVIMPSTEnums::EVIMPSTUser : - { - ret = EUser; - break; - } - case TVIMPSTEnums::EVIMPSTOrganisation : - { - ret = EOrganisation; - break; - } - - case TVIMPSTEnums::EVIMPSTNickName : - { - ret = EUserNickName; - break; - } - case TVIMPSTEnums::EVIMPSTState : - { - ret = EState; - break; - } - case TVIMPSTEnums::EVIMPSTOrganisationUnit : - { - ret = EOrganisationUnit; - break; - } - case TVIMPSTEnums::EVIMPSTBirthday : - { - ret = EBirthday; - break; - } - - default: - { - ret = EUserFirstName ; - } - - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::Type() -// ----------------------------------------------------------------------------- -// -TVIMPSTEnums::ExtentionType CVIMPSTEngineSearchMgrExtention::Type() const - { - return TVIMPSTEnums::ESearch; - } - - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::RegisterObserver -// -// --------------------------------------------------------- -void CVIMPSTEngineSearchMgrExtention::RegisterObserver(MVIMPSTEngineSearchExtentionEventObserver* aObserver) - { - TRACER_AUTO; - - TInt index = iSearchObservers.Find(aObserver); - if( index == KErrNotFound ) - { - iSearchObservers.Append( aObserver ); - } - - } - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::UnRegisterObserver -// -// --------------------------------------------------------- -void CVIMPSTEngineSearchMgrExtention::UnRegisterObserver(MVIMPSTEngineSearchExtentionEventObserver* aObserver) - { - TRACER_AUTO; - - TInt index = iSearchObservers.Find(aObserver); - - if( index >=0 ) - { - iSearchObservers.Remove( index ); - iSearchObservers.Compress(); - } - - } - - - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::HandleSessionContextEventL -// --------------------------------------------------------- -void CVIMPSTEngineSearchMgrExtention::HandleSessionContextEventL(const MXIMPContext& /*aContext*/, - const MXIMPBase& aEvent, - TXimpOperation aXimpOperation/* = EVIMPSTXimpOperationNoOperation*/ ) - { - TRACER_AUTO; - - switch( aEvent.GetInterfaceId() ) - { - - case MXIMPRequestCompleteEvent::KInterfaceId: - { - TRACE("InsideCallbackswitch::MXIMPRequestCompleteEvent"); - if ( (EVIMPSTXimpOperationSearchContact == aXimpOperation) - || (EVIMPSTXimpOperationSubscribeSearchKeys == aXimpOperation) ) - { - const MXIMPRequestCompleteEvent* event = - TXIMPGetInterface< const MXIMPRequestCompleteEvent >::From( - aEvent, MXIMPBase::EPanicIfUnknown ); - - iReqResult = event->CompletionResult().ResultCode(); - const TXIMPRequestId& reqId = event->RequestId(); - // Note:FindRequestId does not pass the ownership. hanece req - // should not be deleted. - CVIMPSTEngineRequest *req = iRequestMapper.FindRequestId( reqId ); - - if ( req ) - { - req->StopWait() ; - iRequestMapper.RemoveRequestId(reqId); - } - } - break; - } - - case MSearchEvent::KInterfaceId: - { - const MSearchEvent* srchEvent = - TXIMPGetInterface< const MSearchEvent >::From - (aEvent, MXIMPBase::EPanicIfUnknown); - TInt count= srchEvent->SearchResultCount(); - const MXIMPIdentity& identity= srchEvent->SearchId(); - TPtrC id=srchEvent->SearchId().Identity(); - RArray resultsArray; - for(TInt i=0;iSearchResult(i); - - TVIMPSTSearchData data = - { - info.GetFieldInfo(EFirstName), - info.GetFieldInfo(ELastName), - info.GetFieldInfo(EEmailAddress) - }; - TRAP_IGNORE( resultsArray.AppendL( data ) ); - } - - //should be done in reuqest complete event for search with erro handling - //also first request complete will be received and then search result event - - for(TInt i=0; i< iSearchObservers.Count(); i++ ) - { - TRAP_IGNORE( iSearchObservers[i]->HandleSearchResultL(resultsArray) ); - TRAP_IGNORE( iSearchObservers[i]->HandleSearchFinishedL( KErrNone ) ); - } - - resultsArray.Close(); // close the array - break; - } - case MSearchKeysEvent::KInterfaceId: - { - const MSearchKeysEvent* searchEvent = - TXIMPGetInterface< const MSearchKeysEvent >::From ( aEvent, - MXIMPBase::EPanicIfUnknown ); - TRAP_IGNORE( ProcessSearchKeysEventL( searchEvent ) ); - break; - } - default: - { - break; - } - } - } - - -// --------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::ProcessSearchKeysEventL -// -// --------------------------------------------------------- -void CVIMPSTEngineSearchMgrExtention::ProcessSearchKeysEventL(const MSearchKeysEvent* aSearchKeysEvent) - { - TRACER_AUTO; - - TInt searchKeysCount = aSearchKeysEvent->InfoCount(); - - RArray enumKeyArray; - RPointerArray labelKeyArray; - - CleanupClosePushL( enumKeyArray ); - CleanupClosePushL( labelKeyArray ); - - HBufC* keyLabelText = NULL; - for( TInt i = 0; i < searchKeysCount; i++ ) - { - const MSearchKeyInfo& searchKeyInfo = aSearchKeysEvent->SearchKeyInfo ( i ); - switch( searchKeyInfo.Type() ) - { - case EKey: - { - //change to proper type once done at ximp side - TSearchKey keyValue = searchKeyInfo.Key(); - TVIMPSTEnums::TVIMPSTSearchKey key = ConverttoTVIMPSTSearchKey(keyValue); - enumKeyArray.Append(key); - break; - } - case ELabel: - { - keyLabelText = searchKeyInfo.Label().AllocL(); - - labelKeyArray.Append(keyLabelText); - break; - } - - } - } - - for(TInt i=0; i< iSearchObservers.Count(); i++ ) - { - iSearchObservers[i]->HandleSearchKeysEventL(enumKeyArray, labelKeyArray ); - } - - labelKeyArray.ResetAndDestroy(); - CleanupStack::PopAndDestroy(2); //enumKeyArray, labelKeyArray - - } - -// ------------------------------------------------------------------------ -// CVIMPSTEngineSearchMgrExtention::ConverttoTVIMPSTSearchKey -// -// ------------------------------------------------------------------------ -TVIMPSTEnums::TVIMPSTSearchKey CVIMPSTEngineSearchMgrExtention::ConverttoTVIMPSTSearchKey( TSearchKey aKey) - { - TRACER_AUTO; - - TVIMPSTEnums::TVIMPSTSearchKey retKey = TVIMPSTEnums::EVIMPSTFirstName ; - switch( aKey ) - { - case EUserFirstName: - { - retKey = TVIMPSTEnums::EVIMPSTFirstName; - break; - } - case EUserMiddleName: - { - retKey = TVIMPSTEnums::EVIMPSTMiddleName; - break; - } - case EUserLastName: - { - retKey = TVIMPSTEnums::EVIMPSTLastName; - break; - } - case EUserFullName: - { - retKey = TVIMPSTEnums::EVIMPSTFullName; - break; - } - case EUserCountry: - { - retKey = TVIMPSTEnums::EVIMPSTCountry; - break; - } - case EUserCity: - { - retKey = TVIMPSTEnums::EVIMPSTCity; - break; - } - case EUserEmailAddress: - { - retKey = TVIMPSTEnums::EVIMPSTEmailAddress; - break; - } - case EUser: - { - retKey = TVIMPSTEnums::EVIMPSTUser; - break; - } - case EOrganisation: - { - retKey = TVIMPSTEnums::EVIMPSTOrganisation; - break; - } - - case EUserNickName : - { - retKey = TVIMPSTEnums::EVIMPSTNickName; - break; - } - case EState : - { - retKey = TVIMPSTEnums::EVIMPSTState ; - break; - } - case EOrganisationUnit : - { - retKey = TVIMPSTEnums::EVIMPSTOrganisationUnit; - break; - } - case EBirthday: - { - retKey = TVIMPSTEnums::EVIMPSTBirthday; - break; - } - - default: - { - retKey = TVIMPSTEnums::EVIMPSTFirstName; - } - - } - - return retKey; - } -//---------------------------------------------------------------------------- -// CVIMPSTEngineSearchMgrExtention::SetSupported() -// ----------------------------------------------------------------------------- -// -void CVIMPSTEngineSearchMgrExtention::SetSupported(TVIMPSTEnums::FeatureSupport aSupported) - { - TRACER_AUTO; - if ( aSupported == TVIMPSTEnums::ESupportUnKnown) - { - // at the logout time this flag has to be set to EFalse - iAlreadySubscibed = EFalse; - } - iSearchSupported = aSupported; - } - -// end of file