--- a/uiservicetab/vimpststorage/src/cvimpststoragevpbkstorehandler.cpp Thu Aug 19 09:41:53 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1318 +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: Class that provides handling of vpbk store
-*
-*/
-
-
-// INCLUDE FILES
-#include "cvimpststoragevpbkstorehandler.h"
-
-#include "mvimpststoragevpbkstorehandler.h"
-
-//vpbk interfaces
-#include <MVPbkContactStoreObserver.h>
-#include <CVPbkContactManager.h>
-#include <MVPbkContactLink.h>
-#include <CVPbkContactStoreUriArray.h>
-#include <MVPbkContactOperationBase.h>
-#include <MVPbkContactStore.h>
-#include <MVPbkContactStoreProperties.h>
-#include <MVPbkContactView.h>
-#include <MVPbkContactStoreList.h>
-#include <MVPbkContactFieldTextData.h>
-#include <MVPbkContactFieldUriData.h>
-#include <MVPbkContactFieldBinaryData.h>
-#include <MVPbkContactFieldData.h>
-#include <CVPbkContactViewDefinition.h>
-
-#include <MVPbkViewContact.h>
-#include <MVPbkStoreContact.h>
-#include <TVPbkContactStoreUriPtr.h>
-#include <MVPbkStoreContactFieldCollection.h>
-#include <MVPbkStoreContactField.h>
-#include <MVPbkFieldType.h>
-#include <VPbkEng.rsg>
-#include <CVPbkContactLinkArray.h>
-#include <CVPbkFieldTypeSelector.h>
-#include <CPbk2SortOrderManager.h>
-#include <MVPbkContactFieldBinaryData.h>
-
-#include "uiservicetabtracer.h"
-#include "tvimpstconsts.h"
-#include <cntdb.h>
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::
-// CVIMPSTStorageVPbkStoreHandler
-// ---------------------------------------------------------------------------
-//
-CVIMPSTStorageVPbkStoreHandler:: CVIMPSTStorageVPbkStoreHandler( MVIMPSTStorageVPbkStoreHandler& aStoreHandler,TBool aLocalStore ):
- CActive( CActive::EPriorityIdle ),
- iStoreHandler(aStoreHandler ),
- iStoreEventType( EVPbkUnknownEvent ),
- iFetcingIndex( 0 ),
- iLocalStore( aLocalStore )
- {
- TRACER_AUTO;
- CActiveScheduler::Add( this );
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ConstructL(const TDesC& aStoreName,const TDesC& aServiceName )
- {
- TRACER_AUTO;
- iAddIdInProgress = NULL;
- iStoreName = aStoreName.AllocL();
- iServiceName = aServiceName.AllocL();
- CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC();
- uriArray->AppendL( TVPbkContactStoreUriPtr( aStoreName ) );
- if( !uriArray->IsIncluded( TVPbkContactStoreUriPtr( KPhoneBookDbURI ) ) )
- {
- TRACE( "phonebook store apended" );
- uriArray->AppendL( TVPbkContactStoreUriPtr( KPhoneBookDbURI ) );
- }
- iContactManager = CVPbkContactManager::NewL( *uriArray, NULL );
- CleanupStack::PopAndDestroy( uriArray );
- TRACE( "iContactManager created" );
- iStores = &iContactManager->ContactStoresL();
- iStores->OpenAllL( *this );
- TRACE( " OpenAllL called" );
- iSortOrderManager = CPbk2SortOrderManager::NewL( iContactManager->FieldTypes(), NULL );
-
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::NewL
-// ---------------------------------------------------------------------------
-//
-CVIMPSTStorageVPbkStoreHandler* CVIMPSTStorageVPbkStoreHandler::NewL( const TDesC& aContactDb,
- const TDesC& aServiceName,
- MVIMPSTStorageVPbkStoreHandler& aStoreHandler,
- TBool aLocalStore )
- {
- TRACER_AUTO;
- CVIMPSTStorageVPbkStoreHandler* self = NewLC( aContactDb ,aServiceName, aStoreHandler,aLocalStore );
- CleanupStack::Pop( self );
-
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::NewLC
-// ---------------------------------------------------------------------------
-//
-CVIMPSTStorageVPbkStoreHandler* CVIMPSTStorageVPbkStoreHandler::NewLC( const TDesC& aContactDb,
- const TDesC& aServiceName,
- MVIMPSTStorageVPbkStoreHandler& aStoreHandler,
- TBool aLocalStore )
- {
- TRACER_AUTO;
- CVIMPSTStorageVPbkStoreHandler* self =
- new (ELeave) CVIMPSTStorageVPbkStoreHandler( aStoreHandler ,aLocalStore );
- CleanupStack::PushL( self );
- self->ConstructL( aContactDb,aServiceName );
-
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::
-// ~CVIMPSTStorageVPbkStoreHandler
-// ---------------------------------------------------------------------------
-//
-CVIMPSTStorageVPbkStoreHandler:: ~CVIMPSTStorageVPbkStoreHandler()
- {
- TRACER_AUTO;
- if( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- Cancel();
- ResetAndDestroyRArray();
- iUnCommittedVPbkContacts.ResetAndDestroy();
- delete iAddIdInProgress;
- delete iContactOperation;
- delete iContactLink;
- delete iStoreContact;
- delete iContactView;
- if ( iContactManager )
- {
- TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) );
- TRACE( "CloseAll called" );
- delete iContactManager;
- }
- delete iStoreName;
- delete iSortOrderManager;
- delete iServiceName;
-
- }
- // ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ContactViewReady
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ContactViewReady(
- MVPbkContactViewBase& aView )
- {
- TRACER_AUTO;
- if ( iContactView == &aView && ( iStoreEventType == EVPbkUnknownEvent ) )
- {
- iStoreEventType = EVPbkContactReading ;
- TRAP_IGNORE( HandleContactViewReadyL( *iContactView ) );
- }
-
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ContactViewUnavailable
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ContactViewUnavailable(
- MVPbkContactViewBase& /*aView*/ )
- {
- TRACER_AUTO;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ContactAddedToView
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ContactAddedToView(
- MVPbkContactViewBase& /*aView*/,
- TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink*/ )
- {
- TRACER_AUTO;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ContactRemovedFromView
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ContactRemovedFromView(
- MVPbkContactViewBase& /*aView*/,
- TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink*/ )
- {
- TRACER_AUTO;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ContactViewError
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ContactViewError(
- MVPbkContactViewBase& /*aView*/,
- TInt /*aError*/, TBool /*aErrorNotified*/ )
- {
- TRACER_AUTO;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::StoreReady
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::StoreReady(
- MVPbkContactStore& /*aContactStore*/ )
- {
- TRACER_AUTO;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::StoreUnavailable
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::StoreUnavailable(
- MVPbkContactStore& /*aContactStore*/,
- TInt /*aReason*/ )
- {
- TRACER_AUTO;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::HandleStoreEventL
-// ---------------------------------------------------------------------------
-//
-MVPbkContactStore* CVIMPSTStorageVPbkStoreHandler::GetDefaultStoreL( const TDesC& aUri )
- {
- TRACER_AUTO;
- return iStores->Find( TVPbkContactStoreUriPtr( aUri ) );
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::HandleStoreEventL
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::HandleStoreEventL(
- MVPbkContactStore& aContactStore ,
- TVPbkContactStoreEvent aStoreEvent )
- {
- TRACER_AUTO;
- if( iStore == &aContactStore )
- {
- TRACE( "store event" );
- switch( aStoreEvent.iEventType )
- {
- case TVPbkContactStoreEvent::EContactAdded:
- {
- TRACE( "EContactAdded event");
- delete iContactLink;
- iContactLink = NULL;
- MVPbkContactLink* contactLink = aStoreEvent.iContactLink->CloneLC();
- iContactLink = contactLink;
- CleanupStack::Pop(); // contactLink
- IssueRequest(); // complete the request
- TRACE( " EContactAdded done" );
- break;
- }
- case TVPbkContactStoreEvent::EContactDeleted:
- {
- TRACE( "EContactDeleted event" );
- MVPbkContactLink* contactLink = aStoreEvent.iContactLink->CloneLC();
- delete iContactLink;
- iContactLink = NULL;
- iContactLink = contactLink;
- CleanupStack::Pop(); // contactLink
- TVIMPSTVPbkStoreEvent storeEvent(EVPbkContactDeleted, iContactLink );
- iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
- TRACE( "EContactDeleted done" );
- break;
- }
- case TVPbkContactStoreEvent::EContactChanged:
- {
- TRACE( " EContactChanged event" );
- delete iContactLink;
- iContactLink = NULL;
- MVPbkContactLink* contactLink = aStoreEvent.iContactLink->CloneLC();
- iContactLink = contactLink;
- CleanupStack::Pop(); // contactLink
- iStoreEventType = EVPbkContactChanged;
- IssueRequest(); // complete the request which will begin retriving the iContactLink
- TRACE("EContactChanged done");
- break;
- }
- case TVPbkContactStoreEvent::EUnknownChanges:
- {
- TRACE( " EUnknownChanges event" );
- iStoreEventType = EVPbkUnknownChanges;
- TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType);
- iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
- TRACE( "EUnknownChanges done" );
- break;
- }
- default:
- break;
- }
- }
-
- }
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::OpenComplete
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::OpenComplete()
- {
- TRACER_AUTO;
- // stores OpenAll completed
- TRAP_IGNORE( DoHnadleOpenCompleteL() );
-
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::DoHnadleOpenCompleteL
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::DoHnadleOpenCompleteL()
- {
- TRACER_AUTO;
- iStore = GetDefaultStoreL( *iStoreName ) ;
- CVPbkContactViewDefinition* viewDefinition =
- CVPbkContactViewDefinition::NewL();
- CleanupStack::PushL( viewDefinition );
- viewDefinition->SetType( EVPbkContactsView );
- viewDefinition->SetUriL( *iStoreName );
- if ( iStore )
- {
- TRACE( "store view creating");
- MVPbkContactView* tmpView = iStore->CreateViewLC(
- *viewDefinition,
- *this,
- iSortOrderManager->SortOrder() );
- CleanupStack::Pop(); // tmpView
- TRACE( "store view created");
- iContactView = tmpView;
- }
- CleanupStack::PopAndDestroy(); //viewDefinition, can not pop ny name
-
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ContactOperationCompleted
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ContactOperationCompleted(
- TContactOpResult /*aResult*/ )
- {
- TRACER_AUTO;
- // called when contact commit is successful
- iOperationError = KErrNone;
- if( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- TRAP_IGNORE( CommitNextPendingContactsL() );
-
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ContactOperationFailed
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ContactOperationFailed(
- TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/ )
- {
- TRACER_AUTO;
- // called when contact commit is unsuccessful
- iOperationError = aErrorCode;
- if( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- TRAP_IGNORE( CommitNextPendingContactsL() );
-
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::StepComplete
-// --------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::StepComplete(
- MVPbkContactOperationBase& /*aOperation*/,
- TInt /*aStepSize*/ )
- {
- TRACER_AUTO;
- // called when batch operation call
- iOperationError = KErrNone;
-
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::StepFailed
-// --------------------------------------------------------------------------
-//
-TBool CVIMPSTStorageVPbkStoreHandler::StepFailed(
- MVPbkContactOperationBase& /*aOperation*/,
- TInt /*aStepSize*/,
- TInt aError )
- {
- TRACER_AUTO;
- // called when batch operation call
- iOperationError = aError;
-
- return EFalse;
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::OperationComplete
-// --------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::OperationComplete(
- MVPbkContactOperationBase& aOperation )
- {
- TRACER_AUTO;
- // called when batch operation call for opening the multiple store
- if ( &aOperation == iContactOperation )
- {
- delete iContactOperation;
- iContactOperation = NULL;
- }
- iOperationError = KErrNone;
- if( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
-
- }
-
-//----------------------------------------------------------------------
-//CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationComplete()
-//----------------------------------------------------------------------
-void CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationComplete( MVPbkContactOperationBase& aOperation,
- MVPbkStoreContact* aContact )
- {
- TRACER_AUTO;
- // called when contact details is retrived
- TRAP_IGNORE( DoHnadleSingleContactOperationCompleteL( aOperation, aContact ) );
-
- }
-
-//----------------------------------------------------------------------
-//CVIMPSTStorageVPbkStoreHandler::DoHnadleSingleContactOperationCompleteL()
-//----------------------------------------------------------------------
-void CVIMPSTStorageVPbkStoreHandler::DoHnadleSingleContactOperationCompleteL( MVPbkContactOperationBase& aOperation,
- MVPbkStoreContact* aContact )
- {
- TRACER_AUTO;
- TRACE( "StoreEventType: %d",iStoreEventType);
- // called when contact details is retrived
- if( iStoreContact )
- {
- delete iStoreContact;
- iStoreContact = NULL;
- }
- iStoreContact = aContact ; // iStoreContact owns thea Contact
- if( ( &aOperation == iContactOperation) && iStoreContact )
- {
- TRACE( "inside if (operation) ");
- if( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- delete iContactOperation;
- iContactOperation = NULL;
- TRACE( " before iCommitOperationInProgress: %d",iCommitOperationInProgress);
- iCommitOperationInProgress = EFalse;
- TRACE( "After iCommitOperationInProgress: %d",iCommitOperationInProgress);
-
- if( iStoreEventType != EVPbkUpdatingAvatar )
- {
- TRACE( " inside if (iStoreEventType != EVPbkUpdatingAvatar ) ");
- if( !iLocalStore && iStoreEventType == EVPbkContactRetriving )
- {
- TRACE( " EVPbkContactRetriving");
- RetriveFieldDataAndSendEventL( *iStoreContact );
- }
- else
- {
- TRACE( "inside else start");
- HBufC* userId = GetContactFieldDataLC( *iStoreContact, R_VPBK_FIELD_TYPE_IMPP );
- HBufC* firstname = GetContactFieldDataLC( *iStoreContact,R_VPBK_FIELD_TYPE_FIRSTNAME );
- HBufC* lastname = GetContactFieldDataLC( *iStoreContact,R_VPBK_FIELD_TYPE_LASTNAME );
-
- HBufC* disname = NULL;
- /*
- * There are three scenarios where I can form the Display name.
- * 1. First and last name are present.
- * 2. First name is present but no last name is present.
- * 3. Lastname is there and no first name.
- * 4. if none, then assigning NULL
- */
- if ( firstname && lastname )
- {
- disname = HBufC::NewLC( firstname->Des().Length() + lastname->Des().Length()+ 1 );
- TPtr disnamePtr( disname->Des() );
- disnamePtr.Append(*firstname);
- if(firstname->Length() && lastname->Length() )
- {
- disnamePtr.Append(KSpace);
- }
- disnamePtr.Append(*lastname);
- }
- else
- {
- disname = KNullDesC().AllocLC();
- }
- HBufC8* avatarContent = GetContactBinaryFieldDataLC( *iStoreContact,R_VPBK_FIELD_TYPE_THUMBNAILPIC );
- TRACE( "iStoreHandler.HandleVPbkStoreEventL: %d", iStoreEventType);
- TPtr useridPtr = userId->Des();
- TRACE( "inside else UserId : %S", &useridPtr);
- TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType,
- iContactLink,
- NULL,
- *userId,
- *disname,
- *avatarContent);
- iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
- CleanupStack::PopAndDestroy(5); // disname,lastname,firstname,userId,avatarContent
- TRACE( " inside else end");
- }
- delete iAddIdInProgress;
- iAddIdInProgress = NULL;
- }
-
- iOperationError = KErrNone;
- if( iStoreEventType == EVPbkContactReading && iContactView )
- {
- TRACE( " if after iOperationError");
- HandleContactViewReadyL( *iContactView );
- }
-
- else if(!iCommitOperationInProgress )
- {
- TRACE( "else if after if after iOperationError");
- CommitNextPendingContactsL();// commit only if any pending contact
- }
-
- }
- }
-//----------------------------------------------------------------------
-//CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationComplete()
-//----------------------------------------------------------------------
-void CVIMPSTStorageVPbkStoreHandler::VPbkSingleContactOperationFailed( MVPbkContactOperationBase& aOperation,
- TInt aError)
- {
- TRACER_AUTO;
- if( &aOperation == iContactOperation )
- {
- delete iContactOperation;
- iContactOperation = NULL;
- }
- iOperationError = aError;
- iCommitOperationInProgress = EFalse;
- if( iWait.IsStarted() )
- {
- iWait.AsyncStop();
- }
- TRAP_IGNORE( CommitNextPendingContactsL() );// commit only if any pending contact
-
- }
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::HandleContactViewReadyL
-// --------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::HandleContactViewReadyL( MVPbkContactViewBase& aView )
- {
- TRACER_AUTO;
- TInt contactCount = aView.ContactCountL();
- TRACE( "begin");
- if( contactCount == iFetcingIndex && iStoreEventType == EVPbkContactReading )
- {
- TRACE( "reading completed" );
- iStoreEventType = EVPbkContactReadCompleted;
- TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType);
- iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
- }
- else if( iFetcingIndex < contactCount && iFetcingIndex>=0 )
- {
- TRACE( " reading");
- const MVPbkViewContact& contact = aView.ContactAtL( iFetcingIndex );
- MVPbkContactLink* contactLink = contact.CreateLinkLC();
- delete iContactLink;
- iContactLink = NULL;
- iContactLink = contactLink;
- CleanupStack::Pop(); // contactLink
- IssueRequest();
- iFetcingIndex++;
- }
-
- }
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::IssueRequest
-// --------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::IssueRequest()
- {
- TRACER_AUTO;
- if( !IsActive() )
- {
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, KErrNone );
- SetActive();
- }
-
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::RunL
-// --------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::RunL()
- {
- TRACER_AUTO;
- if( iContactLink )
- {
- delete iContactOperation;
- iContactOperation = NULL;
- iContactOperation = iContactManager->RetrieveContactL( *iContactLink, *this );
- }
-
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::DoCancel
-// --------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::DoCancel()
- {
- TRACER_AUTO;
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::RunError
-// --------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageVPbkStoreHandler::RunError( TInt aError )
- {
- TRACER_AUTO;
- return aError;
- }
-
-//////////////////////////////////////////////////////////
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::CreateVPbkContactL
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageVPbkStoreHandler::CreateVPbkContactL(const TDesC& aUserId,
- const TDesC& aDisplayName )
- {
- TRACER_AUTO;
- TRACE( "aUserId = %S", &aUserId );
-
- if( iAddIdInProgress && iAddIdInProgress->Compare( aUserId ) == 0 )
- {
- TPtr iAddIdInProgressPtr = iAddIdInProgress->Des();
- TRACE("iAddIdInProgressPtr = %S", &iAddIdInProgressPtr );
- TRACE("already Adding" );
- return KErrAlreadyExists;
- }
- TRACE( "After If" );
- delete iAddIdInProgress;
- iAddIdInProgress = NULL;
- iAddIdInProgress = aUserId.AllocL();
-
- if(iStore)
- {
- MVPbkStoreContact* storedContact = iStore->CreateNewContactLC(); //1
- if( !storedContact )
- {
- return NULL;
- }
- if(aUserId.Length()!= 0)
- {
- TRACE( " valid xsp Id" );
- TInt prefixLocation = aUserId.Locate( ':' );
- const MVPbkContactStoreProperties& storeProperties = storedContact->ParentStore().StoreProperties();
- const MVPbkFieldTypeList& supportedFieldTypes = storeProperties.SupportedFields();
- TInt fieldCount = supportedFieldTypes.FieldTypeCount();
-
- for( TInt index = 0 ; index < fieldCount ; index++ )
- {
- const MVPbkFieldType* fieldType = &(supportedFieldTypes.FieldTypeAt(index));
- if ( fieldType && ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_IMPP ))
- {
- TRACE(" XSP Id-IMMP field creating" );
- MVPbkStoreContactField* fielduri = storedContact->CreateFieldLC(*fieldType); //2
- // Check for prefix and remove if found
- //append the internettelephoney field.
- HBufC* fieldData = NULL;
- TInt serFieldLength = aUserId.Length();
- if( prefixLocation >=0 && ( prefixLocation < serFieldLength ) )
- {
- fieldData = aUserId.Right(serFieldLength - prefixLocation - 1).AllocLC(); //3
- }
- else
- {
- fieldData = aUserId.AllocLC(); // 3
- }
- if (fieldData)
- {
- TPtr fieldDataPtr( fieldData->Des() );
- MVPbkContactFieldUriData& address = MVPbkContactFieldUriData::Cast( fielduri->FieldData() );
- // TODO check here about servicename:userId
- address.SetUriL(*iServiceName,*fieldData);
- // fielduri ownership is transfered to storedContact
- storedContact->AddFieldL(fielduri);
- CleanupStack::PopAndDestroy(fieldData); //3
- CleanupStack::Pop(); //fielduri 2
- }//End if (fieldData)
- else
- {
- CleanupStack::PopAndDestroy(); //2 fielduri
- }
- TRACE( " XSP Id-IMMP field created" );
- }//end of if
- else if ( fieldType &&
- ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_FIRSTNAME ))
- {
- TRACE( " first name field creating" );
- HBufC* firstName = NULL;
-
- // if there is no display name then allocate hte user id as displayname.
- if(!(aDisplayName.Length()))
- {
- // if aServiceField is sip:user1@ouped111147.nmp.nokia.com, then
- // rippedaServiceField will be user1@ouped111147.nmp.nokia.com
- TPtrC rippedaServiceField = aUserId.Mid(prefixLocation+1);
- //append first name.
- TInt atLocation = rippedaServiceField.Locate( '@' );
- if( atLocation > 0 && ( atLocation < rippedaServiceField.Length() ) )
- {
- // atLocation must be greater that 0
- firstName = rippedaServiceField.Left( atLocation ).AllocLC() ; //2
- }
- else
- {
- firstName = rippedaServiceField.AllocLC(); //2
- }
- }
- // there is a display name hence allocate it.
- else
- {
- firstName = aDisplayName.AllocLC();//2
- }
-
- if (firstName)
- {
- MVPbkStoreContactField* firstNamefield = storedContact->CreateFieldLC(*fieldType); //2
- MVPbkContactFieldTextData& firstNameText = MVPbkContactFieldTextData::Cast( firstNamefield->FieldData() );
- firstNameText.SetTextL(*firstName);
- storedContact->AddFieldL(firstNamefield); // firstNamefield ownership transfered to storedContact
- CleanupStack::Pop(); //firstNamefield 2
- CleanupStack::PopAndDestroy(firstName); // 3
- }//End if (firstName)
-
- TRACE( "first name field created" );
- }//end of if.
- }//end of for.
- TRACE( "iCommitOperationInProgress = %d",iCommitOperationInProgress );
- if( iCommitOperationInProgress )
- {
- TRACE("inside if" );
- iUnCommittedVPbkContacts.AppendL( storedContact ); //takes ownership
- CleanupStack::Pop(); //storedContact
- }
- else
- {
- TRACE( "inside else");
- iCommitOperationInProgress = ETrue;
- if(iStoreContact)
- {
- delete iStoreContact;
- iStoreContact = NULL;
- }
- TRACE( "contact fields added" );
- iStoreContact = storedContact;
- CleanupStack::Pop(); //storedContact
- iStoreContact->CommitL(*this);
- iStoreEventType = EVPbkContactAdded;
- }
- TRACE( "contact commited");
- //Start the wait untill adding of new contact is complete
- }
- }
- //return the added contact
- TRACE( "iOperationError =%d",iOperationError );
-
- return iOperationError;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::CommitNextPendingContactsL
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::CommitNextPendingContactsL()
- {
-
- TRACER_AUTO;
- TRACE("iStoreEventType = %d",iStoreEventType );
- if( !iCommitOperationInProgress && iUnCommittedVPbkContacts.Count() && iStoreEventType != EVPbkUpdatingAvatar)
- {
- TRACE( " Commit next" );
- iCommitOperationInProgress = ETrue;
- if(iStoreContact)
- {
- delete iStoreContact;
- iStoreContact = NULL;
- }
- TRACE( "comming..." );
- iStoreContact = iUnCommittedVPbkContacts[0];
- iUnCommittedVPbkContacts.Remove(0);
- iUnCommittedVPbkContacts.Compress();
- iStoreContact->CommitL(*this);
- iStoreEventType = EVPbkContactSynchronizing;
- TRACE( " Commit called" );
- }
- else if(!iCommitOperationInProgress && iPendingAvatars.Count() && iStoreEventType != EVPbkUpdatingAvatar)
- {
- TRACE( "Commit next pending avatar" );
- TVIMPSTAvatarData avatarData = iPendingAvatars[0];
- UpdateAvatarFieldDataL( *avatarData.iContactLink, *avatarData.iAvatarContent );
- iPendingAvatars.Remove( 0 );
- delete avatarData.iContactLink;
- avatarData.iContactLink = NULL;
- delete avatarData.iAvatarContent;
- avatarData.iAvatarContent = NULL;
- iPendingAvatars.Compress();
- }
-
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::RemoveVPbkContactL
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageVPbkStoreHandler::RemoveVPbkContactL(const CVPbkContactLinkArray& aContactLinkArray )
- {
- TRACER_AUTO;
- // text now holds the name (or first field of the contact)
- delete iContactOperation;
- iContactOperation = NULL;
- iContactOperation = iContactManager->DeleteContactsL(aContactLinkArray, *this );
- if( !iWait.IsStarted() )
- {
- iWait.Start();
- }
- TRACE( "iOperationError=%d",iOperationError );
-
- return iOperationError;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::RetrieveVPbkContactL
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageVPbkStoreHandler::RetrieveVPbkContactL(const TDesC8& aPackedLinks)
- {
- TRACER_AUTO;
- iStoreEventType = EVPbkContactRetriving;
- CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewLC(aPackedLinks, *iStores );
- // text now holds the name (or first field of the contact)
- TInt count = linkArray->Count();
- TRACE( "count=%d",count );
- for ( TInt i=0; i<count; i++ )
- {
- delete iContactLink;
- iContactLink = NULL;
- // local variable caz cant push member variable to cleanup stack
- MVPbkContactLink* cloneLink = linkArray->At( i ).CloneLC();
- iContactLink = cloneLink;
- CleanupStack::Pop(); // cloneLink
-
- delete iContactOperation;
- iContactOperation = NULL;
-
- iContactOperation = iContactManager->RetrieveContactL( *iContactLink, *this );
- if( !iWait.IsStarted() )
- {
- iWait.Start();
- }
- }
- CleanupStack::PopAndDestroy();//linkArray
-
- return iOperationError;
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::UpdateAvatarFieldDataL()
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageVPbkStoreHandler::UpdateAvatarFieldDataL(const MVPbkContactLink& aContactLink,
- const TDesC8& aAvatartData )
- {
- TRACER_AUTO;
-
- // local variable caz cant push member variable to cleanup stack
- MVPbkContactLink* cloneLink = aContactLink.CloneLC();
- TRACE( "iCommitOperationInProgress: %d",iCommitOperationInProgress );
- TRACE( "iUnCommittedVPbkContacts: %d",iUnCommittedVPbkContacts.Count() );
- if(iCommitOperationInProgress || iUnCommittedVPbkContacts.Count() || iStoreEventType == EVPbkUpdatingAvatar )
- {
- TRACE( "Inside if" );
- TVIMPSTAvatarData avatarData = {
- cloneLink,
- aAvatartData.AllocL()
- };
- iPendingAvatars.Append( avatarData );
- CleanupStack::Pop(); // cloneLink
- return KErrInUse;
- }
- iCommitOperationInProgress = ETrue;
- TRACE( "Inside after if" );
- delete iContactLink;
- iContactLink = NULL;
- iContactLink = cloneLink;
- CleanupStack::Pop(); // cloneLink
-
- //before updating the avatar, check if there are any pending operation already, if there are any,
- // then delete them and create the next one.
- if(iContactOperation)
- {
- delete iContactOperation;
- iContactOperation = NULL;
- }
- iStoreEventType = EVPbkUpdatingAvatar;
- iContactOperation = iContactManager->RetrieveContactL( *iContactLink, *this );
- if( !iWait.IsStarted() )
- {
- iWait.Start();
- }
- // exception KErrInUse If another asynchronous operation is
- // already in progress.
- // exception KErrAccessDenied if the contact can not be modified.
- iStoreContact->LockL(*this);
-
-
- //wait till lock operation is succeded
- if(!iWait.IsStarted() )
- {
- iWait.Start();
- }
- TInt fieldcount = iStoreContact->Fields().FieldCount();
- for( TInt j = 0 ; j < fieldcount ; j++ )
- {
- const MVPbkFieldType* fieldType = iStoreContact->Fields().FieldAt(j).BestMatchingFieldType();
- if( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_THUMBNAILPIC )
- {
- iStoreContact->RemoveField(j);
- break;
- }
- }
- if( aAvatartData.Length() )
- {
- const MVPbkContactStoreProperties& storeProperties = iStoreContact->ParentStore().StoreProperties();
- const MVPbkFieldTypeList& supportedFieldTypes = storeProperties.SupportedFields();
- TInt fieldCount = supportedFieldTypes.FieldTypeCount();
- for( TInt index = 0 ; index < fieldCount ; index++ )
- {
- const MVPbkFieldType* fieldType = &( supportedFieldTypes.FieldTypeAt(index) );
- //find the relevant voip fields/email id fileds.
- if ( fieldType && ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_THUMBNAILPIC ) )
- {
- //updating avatar field in the virtual phonebook
- //found the required fieldtype
- MVPbkStoreContactField* storeField = iStoreContact->CreateFieldLC(*fieldType);
- // The aField instance can not be used after AddFieldL
- //storeField ownership is transferred
- TInt fieldIndex = iStoreContact->AddFieldL(storeField);
- MVPbkContactFieldData& dataField = iStoreContact->Fields().FieldAt( fieldIndex ).FieldData();
- MVPbkContactFieldBinaryData& data = MVPbkContactFieldBinaryData::Cast(dataField);
- data.SetBinaryDataL(aAvatartData);
- CleanupStack::Pop(); // storeField
- break;
- }
- }
- }
- TRACE( "Inside after if(avatardata.length)" );
- iStoreEventType = EVPbkContactChanged;
- TRACE( "Inside after if(avatardata.length ): %d",iStoreEventType );
- iStoreContact->CommitL(*this);
- //wait for delete Avatar operation to complete.
- if(!iWait.IsStarted() )
- {
- iWait.Start();
- }
-
- return iOperationError;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::RemoveAvatarFieldL()
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTStorageVPbkStoreHandler::RemoveAvatarFieldL(MVPbkStoreContact& aStoreContact)
- {
- TRACER_AUTO;
- aStoreContact.LockL(*this);
- //wait till lock operation is succeded
- if(!iWait.IsStarted() )
- {
- iWait.Start();
- }
- TInt fieldcount = aStoreContact.Fields().FieldCount();
- for( TInt j = 0 ; j < fieldcount ; j++ )
- {
- const MVPbkFieldType* fieldType = aStoreContact.Fields().FieldAt(j).BestMatchingFieldType();
- if( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_THUMBNAILPIC )
- {
- aStoreContact.RemoveField(j);
- break;
- }
- }
- aStoreContact.CommitL(*this);
- //wait for delete Avatar operation to complete.
- if(!iWait.IsStarted() )
- {
- iWait.Start();
- }
- TRACE( "iOperationError =%d",iOperationError );
-
- return iOperationError;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::GetContactFieldDataLC()
-// ---------------------------------------------------------------------------
-//
-HBufC* CVIMPSTStorageVPbkStoreHandler::GetContactFieldDataLC(const MVPbkStoreContact& aContact,
- TInt aFieldResId )
- {
- TRACER_AUTO;
- HBufC* retValue = NULL;
- const MVPbkStoreContactFieldCollection& fieldCollection = aContact.Fields();
- TInt fieldCount = fieldCollection.FieldCount();
- TRACE( " fieldCount%d",fieldCount );
- for( TInt index = 0 ; index < fieldCount ; index++ )
- {
- const MVPbkStoreContactField& field = fieldCollection.FieldAt( index );
- const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
- //find the relevant xSP field
- if ( fieldType && ( fieldType->FieldTypeResId() == aFieldResId ) )
- {
- const MVPbkContactFieldData& fieldData = field.FieldData();
- switch( fieldData.DataType() )
- {
- case EVPbkFieldStorageTypeText:
- {
- TRACE(" Text" );
- retValue = MVPbkContactFieldTextData::Cast(fieldData).Text().AllocLC();
- break;
- }
- case EVPbkFieldStorageTypeUri:
- {
- TRACE(" Uri ");
- retValue = MVPbkContactFieldUriData::Cast(fieldData).Text().AllocLC();
- break;
- }
-
- }//End switch
- if( aFieldResId == R_VPBK_FIELD_TYPE_IMPP && retValue )
- {
- TRACE( " IMPP fild found");
- // TODO RAMC : Nikhil/Mukesh
- // in case of srver contacts it also find the first valid xsp id
- // not valid through NULL
- // which can be clarified
- // earlier it show selection query in UI which one to use
- TPtrC scheme = MVPbkContactFieldUriData::Cast(fieldData).Scheme();
- if( scheme.Compare( *iServiceName ) == 0 )
- {
- TRACE( " actual xsp Id found");
- // actual xsp id found break the loop and return
- break;
- }
- else
- {
- // actual xsp not yet found continue looking
- CleanupStack::PopAndDestroy(); // retValue;
- retValue = NULL;
- }
- }
- else if( retValue )
- {
- // break this loop once the given aFieldResId is found
- // with valid data
- break;
- }
- }
- }
- if( !retValue )
- {
- TRACE( " NULL value");
- // if NULL assign valid ptr
- retValue = KNullDesC().AllocLC();
- }
-
- return retValue;// ownership is return to caller
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::GetContactBinaryFieldDataLC()
-// ---------------------------------------------------------------------------
-//
-HBufC8* CVIMPSTStorageVPbkStoreHandler::GetContactBinaryFieldDataLC(const MVPbkStoreContact& aContact,
- TInt aFieldResId )
- {
- TRACER_AUTO;
- HBufC8* retValue = NULL;
- const MVPbkStoreContactFieldCollection& fieldCollection = aContact.Fields();
- TInt fieldCount = fieldCollection.FieldCount();
- TRACE( "fieldCount%d",fieldCount );
- for( TInt index = 0 ; index < fieldCount ; index++ )
- {
- const MVPbkStoreContactField& field = fieldCollection.FieldAt( index );
- const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
- //find the relevant xSP field
- if ( fieldType && ( fieldType->FieldTypeResId() == aFieldResId ) )
- {
- const MVPbkContactFieldData& fieldData = field.FieldData();
- switch( fieldData.DataType() )
- {
- case EVPbkFieldStorageTypeBinary:
- {
- TRACE( " Text" );
- retValue = MVPbkContactFieldBinaryData::Cast(fieldData).BinaryData().AllocLC();
- break;
- }
- }//End switch
- if( retValue )
- {
- // break this loop once the given aFieldResId is found
- // with valid data
- break;
- }
- }
- }
- if( !retValue )
- {
- TRACE( " NULL value");
- // if NULL assign valid ptr
- retValue = KNullDesC8().AllocLC();
- }
-
- return retValue;// ownership is return to caller
- }
-
-
-// ---------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::RetriveFieldDataAndSendEventL
-//
-// ---------------------------------------------------------
-void CVIMPSTStorageVPbkStoreHandler::RetriveFieldDataAndSendEventL(const MVPbkStoreContact& aContact )
- {
- TRACER_AUTO;
- HBufC* retValue = NULL;
- const MVPbkStoreContactFieldCollection& fieldCollection = aContact.Fields();
- TInt fieldCount = fieldCollection.FieldCount();
- for( TInt index = 0 ; index < fieldCount ; index++ )
- {
- const MVPbkStoreContactField& field = fieldCollection.FieldAt( index );
- const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
- //find the relevant xSP field
- //if ( fieldType && ( fieldType->FieldTypeResId() == aFieldResId ) )
- if ( fieldType && (( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_IMPP )
- || (fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEHOME )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEWORK )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPWORK )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPHOME )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LANDPHONEGEN )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_VOIPGEN )
- ||(fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_SIP ) ))
- {
- const MVPbkContactFieldData& fieldData = field.FieldData();
- switch( fieldData.DataType() )
- {
- case EVPbkFieldStorageTypeText:
- {
- TRACE( "Text" );
- retValue = MVPbkContactFieldTextData::Cast(fieldData).Text().AllocLC();
- break;
- }
- case EVPbkFieldStorageTypeUri:
- {
- TRACE( "begin" ) ;
- retValue = MVPbkContactFieldUriData::Cast(fieldData).Text().AllocLC();
- break;
- }
-
- }//End switch
- if( retValue )
- {
- TRACE( " begin" );
- TVIMPSTVPbkStoreEvent storeEvent(iStoreEventType,
- NULL,
- NULL,
- *retValue,
- KNullDesC );
- iStoreHandler.HandleVPbkStoreEventL( storeEvent ) ;
- CleanupStack::PopAndDestroy(); // retValue;
- retValue = NULL;
- }
- }
- }
-
- }
-
-// ---------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::RemoveAllVPbkContactsL
-//
-// ---------------------------------------------------------
-TInt CVIMPSTStorageVPbkStoreHandler::RemoveAllVPbkContactsL()
- {
- TRACER_AUTO;
- TRACE( " before if" );
- if(iAddIdInProgress)
- {
- TPtr iAddIdInProgressPtr = iAddIdInProgress->Des();
- TRACE( "iAddIdInProgressPtr = %S", &iAddIdInProgressPtr );
- delete iAddIdInProgress;
- iAddIdInProgress = NULL;
- }
- // intialize it to efalse as, somewhere it would have missed.
- iCommitOperationInProgress = EFalse;
- TRACE( " After if");
- TInt count = 0;
- if( iContactView )
- {
- count = iContactView->ContactCountL();
- }
- TRACE( "count = %d",count) ;
- TPtr iStoreNamePtr(iStoreName->Des() );
- TInt index = iStoreNamePtr.Find(_L(":") );
- if( index >= 0 && count )
- {
- TPtrC store = iStoreNamePtr.Right( iStoreNamePtr.Length() - index -3 );
- CContactIdArray* contactIds = CContactIdArray::NewLC();
- CContactDatabase* contactDb = NULL;
- //Open the database
- TRAPD(err, contactDb = CContactDatabase::OpenL( store ) );
- if(err == KErrNone )
- {
- CleanupStack::PushL( contactDb );
- // rest if already old ids exist
- contactIds->Reset();
- TContactIter iterator(*contactDb);
- TContactItemId contactId = iterator.FirstL();
- while(contactId != KNullContactId)
- {
- TRACE( "in side while" );
- // store into iContactIds for later deletion of contacts
- contactIds->AddL(contactId );
- // get the next contactids
- contactId = iterator.NextL();
- }
- contactDb->DeleteContactsL(*contactIds);
- // reset old ids
- contactIds->Reset();
- CleanupStack::PopAndDestroy( contactDb );
- }
- CleanupStack::PopAndDestroy( contactIds );
- }
-
- return count;
- }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTStorageVPbkStoreHandler::ResetAndDestroyRArray
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTStorageVPbkStoreHandler::ResetAndDestroyRArray()
- {
- TRACER_AUTO;
- TInt count = iPendingAvatars.Count();
- while( count )
- {
- TVIMPSTAvatarData contactInf = iPendingAvatars[ 0 ];
- iPendingAvatars.Remove(0 );
- delete contactInf.iAvatarContent;
- contactInf.iAvatarContent = NULL;
- delete contactInf.iContactLink;
- contactInf.iContactLink = NULL;
- // not exist need to add
- iPendingAvatars.Compress();
- count = iPendingAvatars.Count();
- }
- iPendingAvatars.Reset();
-
- }
-// End of file