diff -r 2b7283837edb -r 3104fc151679 uiservicetab/vimpststorage/src/cvimpststoragevpbklocalstore.cpp --- a/uiservicetab/vimpststorage/src/cvimpststoragevpbklocalstore.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1071 +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 local store -* -*/ - -// INCLUDE FILES -#include -#include "cvimpststoragevpbklocalstore.h" - -#include "cvimpststoragevpbkstorehandler.h" - -#include -#include -#include "mvimpststorageserviceview.h" -#include "uiservicetabtracer.h" -#include "tvimpstconsts.h" -#include -#include -#include "cvimpststoragecontact.h" -#include "vimpststorageutils.h" - -#include -#include - - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore:: -// CVIMPSTStorageVPbkLocalStore -// --------------------------------------------------------------------------- -// -CVIMPSTStorageVPbkLocalStore:: CVIMPSTStorageVPbkLocalStore( MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ): - CActive( CActive::EPriorityIdle ), - iServiceCacheWriter( aServiceCacheWriter ), - iFetchStep( EFetchingUnknown ) - { - TRACER_AUTO; - CActiveScheduler::Add( this ); - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::NewL -// --------------------------------------------------------------------------- -// -CVIMPSTStorageVPbkLocalStore* CVIMPSTStorageVPbkLocalStore::NewL( const TDesC& aContactDb, - const TDesC& aServiceName, - MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ) - { - TRACER_AUTO; - CVIMPSTStorageVPbkLocalStore* self = NewLC( aContactDb, - aServiceName, - aServiceCacheWriter); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::NewLC -// --------------------------------------------------------------------------- -// -CVIMPSTStorageVPbkLocalStore* - CVIMPSTStorageVPbkLocalStore::NewLC( const TDesC& aContactDb, - const TDesC& aServiceName, - MVIMPSTStorageServiceCacheWriter& aServiceCacheWriter ) - { - TRACER_AUTO; - - CVIMPSTStorageVPbkLocalStore* self = - new (ELeave) CVIMPSTStorageVPbkLocalStore(aServiceCacheWriter); - CleanupStack::PushL( self ); - self->ConstructL( aContactDb, aServiceName ); - - return self; - } -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::ConstructL -// --------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::ConstructL( const TDesC& aContactDb, const TDesC& aServiceName ) - { - TRACER_AUTO; - - iVPbkStoreHandler = CVIMPSTStorageVPbkStoreHandler::NewL( aContactDb ,aServiceName, *this,ETrue ); - TRACE( "iVPbkStoreHandler created" ); - //construct the persistent store name - iLocalDBName = HBufC::NewL( aServiceName.Length()+ KStorageExtn().Length()); - TPtr iLocalDBNamePtr = iLocalDBName->Des(); - iLocalDBNamePtr.Append(aServiceName); - _LIT(KSpecialChar ,"/\\:*?<>\""); - AknTextUtils :: StripCharacters(iLocalDBNamePtr,KSpecialChar); - iLocalDBNamePtr.Append(KStorageExtn()); - TRACE( "iLocalDBNamePtr: %S", &iLocalDBNamePtr ); - MVPbkContactStore* defaultStore = iVPbkStoreHandler->GetDefaultStoreL( aContactDb ); - User::LeaveIfNull(defaultStore); - TRACE("defaultStore retrived" ); - iIdConverter = CVPbkContactIdConverter::NewL(*defaultStore); - TRACE( "iIdConverter created" ); - User::LeaveIfError( iFs.Connect() ); - // Open existing or create new database. - TRACE( "connected to file server" ); - if ( DbExists() ) - { - TRACE( "local db exist" ); - OpenDbL(); - TRACE( "open success" ); - } - else - { - TRACE("local db not exist" ); - DoFreespaceLevelCheckL( KEmptyDbSize ); - CreateDbL(); - TRACE("local db created"); - } - OpenTableL(); - TRACE("OpenTableL success " ); - iColset = iDb.ColSetL( KContactTable ); - TRACE( " iColset is set" ); - - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore:: -// ~CVIMPSTStorageVPbkLocalStore -// --------------------------------------------------------------------------- -// -CVIMPSTStorageVPbkLocalStore::~CVIMPSTStorageVPbkLocalStore() - { - TRACER_AUTO; - - iRetrivedContactArray.ResetAndDestroy(); - TRAP_IGNORE( ResetAndDestroyLocalArrayL() ); - - CloseTable(); - delete iColset; - CloseDb(); - iFs.Close(); - - delete iLocalDBName; - delete iIdConverter; - delete iInviteId; - delete iVPbkStoreHandler; - - } - - // --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore:: -// ResetAndDestroyLocalArrayL -// --------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::ResetAndDestroyLocalArrayL() - { - TRACER_AUTO; - TInt count = iFetchContactsToBeAdded.Count(); - while( count ) - { - TVIMPSTContactInfo contactInf = iFetchContactsToBeAdded[ count-1 ]; - iFetchContactsToBeAdded.Remove( count-1 ); - delete contactInf.iUserId; - contactInf.iUserId = NULL; - delete contactInf.iDisplayName; - contactInf.iDisplayName = NULL; - // not exist need to add - iFetchContactsToBeAdded.Compress(); - count = iFetchContactsToBeAdded.Count(); - } - iFetchContactsToBeAdded.Reset(); - - } - -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::LocalStore -// ---------------------------------------------------------- -// -TBool CVIMPSTStorageVPbkLocalStore::LocalStore() const - { - TRACER_AUTO; - return ETrue; - } -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::HandleVPbkStoreEventL -// --------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::HandleVPbkStoreEventL(TVIMPSTVPbkStoreEvent aVPbkStoreEvent) - { - TRACER_AUTO; - switch( aVPbkStoreEvent.iEventType ) - { - case EVPbkContactReadCompleted: - { - TRACE( " EVPbkContactReadCompleted started" ); - iServiceCacheWriter.NotifyServiceViewL(TVIMPSTEnums::EStorageContactReadComplete); - if( iFetchStep == EFetchingCalled ) - { - TRACE( " EVPbkContactReadCompleted EFetchingCalled " ); - IssueRequest(); - } - iFetchStep = EContactReadComplete; - TRACE( "EContactReadComplete completed " ); - break; - } - case EVPbkContactReading: - { - // a contact entry has been created in virtual database store - // create the cache contact - TInt32 linkId = iIdConverter->LinkToIdentifier(*aVPbkStoreEvent.iContactLink ); - TDbColNo colNo = iColset->ColNo( KContactId ); - if ( SeekRowL( colNo, linkId ) ) - { - TRACE( "EVPbkContactReading contact" ); - /* - * This is local store, that is phone book and service tab shares only one cdb file. - * in that case, if somebody edits the cdb file from contacts tab, then also we get the - * callback, then checking for entry in db table makes sens.. - */ - /* - * in case when the user adds a contact from the service tab, then it first tries to add it in the - * cdb file, after that we get this callback, then , there is no way that it will be present in the - * db table, in that case, we will not add it in the cache - which is wrong.. - * so we need to make a differentiation, on how the contact was added.. whether from cotnacts tab - * or from the service tab. --- to solve this issue.. we can store the userid in memberVariable.. - * before making a add request to the VPBK (cdb file).. then in this function, we check if - * the contactid is same as the member variable. aVPbkStoreEvent contains the userid that was added. - * then if it matches, then we know that it was added from our service tab.. and then we can add it in our DB. - */ - // contatc found in local database ,add to storage - iServiceCacheWriter.AddContactToCacheL (*aVPbkStoreEvent.iContactLink , - aVPbkStoreEvent.iUserId , - aVPbkStoreEvent.iDisplayName, - aVPbkStoreEvent.iAvatarContent, - TVIMPSTEnums::EStorageContactReading ); - } - - break; - } - case EVPbkContactFetching: - case EVPbkContactAdded: - { - // a contact entry has been created in virtual database store - // create the cache contact - TInt32 linkId = iIdConverter->LinkToIdentifier(*aVPbkStoreEvent.iContactLink ); - TDbColNo colNo = iColset->ColNo( KContactId ); - if( iFetchStep == EFetchingOn ) - { - TRACE( "EVPbkContactFetching contact" ); - WriteToStoreDbL( linkId ); - iServiceCacheWriter.AddContactToCacheL (*aVPbkStoreEvent.iContactLink , - aVPbkStoreEvent.iUserId , - aVPbkStoreEvent.iDisplayName , - aVPbkStoreEvent.iAvatarContent, - TVIMPSTEnums::EStorageContactFetching ); - IssueRequest(); - } - else if ( SeekRowL( colNo, linkId ) ) - { - TRACE( " EVPbkContactAdded start" ); - /* - * This is local store, that is phone book and service tab shares only one cdb file. - * in that case, if somebody edits the cdb file from contacts tab, then also we get the - * callback, then checking for entry in db table makes sens.. - */ - /* - * in case when the user adds a contact from the service tab, then it first tries to add it in the - * cdb file, after that we get this callback, then , there is no way that it will be present in the - * db table, in that case, we will not add it in the cache - which is wrong.. - * so we need to make a differentiation, on how the contact was added.. whether from cotnacts tab - * or from the service tab. --- to solve this issue.. we can store the userid in memberVariable.. - * before making a add request to the VPBK (cdb file).. then in this function, we check if - * the contactid is same as the member variable. aVPbkStoreEvent contains the userid that was added. - * then if it matches, then we know that it was added from our service tab.. and then we can add it in our DB. - */ - // contatc found in local database ,add to storage - iServiceCacheWriter.AddContactToCacheL (*aVPbkStoreEvent.iContactLink , - aVPbkStoreEvent.iUserId , - aVPbkStoreEvent.iDisplayName, - aVPbkStoreEvent.iAvatarContent, - TVIMPSTEnums::EStorageEventContactAddition ); - TRACE( "EVPbkContactAdded completed" ); - } - else if( iInviteId ) - { - TRACE( "iInviteId accepted" ); - if( IsSameContactIdL( *iInviteId, aVPbkStoreEvent.iUserId ) ) - { - WriteToStoreDbL( linkId ); - iServiceCacheWriter.AddContactToCacheL (*aVPbkStoreEvent.iContactLink , - aVPbkStoreEvent.iUserId , - aVPbkStoreEvent.iDisplayName, - aVPbkStoreEvent.iAvatarContent, - TVIMPSTEnums::EStorageEventContactAddition ); - delete iInviteId; - iInviteId = NULL; - } - TRACE( "iInviteId accepted sucess" ); - } - break; - } - case EVPbkContactSynchronizing: - { - TRACE( "EVPbkContactSynchronizing " ); - // a contact entry has been created in virtual database store - // create the cache contact - TInt32 linkId = iIdConverter->LinkToIdentifier(*aVPbkStoreEvent.iContactLink ); - TDbColNo colNo = iColset->ColNo( KContactId ); - if ( SeekRowL( colNo, linkId ) ) - { - /* - * This is local store, that is phone book and service tab shares only one cdb file. - * in that case, if somebody edits the cdb file from contacts tab, then also we get the - * callback, then checking for entry in db table makes sens.. - */ - /* - * in case when the user adds a contact from the service tab, then it first tries to add it in the - * cdb file, after that we get this callback, then , there is no way that it will be present in the - * db table, in that case, we will not add it in the cache - which is wrong.. - * so we need to make a differentiation, on how the contact was added.. whether from cotnacts tab - * or from the service tab. --- to solve this issue.. we can store the userid in memberVariable.. - * before making a add request to the VPBK (cdb file).. then in this function, we check if - * the contactid is same as the member variable. aVPbkStoreEvent contains the userid that was added. - * then if it matches, then we know that it was added from our service tab.. and then we can add it in our DB. - */ - // contatc found in local database ,add to storage - iServiceCacheWriter.AddContactToCacheL (*aVPbkStoreEvent.iContactLink , - aVPbkStoreEvent.iUserId , - aVPbkStoreEvent.iDisplayName, - aVPbkStoreEvent.iAvatarContent, - TVIMPSTEnums::EStorageContactFetching ); - } - if(iFetchStep == EFetchingOn) - { - TRACE( "EVPbkContactSynchronizing fetchin on" ); - IssueRequest(); - } - TRACE(" EVPbkContactSynchronizing completed" ); - break; - } - case EVPbkContactDeleted: - { - TRACE( "EVPbkContactDeleted" ); - TInt32 linkId = iIdConverter->LinkToIdentifier(*aVPbkStoreEvent.iContactLink ); - // a contact entry has been deleted from virtual database store - TDbColNo colNo = iColset->ColNo( KContactId ); - if ( SeekRowL( colNo, linkId ) ) - { - TRACE( "EVPbkContactDeleted found in db" ); - // contatc found in local database ,delete from local database - DeleteContactFromInternalStoreL( linkId ); - TRACE( "EVPbkContactDeleted deleted from db" ); - // delete from cache contact - iServiceCacheWriter.RemoveContactFromCacheL(*aVPbkStoreEvent.iContactLink, - TVIMPSTEnums::EStorageEventDeleteFromPbk ); - TRACE( "EVPbkContactDeleted deleted from cache" ); - } - break; - } - case EVPbkContactChanged: - { - TRACE( "EVPbkContactChanged "); - TInt32 linkId = iIdConverter->LinkToIdentifier(*aVPbkStoreEvent.iContactLink ); - TDbColNo colNo = iColset->ColNo( KContactId ); - if ( SeekRowL( colNo, linkId ) ) - { - TRACE( "EVPbkContactChanged found in local db" ); - // found in the list update it - iServiceCacheWriter.UpdateCacheContactL(*aVPbkStoreEvent.iContactLink , - aVPbkStoreEvent.iUserId , - aVPbkStoreEvent.iDisplayName, - aVPbkStoreEvent.iAvatarContent ); - TRACE( "EVPbkContactChanged changed in cache"); - } - break; - } - case EVPbkContactRetriving: - { - TRACE( "EVPbkContactRetriving"); - // in case of local we allow all - TRACE( "EVPbkContactRetriving valid Id"); - CVIMPSTStorageContact* retrivedContact = CVIMPSTStorageContact::NewL( aVPbkStoreEvent.iUserId , - aVPbkStoreEvent.iDisplayName, - *aVPbkStoreEvent.iContactLink, - aVPbkStoreEvent.iAvatarContent); - iRetrivedContactArray.Append( retrivedContact ); // takes the ownership of retrivedContact - TRACE( "EVPbkContactRetriving valid Id added" ); - // keep the backup of retrieved contacts - // user can add later once it sent to server - break; - } - case EVPbkUnknownChanges: - { - TRACE("EVPbkUnknownChanges start" ); - DeleteAllContactFromInternalStoreL(); - TRACE( " EVPbkUnknownChanges all delete from db" ); - // unknow mean all contact deleted from store - iServiceCacheWriter.RemoveAllCacheContactsL(); - TRACE( " EVPbkUnknownChanges all delete from cache" ); - break; - } - default: - break; - } - - } - - -// -------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::IssueRequest -// -------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::IssueRequest() - { - TRACER_AUTO; - if( !IsActive() ) - { - TRACE( "SetActive" ); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - } - - } - -// -------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::RunL -// -------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::RunL() - { - TRACER_AUTO; - TInt count = iFetchContactsToBeAdded.Count(); - TRACE( "count to be added = %d ",count ); - if( !count ) - { - TRACE(" fetch completed " ); - iFetchStep = EContactReadComplete; - iServiceCacheWriter.NotifyServiceViewL( TVIMPSTEnums::EStorageContactFetchComplete ); - TRACE( "fetch completed notification sent" ); - } - else - { - TRACE( "fetch in progress" ); - iFetchStep = EFetchingOn; - TVIMPSTContactInfo contactInfoToAdd = iFetchContactsToBeAdded[0]; - MVIMPSTStorageContact* exist = iServiceCacheWriter.FindCacheContactByUserId( *contactInfoToAdd.iUserId ); - if( exist ) - { - // contact is already exist ,send the notification about this - iServiceCacheWriter.NotifyServiceViewL(TVIMPSTEnums::EStorageContactFetchExistInStore, exist ); - TRACE( " fetch in progress id exist" ); - // process next - IssueRequest(); - } - else - { - TRACE( "fetch in progress create id in store called" ); - // pass the display NAme in place of NULL - iVPbkStoreHandler->CreateVPbkContactL( *contactInfoToAdd.iUserId, *contactInfoToAdd.iDisplayName ); // process always 0th item - } - iFetchContactsToBeAdded.Remove( 0 ); - delete contactInfoToAdd.iUserId; - contactInfoToAdd.iUserId = NULL; - delete contactInfoToAdd.iDisplayName; - contactInfoToAdd.iDisplayName = NULL ; - iFetchContactsToBeAdded.Compress(); - TRACE( "fetch in progress iFetchContactsToBeAdded ,one entry removed" ); - } - - } - -// -------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::DoCancel -// -------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::DoCancel() - { - TRACER_AUTO; - } - -// -------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::RunError -// -------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::RunError( TInt aError ) - { - TRACER_AUTO; - return aError; - } - -////////////////////////////////////////////////////////// -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::CreateVPbkContactL -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::CreateVPbkContactL(const TDesC& aUserId, - const TDesC& aDisplayName , - TBool aInvitationAutoAccept /* = EFalse */ ) - { - TRACER_AUTO; - TInt error = KErrGeneral; - if( aInvitationAutoAccept) - { - TRACE("autoaccept add contact" ); - delete iInviteId; - iInviteId = NULL; - iInviteId = aUserId.AllocL(); - error = iVPbkStoreHandler->CreateVPbkContactL( *iInviteId,aDisplayName ); - } - TRACE( "error = %d",error ); - - return error; - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::RemoveVPbkContactL -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::RemoveVPbkContactL(const MVPbkContactLink& aContactLink) - { - TRACER_AUTO;; - TInt error = KErrNotFound; - // text now holds the name (or first field of the contact) - TInt32 linkId = iIdConverter->LinkToIdentifier(aContactLink); - // a contact entry has been deleted from virtual database store - TDbColNo colNo = iColset->ColNo( KContactId ); - if ( SeekRowL( colNo, linkId ) ) - { - TRACE( "link exist in db" ); - // contatc found in local database ,delete from local database - DeleteContactFromInternalStoreL( linkId ); - TRACE( "link deleted from db" ); - // delete from cache contact - error = iServiceCacheWriter.RemoveContactFromCacheL(aContactLink, - TVIMPSTEnums::EStorageEventContactDelete ); - TRACE( "link deleted from cache" ); - } - TRACE("error %d",error ); - - return error; - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::RemoveAllVPbkContactsL -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::RemoveAllVPbkContactsL() - { - TRACER_AUTO; - iRetrivedContactArray.ResetAndDestroy(); - DeleteAllContactFromInternalStoreL(); - TRACE( "all contacts deleted from db" ); - iServiceCacheWriter.RemoveAllCacheContactsL(); - TRACE( "all contacts deleted from cache" ); - - return KErrNone;// local store : delete from local store ,own user has changed - } -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::RetrieveVPbkXSPIdL -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::RetrieveVPbkXSPIdL(const TDesC8& aPackedLinks ) - { - TRACER_AUTO; - iRetrivedContactArray.ResetAndDestroy(); - TRACE( " iRetrivedContactArray Reset" ); - iVPbkStoreHandler->RetrieveVPbkContactL( aPackedLinks ); - TRACE( "iRetrivedContactArray count= %d " ,iRetrivedContactArray.Count() ); - - return iRetrivedContactArray.Count(); - } - - // --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::GetRetrieveVPbkXSPIdL -// --------------------------------------------------------------------------- -// -const TDesC& CVIMPSTStorageVPbkLocalStore::GetRetrieveVPbkXSPIdL(TInt aIndex ) - { - TRACER_AUTO; - TRACE( "aIndex = %d" ,aIndex ); - MVIMPSTStorageContact* contact = NULL; - if( aIndex >= 0 && aIndex < iRetrivedContactArray.Count() ) - { - contact = iRetrivedContactArray[ aIndex ]; - } - - return contact ? contact->UserId() : KNullDesC ; - } -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::CreateRetriveVPbkContactL -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::CreateRetriveVPbkContactL( TInt aIndexToUse ) - { - TRACER_AUTO; - if( aIndexToUse < 0 && aIndexToUse >= iRetrivedContactArray.Count() ) - { - TRACE( " argument error" ); - return KErrArgument; - } - TInt error = KErrAlreadyExists; - MVIMPSTStorageContact* retrivedContact = iRetrivedContactArray[ aIndexToUse ]; - - MVPbkContactLink* contactLink = retrivedContact->ContactLink(); - MVIMPSTStorageContact* exist = NULL; - if( contactLink ) - { - exist = iServiceCacheWriter.FindCacheContactByLink( *contactLink ); - } - if( !exist ) - { - TRACE( "adding to cache" ); - MVPbkContactLink* link = retrivedContact->ContactLink(); - if( link ) - { - CVIMPSTStorageContact* contactToAdd = CVIMPSTStorageContact::NewL( retrivedContact->UserId() , - retrivedContact->Name(), - *link, - retrivedContact->AvatarContent() - ); - CleanupStack::PushL( contactToAdd ); - TInt32 linkId = iIdConverter->LinkToIdentifier( *link ); - error = iServiceCacheWriter.AddStorageContactToCacheL( contactToAdd ); // contactToAdd ownership is transfered - TRACE( " adding to cache done" ); - if( error == KErrNone ) - { - CleanupStack::Pop(); // contactToAdd , Ownership is transfered to AddStorageContactToCacheL - WriteToStoreDbL( linkId ); - } - else - { - CleanupStack::PopAndDestroy(); // contactToAdd - } - TRACE( " adding to db done" ); - } - } - TRACE( "error =%d" ,error ); - - return error; - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::deleteRetriveVPbkContactL -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::deleteRetriveVPbkContactL( TInt aIndexToUse ) - { - TRACER_AUTO; - if( aIndexToUse < 0 && aIndexToUse >= iRetrivedContactArray.Count() ) - { - TRACE( "argument error" ); - return KErrArgument; - } - MVIMPSTStorageContact* retrivedContact = iRetrivedContactArray[ aIndexToUse ]; - MVPbkContactLink* contactLink = retrivedContact->ContactLink(); - // delete from cache contact - CVPbkContactLinkArray* contactsToDelete = CVPbkContactLinkArray::NewLC(); - MVPbkContactLink* link = contactLink->CloneLC(); - contactsToDelete->AppendL( link ); // takes ownership - CleanupStack::Pop(); // link - TInt error = iVPbkStoreHandler->RemoveVPbkContactL( *contactsToDelete ); - CleanupStack::PopAndDestroy(); // contactsToDelete - - return error; - } -// CVIMPSTStorageVPbkLocalStore::UpdateAvatarFieldDataL() -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::UpdateAvatarFieldDataL(const MVPbkContactLink& aContactLink, - const TDesC8& aAvatartData ) - { - TRACER_AUTO; - return iVPbkStoreHandler->UpdateAvatarFieldDataL( aContactLink, aAvatartData ); - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::RemoveAvatarFieldL() -// --------------------------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::RemoveAvatarFieldL(MVPbkStoreContact& aStoreContact) - { - TRACER_AUTO; - return iVPbkStoreHandler->RemoveAvatarFieldL( aStoreContact ); - } - -// --------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::AddVPbkFetchContactsL() -// --------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::AddVPbkFetchContactsL( RArray & aFirstNameList, - RArray &aServiceField ) - { - TRACER_AUTO; - // in case of server contacts delete all contacts - ResetAndDestroyLocalArrayL(); - TInt count = aServiceField.Count(); - TRACE( " count=%d" ,count ); - for( TInt i = 0; i storagePath; - - storagePath.Append( KDbPath ); - storagePath.Append( *iLocalDBName ); - TBool ret = ETrue; - TInt err( temp.Open( iFs, *(&storagePath), EFileShareReadersOrWriters|EFileRead ) ); - TInt size( 0 ); - if ( err == KErrNone ) - { - temp.Size( size ); - } - temp.Close(); - if ( (size == 0) || ( err != KErrNone ) ) - { - ret = EFalse; - } - - return ret; - } - - -// ----------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::CreateDbL -// ----------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::CreateDbL() - { - TRACER_AUTO; - TBuf< KMaxPath > storagePath; - storagePath.Append( KDbPath ); - iFs.MkDirAll( storagePath ); // make sure the directory exists - storagePath.Append( *iLocalDBName ); - iFs.SetAtt( *iLocalDBName ,KEntryAttHidden|KEntryAttSystem , KEntryAttNormal); - iFileStore = CPermanentFileStore::ReplaceL( iFs, storagePath, EFileShareReadersOrWriters|EFileWrite ); - - iFileStore->SetTypeL( iFileStore->Layout() ); - - TStreamId streamId( 0 ); - TRAPD( err, streamId = iDb.CreateL( iFileStore ) ); - - if( err ) - { - TRACE( " err = %d" ,err ); - delete iFileStore; - iFileStore = NULL; - - // remember to keep this updated - iFs.Delete( storagePath ); - User::Leave( err ); - } - - iFileStore->SetRootL( streamId ); - TInt err2( iFileStore->Commit() ); - User::LeaveIfError( err2 ); - - TRAPD( err3, CreateTablesL() ); - if( err3 ) - { - delete iFileStore; - iFileStore = NULL; - iDb.Close(); - iFs.Delete( storagePath ); - User::Leave( err3 ); - } - - } - -// ----------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::OpenDbL -// ----------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::OpenDbL() - { - TRACER_AUTO; - TBuf< KMaxPath > storagePath; - storagePath.Append( KDbPath ); - storagePath.Append( *iLocalDBName ); - iFileStore = CPermanentFileStore::OpenL( iFs, storagePath, EFileShareReadersOrWriters|EFileWrite ); - iFileStore->SetTypeL( iFileStore->Layout() ); - iDb.OpenL( iFileStore, iFileStore->Root() ); - - } - -// ----------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::CloseDb -// ----------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::CloseDb() - { - TRACER_AUTO; - delete iFileStore; - iFileStore = NULL; - iDb.Close(); - - } - -// ----------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::CreateTablesL -// ----------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::CreateTablesL() - { - TRACER_AUTO; - CDbColSet* contactId = CDbColSet::NewLC(); - - AddColumnL( KContactId, EDbColInt32, contactId ); - - TInt err = iDb.CreateTable( KContactTable, *contactId ); - TRACE( "err = %d" ,err ); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( contactId ); - - } - -// ----------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::AddColumnL -// ----------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::AddColumnL( const TDesC& aName, TDbColType aType, CDbColSet* aColset ) - { - TRACER_AUTO; - TDbCol column( aName, aType ); - aColset->AddL( column ); - - } - -// ----------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::DoFreespaceLevelCheckL -// ----------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::DoFreespaceLevelCheckL( TInt aSize ) - { - TRACER_AUTO; - if ( SysUtil::FFSSpaceBelowCriticalLevelL( &iFs, aSize ) ) - { - User::Leave( KErrDiskFull ); - } - - } - -// ----------------------------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::DeleteAllContactFromInternalStoreL -// ----------------------------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::DeleteAllContactFromInternalStoreL() - { - TRACER_AUTO; - iColset->ColNo( KContactId ); - iTable.LastL(); - while( !iTable.IsEmptyL() ) - { - iTable.GetL(); - iTable.DeleteL(); - iDb.Compact(); - // delete alwasy first item untill table is empty - iTable.LastL(); - } - - } -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::DeleteContactFromInternalStoreL -// ---------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::DeleteContactFromInternalStoreL( TInt32& aIdentifier ) - { - TRACER_AUTO; - TDbColNo colNo = iColset->ColNo( KContactId ); - if ( SeekRowL( colNo, aIdentifier ) ) - { - iTable.DeleteL(); - iDb.Compact(); - TRACE( "found deleted" ); - } - - } - -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::WriteToStoreDbL -// ---------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::WriteToStoreDbL( TInt32& aIdentifier ) - { - TRACER_AUTO; - TDbColNo colNo = iColset->ColNo( KContactId ); - if (!SeekRowL( colNo, aIdentifier ) ) - { - iTable.InsertL(); - - colNo = iColset->ColNo( KContactId ); - iTable.SetColL( colNo, aIdentifier ); - - // Write row to table - TRAPD( err, iTable.PutL() ); - if( err != KErrNone ) - { - // recover - iTable.Cancel(); - iTable.Reset(); - } - } - - } -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::OpenTableL -// ---------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::OpenTableL() - { - TRACER_AUTO; - TInt err( iTable.Open( iDb, KContactTable ) ); - if ( err != KErrNone ) - { - TRACE( " err =%d" ,err ); - iTable.Close(); - User::Leave( err ); - } - - } - -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::CloseTable -// ---------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::CloseTable() - { - TRACER_AUTO; - iTable.Close(); - - } - -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::ReadFirstL -// ---------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::ReadFirstL( TInt32& aIdentifier ) - { - TRACER_AUTO; - iTable.BeginningL(); - - return ReadNextL( aIdentifier ); - } - -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::ReadNextL -// ---------------------------------------------------------- -// -TInt CVIMPSTStorageVPbkLocalStore::ReadNextL( TInt32& aIdentifier ) - { - TRACER_AUTO; - TInt err = KErrNotFound; - if ( iTable.NextL() ) - { - TRAP( err, ReadCurrentL( aIdentifier ) ); - // For some reason ReadCurrentL leaves with KErrEof, - // even if the contact was read succesfully. - } - TRACE( " err = %d" ,err ); - - return err; - } - - -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::ReadCurrentL -// ---------------------------------------------------------- -// -void CVIMPSTStorageVPbkLocalStore::ReadCurrentL( TInt32& aIdentifier ) - { - TRACER_AUTO; - iTable.GetL(); - // Get Column number for contact data size - TDbColNo colNo = iColset->ColNo( KContactId ); - aIdentifier = iTable.ColInt32(colNo); - - } - -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::SeekRowL -// ---------------------------------------------------------- -// -TBool CVIMPSTStorageVPbkLocalStore::SeekRowL( TDbColNo aColNo, TInt32& aIdentifier ) - { - TRACER_AUTO; - TBool ret = EFalse; - iTable.BeginningL(); - while ( iTable.NextL() ) - { - iTable.GetL(); - if ( iTable.ColInt32( aColNo ) == aIdentifier ) - { - ret = ETrue; - break; - } - } - - return ret; - } -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::DeleteDatabaseL -// ---------------------------------------------------------- -void CVIMPSTStorageVPbkLocalStore::DeleteDatabaseL() - { - TRACER_AUTO; - TBuf< KMaxPath > storagePath; - storagePath.Append( KDbPath ); - iFs.MkDirAll( storagePath ); - storagePath.Append( *iLocalDBName ); - //close db before deleting it. - CloseDb(); - iFs.Delete( storagePath ); - - } -// ---------------------------------------------------------- -// CVIMPSTStorageVPbkLocalStore::IsSameContactIdL -// ---------------------------------------------------------- -TBool CVIMPSTStorageVPbkLocalStore::IsSameContactIdL(const TDesC& aFirstId, const TDesC& aSecondId ) - { - TRACER_AUTO; - TInt colIndex = aFirstId.Find(_L(":")); - TPtrC firstId = aFirstId.Right( aFirstId.Length() - colIndex -1); - colIndex = aSecondId.Find(_L(":")); - TPtrC secondId = aSecondId.Right( aSecondId.Length() - colIndex -1); - //if( Compare( firstId,secondId ) == 0 ) - if(firstId.Compare(aSecondId) ==0 ) - { - return ETrue; - } - return EFalse; - } -// End of file -