--- 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 <AknUtils.h>
-#include "cvimpststoragevpbklocalstore.h"
-
-#include "cvimpststoragevpbkstorehandler.h"
-
-#include <MVPbkContactView.h>
-#include <CVPbkContactIdConverter.h>
-#include "mvimpststorageserviceview.h"
-#include "uiservicetabtracer.h"
-#include "tvimpstconsts.h"
-#include <CVPbkContactLinkArray.h>
-#include <MVPbkContactLink.h>
-#include "cvimpststoragecontact.h"
-#include "vimpststorageutils.h"
-
-#include <f32file.h>
-#include <sysutil.h>
-
-
-// ================= 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 <TPtrC>& aFirstNameList,
- RArray <TPtrC> &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<count; i++ )
- {
- TVIMPSTContactInfo contactInf =
- {
- aServiceField[i].AllocL() ,
- aFirstNameList[i].AllocL()
- };
- // not exist need to add
- iFetchContactsToBeAdded.Append( contactInf );
- }
- if( iFetchStep == EContactReadComplete )
- {
- TRACE( "start fetcing" );
- IssueRequest();
- }
- else
- {
- TRACE( " EFetchingCalled" );
- iFetchStep = EFetchingCalled;
- }
-
- }
-
-//******************* Database Operations *********************************//
-// -----------------------------------------------------------
-// CVIMPSTStorageVPbkLocalStore::DbExists
-// -----------------------------------------------------------
-//
-TBool CVIMPSTStorageVPbkLocalStore::DbExists()
- {
- TRACER_AUTO;
- RFile temp;
-
- TBuf< KMaxPath > 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
-