diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstcmdprocess/src/cvimpstcmdaddfrompbk.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstcmdprocess/src/cvimpstcmdaddfrompbk.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,221 @@ +/* +* 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: implementation for CVIMPSTCmdAddFromPbk +* +*/ + + +// INCLUDE FILES +#include "cvimpstcmdaddfrompbk.h" +#include "vimpstcmd.hrh" +#include "mvimpstcmdobserver.h" + +#include "uiservicetabtracer.h" + +#include +#include +#include "mvimpstengine.h" +#include "mvimpststorageserviceview.h" +#include "cvimpststoragemanagerfactory.h" +#include +#include +#include +#include "mvimpstenginecontactmgmtextention.h" +#include "mvimpstengineextentionfeatures.h" +#include + +// Constants + +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::CVIMPSTCmdAddFromPbk +// -------------------------------------------------------------------------- +// +CVIMPSTCmdAddFromPbk::CVIMPSTCmdAddFromPbk( const TInt aCommandId , + const MVPbkStoreContact& aStoreContact, + MVIMPSTEngine& aEngine ): + iCommandId( aCommandId ), + iStoreContact( aStoreContact ), + iEngine(aEngine) + { + } + +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::~CVIMPSTCmdAddFromPbk +// -------------------------------------------------------------------------- +// +CVIMPSTCmdAddFromPbk::~CVIMPSTCmdAddFromPbk() + { + + } + +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::NewL +// -------------------------------------------------------------------------- +// +CVIMPSTCmdAddFromPbk* CVIMPSTCmdAddFromPbk::NewL( const TInt aCommandId, + const MVPbkStoreContact& aStoreContact, + MVIMPSTEngine& aEngine ) + { + TRACER_AUTO; + CVIMPSTCmdAddFromPbk* self = new (ELeave ) CVIMPSTCmdAddFromPbk( aCommandId ,aStoreContact, aEngine); + self->ConstructL(); //use contsurctL if necessary + return self; + } +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::ConstructL +// -------------------------------------------------------------------------- +// +void CVIMPSTCmdAddFromPbk::ConstructL() + { + iError = KErrNone; + } + +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::ExecuteLD +// -------------------------------------------------------------------------- +// +void CVIMPSTCmdAddFromPbk::ExecuteLD() + { + + TRACER_AUTO; + //push to the cleanupstack + CleanupStack::PushL( this ); + MVIMPSTStorageServiceView* storage = CVIMPSTStorageManagerFactory::ContactListInterfaceL( iEngine.ServiceId() ) ; + if(storage) + { + //storage->AddPhoneBookContactL(iStoreContact); + // get the link and form link identify the servicedetails and then sedn it to + //contact management to add it to server. + //make search request using search manager in engine + // Read all necessary data from contact and store to + // own type + CDesCArray* arrayForService = new (ELeave) CDesCArrayFlat( + 12 ); + CleanupStack::PushL( arrayForService ); // 1 + + GetServiceFieldsL(*arrayForService); + + TInt count = arrayForService->Count(); + MVIMPSTEngineContactMgmtExtention* contactMgr = + dynamic_cast + (iEngine.ExtentionFeatures(TVIMPSTEnums::EContactManagement)); + + for(TInt i = 0; i< count; i++) + { + if(contactMgr) + { + iError = contactMgr->AddServerContactL(KNullDesC(),KNullDesC(),KNullDesC()); + } + } + CleanupStack::PopAndDestroy(arrayForService); + } + else + { + iError = KErrGeneral; + } + if(iObserver) + { + iObserver->CommandFinishedL(*this); + } + + CleanupStack::PopAndDestroy(); + + } + + +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::AddObserver +// -------------------------------------------------------------------------- +// +void CVIMPSTCmdAddFromPbk::AddObserver( MVIMPSTCmdObserver& aObserver ) + { + // store the observer to notify the command completion + iObserver = &aObserver; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::CommandId +// -------------------------------------------------------------------------- +// +TInt CVIMPSTCmdAddFromPbk::CommandId() const + { + return iCommandId; + } + +// -------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::Result +// -------------------------------------------------------------------------- +// +TInt CVIMPSTCmdAddFromPbk::Result() const + { + //return valid data regd the command operation + return iError; + } +// --------------------------------------------------------------------------- +// CVIMPSTCmdAddFromPbk::GetServiceFieldsL +// --------------------------------------------------------------------------- +// +void CVIMPSTCmdAddFromPbk::GetServiceFieldsL( CDesCArray& aArrayForServiceFields ) + { + + TRACER_AUTO; + HBufC* values[40]; + for( TInt index = 0 ; + index < iStoreContact.Fields().FieldCount() ; + index++ ) + { + const MVPbkStoreContactFieldCollection& fieldCollection = iStoreContact.Fields(); + + const MVPbkStoreContactField& field = fieldCollection.FieldAt( index ); + const MVPbkFieldType* fieldType = field.BestMatchingFieldType(); + + //find the relevant voip fields/email id fileds. + if ( fieldType ) + { + if ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPHOME ) || + ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPWORK ) || + ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPGEN ) || + ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_SIP )|| + ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_EMAILWORK ) || + ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_EMAILHOME ) || + ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_EMAILGEN )) + { + TRACE("GetServiceFieldsL - Found"); + values[0] = MVPbkContactFieldTextData::Cast( + iStoreContact.Fields().FieldAt( index ). + FieldData() ).Text().AllocLC(); + if ( values[0] ) + { + // Check for prefix and remove if found + TInt prefixLocation = values[0]->Locate( ':' ); + if ( KErrNotFound != prefixLocation ) + { + TRACE("Prefix found -> remove"); + aArrayForServiceFields.AppendL( values[0]->Des().Mid( + prefixLocation+1 ) ); + } + else + { + TRACE("No prefix"); + aArrayForServiceFields.AppendL( values[0]->Des() ); + } + CleanupStack::PopAndDestroy( values[0] ); + } + } + } + } + } + +// End of File