diff -r ad0f53516d84 -r b922b9936679 omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStore.cpp --- a/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStore.cpp Fri Feb 19 22:40:37 2010 +0200 +++ b/omads/omadsextensions/adapters/contacts/src/NSmlContactsDataStore.cpp Fri Mar 12 15:41:30 2010 +0200 @@ -53,11 +53,11 @@ #include #include -#include "NSmlContactsDataStore.h" +#include #include "NSmlContactsModsFetcher.h" #include "nsmldebug.h" #include "nsmlconstants.h" -#include "NSmlDataModBase.h" +#include #include "nsmlcontactsdefs.h" #include "nsmldsimpluids.h" #include "nsmlsnapshotitem.h" @@ -75,7 +75,7 @@ // ---------------------------------------------------------------------------- // CNSmlContactsDataStore::CNSmlContactsBufferItem::~CNSmlContactsBufferItem // ---------------------------------------------------------------------------- -CNSmlContactsDataStore::CNSmlContactsBufferItem::~CNSmlContactsBufferItem() +EXPORT_C CNSmlContactsDataStore::CNSmlContactsBufferItem::~CNSmlContactsBufferItem() { delete iItemData; delete iMimeType; @@ -85,7 +85,7 @@ // ---------------------------------------------------------------------------- // CNSmlContactsDataStore::NewL // ---------------------------------------------------------------------------- -CNSmlContactsDataStore* CNSmlContactsDataStore::NewL() +EXPORT_C CNSmlContactsDataStore* CNSmlContactsDataStore::NewL() { _DBG_FILE("CNSmlContactsDataStore::NewL: BEGIN"); CNSmlContactsDataStore* self = new ( ELeave ) CNSmlContactsDataStore(); @@ -101,16 +101,16 @@ // ---------------------------------------------------------------------------- // CNSmlContactsDataStore::CNSmlContactsDataStore() // ---------------------------------------------------------------------------- -CNSmlContactsDataStore::CNSmlContactsDataStore() : +EXPORT_C CNSmlContactsDataStore::CNSmlContactsDataStore() : iKey( TKeyArrayFix( _FOFF( TNSmlSnapshotItem,ItemId() ),ECmpTInt )), iContactManager(NULL), iStore(NULL), - iVCardEngine(NULL), iIdConverter(NULL), - iContactLnks(NULL), iContactViewBase(NULL), iSize(NULL), - iBuf(NULL) + iBuf(NULL), + iVCardEngine(NULL), + iContactLnks(NULL) { _DBG_FILE("CNSmlContactsDataStore::CNSmlContactsDataStore(): begin"); @@ -132,50 +132,61 @@ // ---------------------------------------------------------------------------- // CNSmlContactsDataStore::ConstructL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::ConstructL() +EXPORT_C void CNSmlContactsDataStore::ConstructL() { - _DBG_FILE("CNSmlContactsDataStore::CNSmlContactsDataStore(): begin"); - - User::LeaveIfError( iRfs.Connect() ); - - iUsedMimeType.Set( KNSmlvCard21Name() ); - iUsedMimeVersion.Set( KNSmlvCard21Ver() ); - iStringPool.OpenL(); + _DBG_FILE("CNSmlContactsDataStore::ConstructL(): begin"); - // Uid Sets - iNewUids = new (ELeave) CNSmlDataItemUidSet(); - iDeletedUids = new (ELeave) CNSmlDataItemUidSet(); - iSoftDeletedUids = new (ELeave) CNSmlDataItemUidSet(); - iMovedUids = new (ELeave) CNSmlDataItemUidSet(); - iReplacedUids = new (ELeave) CNSmlDataItemUidSet(); - - // Create iDataMod - // This should be done after OpenL if there are more than one database - iDataMod = new (ELeave) CNSmlVCardMod(); - - SetOwnStoreFormatL(); - // open contact database - CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC(); - uriArray->AppendL( TVPbkContactStoreUriPtr(VPbkContactStoreUris::DefaultCntDbUri())); - - iContactManager = CVPbkContactManager::NewL(*uriArray); - CleanupStack::PopAndDestroy(uriArray); - //Default store name - iDefaultStoreName = (VPbkContactStoreUris::DefaultCntDbUri()).AllocL(); - - //Fill iPacketStoreName buffer with KLegacySymbianDatabase - TBuf dataBase(KLegacySymbianDatabase); - iPacketStoreName = HBufC::NewL(dataBase.Length()); - TPtr pktStorePtr(iPacketStoreName->Des()); - pktStorePtr.Copy(dataBase); + ConstructL( ( VPbkContactStoreUris::DefaultCntDbUri() ), KLegacySymbianDatabase ); _DBG_FILE("CNSmlContactsDataStore::ConstructL(): end"); } - + +// ---------------------------------------------------------------------------- +// CNSmlContactsDataStore::ConstructL() +// ---------------------------------------------------------------------------- +EXPORT_C void CNSmlContactsDataStore::ConstructL( + const TDesC& aStoreName, const TDesC& aLegacyStore ) + { + _DBG_FILE("CNSmlContactsDataStore::ConstructL(): begin"); + + User::LeaveIfError( iRfs.Connect() ); + + iStringPool.OpenL(); + + // Uid Sets + iNewUids = new (ELeave) CNSmlDataItemUidSet(); + iDeletedUids = new (ELeave) CNSmlDataItemUidSet(); + iSoftDeletedUids = new (ELeave) CNSmlDataItemUidSet(); + iMovedUids = new (ELeave) CNSmlDataItemUidSet(); + iReplacedUids = new (ELeave) CNSmlDataItemUidSet(); + + // Create iDataMod + // This should be done after OpenL if there are more than one database + iDataMod = new (ELeave) CNSmlVCardMod(); + + SetOwnStoreFormatL(); + // open contact database + CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC(); + uriArray->AppendL( TVPbkContactStoreUriPtr( aStoreName )); + + iContactManager = CVPbkContactManager::NewL(*uriArray); + CleanupStack::PopAndDestroy(uriArray); + //Default store name + iDefaultStoreName = aStoreName.AllocL(); + + //Fill iPacketStoreName buffer with legacy store name + TBuf dataBase(aLegacyStore); + iPacketStoreName = HBufC::NewL(dataBase.Length()); + TPtr pktStorePtr(iPacketStoreName->Des()); + pktStorePtr.Copy(dataBase); + + _DBG_FILE("CNSmlContactsDataStore::ConstructL(): end"); + } + // ---------------------------------------------------------------------------- // CNSmlContactsDataStore::~CNSmlContactsDataStore() // ---------------------------------------------------------------------------- -CNSmlContactsDataStore::~CNSmlContactsDataStore() +EXPORT_C CNSmlContactsDataStore::~CNSmlContactsDataStore() { _DBG_FILE("CNSmlContactsDataStore::~CNSmlContactsDataStore(): begin"); @@ -208,7 +219,7 @@ delete iContactViewBase; if ( iContactsModsFetcher ) { - iContactsModsFetcher->Cancel(); + iContactsModsFetcher->CancelRequest(); delete iContactsModsFetcher; } if ( iContactManager ) @@ -271,7 +282,7 @@ // MSmlSyncRelationship& aContext, // TRequestStatus& aStatus) // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoOpenL( const TDesC& aStoreName, +EXPORT_C void CNSmlContactsDataStore::DoOpenL( const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus ) { @@ -329,14 +340,12 @@ iIdConverter = CVPbkContactIdConverter::NewL(*iStore ); if ( iContactsModsFetcher ) { - iContactsModsFetcher->Cancel(); + iContactsModsFetcher->CancelRequest(); delete iContactsModsFetcher; iContactsModsFetcher = NULL; } - iContactsModsFetcher = new (ELeave) CNSmlContactsModsFetcher( - iSnapshotRegistered, *iContactManager,*iStore, iKey, *iChangeFinder ); - iContactsModsFetcher->ConstructL(); + iContactsModsFetcher = CreateModsFetcherL(); #ifdef __NSML_MODULETEST__ CActiveScheduler::Start(); @@ -348,12 +357,12 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCancelRequest() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCancelRequest() +EXPORT_C void CNSmlContactsDataStore::DoCancelRequest() { _DBG_FILE("CNSmlContactsDataStore::DoCancelRequest(): begin"); if(iContactsModsFetcher) { - iContactsModsFetcher->Cancel(); + iContactsModsFetcher->CancelRequest(); } _DBG_FILE("CNSmlContactsDataStore::DoCancelRequest(): NOT NEEDED end"); @@ -362,7 +371,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoStoreName() // ---------------------------------------------------------------------------- -const TDesC& CNSmlContactsDataStore::DoStoreName() const +EXPORT_C const TDesC& CNSmlContactsDataStore::DoStoreName() const { _DBG_FILE("CNSmlContactsDataStore::DoStoreName(): begin"); _DBG_FILE("CNSmlContactsDataStore::DoStoreName(): end"); @@ -372,7 +381,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DefaultStoreNameL() // ---------------------------------------------------------------------------- -const TDesC& CNSmlContactsDataStore::DefaultStoreNameL() const +EXPORT_C const TDesC& CNSmlContactsDataStore::DefaultStoreNameL() const { _DBG_FILE("CNSmlContactsDataStore::DefaultStoreNameL(): begin"); @@ -389,7 +398,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoBeginTransactionL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoBeginTransactionL() +EXPORT_C void CNSmlContactsDataStore::DoBeginTransactionL() { _DBG_FILE("CNSmlContactsDataStore::DoBeginTransactionL(): begin"); User::Leave( KErrNotSupported ); @@ -399,7 +408,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCommitTransactionL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCommitTransactionL(TRequestStatus& aStatus) +EXPORT_C void CNSmlContactsDataStore::DoCommitTransactionL(TRequestStatus& aStatus) { _DBG_FILE("CNSmlContactsDataStore::DoCommitTransactionL(): begin"); @@ -413,7 +422,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoRevertTransaction() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoRevertTransaction(TRequestStatus& aStatus) +EXPORT_C void CNSmlContactsDataStore::DoRevertTransaction(TRequestStatus& aStatus) { _DBG_FILE("CNSmlContactsDataStore::DoRevertTransaction(): begin"); @@ -427,7 +436,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoBeginBatchL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoBeginBatchL() +EXPORT_C void CNSmlContactsDataStore::DoBeginBatchL() { _DBG_FILE("CNSmlContactsDataStore::DoBeginBatchL(): begin"); @@ -439,7 +448,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCommitBatchL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCommitBatchL( RArray& aResultArray, TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoCommitBatchL( RArray& aResultArray, TRequestStatus& aStatus ) { _DBG_FILE("CNSmlContactsDataStore::DoCommitBatchL(): begin"); @@ -472,7 +481,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::ExecuteBufferL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::ExecuteBufferL() +EXPORT_C void CNSmlContactsDataStore::ExecuteBufferL() { _DBG_FILE("CNSmlContactsDataStore::ExecuteBufferL(): begin"); @@ -492,7 +501,8 @@ { retCommand = ExecuteAddL(); } - else if( iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemReplace ) + else if( iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemReplace || + iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemFieldLevelReplace ) { ExecuteUpdateL(); } @@ -510,6 +520,7 @@ // if( ( iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemAdd || iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemReplace || + iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemFieldLevelReplace || iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemDelete || iContactsBufferItemList[iIndex]->iModType == ENSmlCntItemSoftDelete ) && iContactsBufferItemList[iIndex]->iStatus != KNSmlNoError ) @@ -533,7 +544,7 @@ // void CNSmlContactsDataStore::ExecuteAddL() // ---------------------------------------------------------------------------- -TInt CNSmlContactsDataStore::ExecuteAddL() +EXPORT_C TInt CNSmlContactsDataStore::ExecuteAddL() { TInt retCommand( KErrNone ); StripPropertyL( iItemDataAddBatch, KVersitTokenUID() ); // Remove UID's from data @@ -576,7 +587,7 @@ // void CNSmlContactsDataStore::ExecuteDeleteL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore:: ExecuteDeleteL() +EXPORT_C void CNSmlContactsDataStore:: ExecuteDeleteL() { if(iBatchMode) @@ -629,7 +640,7 @@ // void CNSmlContactsDataStore::ExecuteUpdateL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::ExecuteUpdateL() +EXPORT_C void CNSmlContactsDataStore::ExecuteUpdateL() { iUid = iContactsBufferItemList[iIndex]->iUid; @@ -658,7 +669,7 @@ // void CNSmlContactsDataStore::ExecuteMoveL // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::ExecuteMoveL() +EXPORT_C void CNSmlContactsDataStore::ExecuteMoveL() { // move command is not supported if(!iBatchMode) @@ -684,7 +695,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCancelBatch() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCancelBatch() +EXPORT_C void CNSmlContactsDataStore::DoCancelBatch() { _DBG_FILE("CNSmlContactsDataStore::DoCancelBatch(): begin"); if( iBatchMode ) @@ -703,7 +714,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoSetRemoteStoreFormatL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoSetRemoteStoreFormatL( const CSmlDataStoreFormat& aServerDataStoreFormat ) +EXPORT_C void CNSmlContactsDataStore::DoSetRemoteStoreFormatL( const CSmlDataStoreFormat& aServerDataStoreFormat ) { _DBG_FILE("CNSmlContactsDataStore::DoSetRemoteStoreFormatL(): begin"); @@ -747,7 +758,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::SetOwnStoreFormatL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::SetOwnStoreFormatL() +EXPORT_C void CNSmlContactsDataStore::SetOwnStoreFormatL() { _DBG_FILE("CNSmlContactsDataStore::SetOwnStoreFormatL(): begin"); @@ -756,20 +767,7 @@ TFileName fileName; TParse parse; - // Check correct Data Sync protocol - TInt value( EDataSyncNotRunning ); - TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys, - KDataSyncStatus, - value ); - if ( error == KErrNone && - value == EDataSyncRunning ) - { - parse.Set( KNSmlContactsStoreFormatRsc_1_1_2, &KDC_RESOURCE_FILES_DIR, NULL ); - } - else // error or protocol version 1.2 - { - parse.Set( KNSmlContactsStoreFormatRsc_1_2, &KDC_RESOURCE_FILES_DIR, NULL ); - } + parse.Set( GetStoreFormatResourceFileL(), &KDC_RESOURCE_FILES_DIR, NULL ); fileName = parse.FullName(); @@ -791,7 +789,12 @@ } iDataMod->SetOwnStoreFormat( *iStoreFormat ); - + + // Set own MIME type based on store format resource definition. Allows inherited classes to + // use non-standard MIME type by recource change. E.g. Operator specific MIME types can be used. + iUsedMimeType.Set( iStoreFormat->MimeFormat(0).MimeType().DesC() ); + iUsedMimeVersion.Set( iStoreFormat->MimeFormat(0).MimeVersion().DesC() ); + _DBG_FILE("CNSmlContactsDataStore::SetOwnStoreFormatL(): end"); return; } @@ -799,7 +802,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoSetRemoteMaxObjectSize() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoSetRemoteMaxObjectSize( TInt aServerMaxObjectSize ) +EXPORT_C void CNSmlContactsDataStore::DoSetRemoteMaxObjectSize( TInt aServerMaxObjectSize ) { _DBG_FILE("CNSmlContactsDataStore::DoSetRemoteMaxObjectSize(): begin"); @@ -811,7 +814,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoMaxObjectSize() // ---------------------------------------------------------------------------- -TInt CNSmlContactsDataStore::DoMaxObjectSize() const +EXPORT_C TInt CNSmlContactsDataStore::DoMaxObjectSize() const { _DBG_FILE("CNSmlContactsDataStore::DoMaxObjectSize(): begin"); _DBG_FILE("CNSmlContactsDataStore::DoMaxObjectSize() 100 k: end"); @@ -821,7 +824,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoOpenItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoOpenItemL( TSmlDbItemUid aUid, +EXPORT_C void CNSmlContactsDataStore::DoOpenItemL( TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize, TSmlDbItemUid& aParent, @@ -868,7 +871,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCreateItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCreateItemL( TSmlDbItemUid& aUid, +EXPORT_C void CNSmlContactsDataStore::DoCreateItemL( TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid /*aParent*/, const TDesC8& aMimeType, @@ -913,7 +916,9 @@ // Check MimeType and MimeVersion if( ( aMimeType.MatchF( KNSmlvCard21Name ) < 0 ) && - ( aMimeType.MatchF( KNSmlvCard30Name ) < 0 )) + ( aMimeType.MatchF( KNSmlvCard30Name ) < 0 ) && + // Allow using custom MIME type defined in store format resource file + ( aMimeType.MatchF( iUsedMimeType ) < 0 ) ) { User::RequestComplete( iCallerStatus, KErrNotSupported ); _DBG_FILE("CNSmlContactsDataStore::DoCreateItemL - KErrNotSupported: END"); @@ -949,7 +954,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoReplaceItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoReplaceItemL( TSmlDbItemUid aUid, +EXPORT_C void CNSmlContactsDataStore::DoReplaceItemL( TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid /*aParent*/, TBool aFieldChange, @@ -964,7 +969,7 @@ iUid = aUid; iItemSize = aSize; - iModType = ENSmlCntItemReplace; + iModType = aFieldChange ? ENSmlCntItemFieldLevelReplace : ENSmlCntItemReplace; if ( iItemPos == -1 || !iBatchMode ) { @@ -975,18 +980,9 @@ { iItemData->Reset(); } - - // Field change not supported - if( aFieldChange ) - { - err = KErrNotSupported; - if( !iBatchMode ) - { - User::RequestComplete( iCallerStatus, err ); - return; - } - } - + + iFieldLevelReplace = aFieldChange; + iItemData = AddBufferListL( aUid, aSize, err ); if( iBatchMode ) @@ -1009,7 +1005,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoReadItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoReadItemL( TDes8& aBuffer ) +EXPORT_C void CNSmlContactsDataStore::DoReadItemL( TDes8& aBuffer ) { _DBG_FILE("CNSmlContactsDataStore::DoReadItemL(): begin"); @@ -1041,7 +1037,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoWriteItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoWriteItemL( const TDesC8& aData ) +EXPORT_C void CNSmlContactsDataStore::DoWriteItemL( const TDesC8& aData ) { _DBG_FILE("CNSmlContactsDataStore::DoWriteItemL(): begin"); @@ -1099,7 +1095,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCommitItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCommitItemL( TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoCommitItemL( TRequestStatus& aStatus ) { iCallerStatus = &aStatus; *iCallerStatus = KRequestPending; @@ -1118,9 +1114,10 @@ } } else if ((iModType == ENSmlCntItemAdd || // If some write problems - iModType == ENSmlCntItemReplace) && - iStateItem != KErrNone && - iContactsBufferItemList.Count() > 0) + iModType == ENSmlCntItemReplace || + iModType == ENSmlCntItemFieldLevelReplace ) && + iStateItem != KErrNone && + iContactsBufferItemList.Count() > 0) { iContactsBufferItemList[iContactsBufferItemList.Count()-1]->iStatus = iStateItem; } @@ -1146,7 +1143,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCloseItem() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCloseItem() +EXPORT_C void CNSmlContactsDataStore::DoCloseItem() { _DBG_FILE("CNSmlContactsDataStore::DoCloseItem(): begin"); @@ -1167,7 +1164,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoMoveItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoMoveItemL( TSmlDbItemUid aUid, TSmlDbItemUid /*aNewParent*/, TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoMoveItemL( TSmlDbItemUid aUid, TSmlDbItemUid /*aNewParent*/, TRequestStatus& aStatus ) { _DBG_FILE("CNSmlContactsDataStore::DoMoveItemL(): begin"); @@ -1190,7 +1187,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoDeleteItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus ) { _DBG_FILE("CNSmlContactsDataStore::DoDeleteItemL(): begin"); iCallerStatus = &aStatus; @@ -1230,7 +1227,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoSoftDeleteItemL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoSoftDeleteItemL( TSmlDbItemUid /*aUid*/, TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoSoftDeleteItemL( TSmlDbItemUid /*aUid*/, TRequestStatus& aStatus ) { _DBG_FILE("CNSmlContactsDataStore::DoSoftDeleteItemL(): begin"); iCallerStatus = &aStatus; @@ -1242,7 +1239,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoDeleteAllItemsL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoDeleteAllItemsL( TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoDeleteAllItemsL( TRequestStatus& aStatus ) { _DBG_FILE("CNSmlContactsDataStore::DoDeleteAllItemsL(): begin"); @@ -1263,7 +1260,7 @@ // ---------------------------------------------------------------------------- // TBool CNSmlContactsDataStore::DoHasSyncHistory() // ---------------------------------------------------------------------------- -TBool CNSmlContactsDataStore::DoHasSyncHistory() const +EXPORT_C TBool CNSmlContactsDataStore::DoHasSyncHistory() const { _DBG_FILE("CNSmlContactsDataStore::DoHasSyncHistory(): begin"); @@ -1299,7 +1296,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoAddedItems() // ---------------------------------------------------------------------------- -const MSmlDataItemUidSet& CNSmlContactsDataStore::DoAddedItems() const +EXPORT_C const MSmlDataItemUidSet& CNSmlContactsDataStore::DoAddedItems() const { _DBG_FILE("CNSmlContactsDataStore::DoAddedItems(): begin"); if ( iState == ENSmlOpenAndWaiting ) @@ -1323,7 +1320,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoDeletedItems() // ---------------------------------------------------------------------------- -const MSmlDataItemUidSet& CNSmlContactsDataStore::DoDeletedItems() const +EXPORT_C const MSmlDataItemUidSet& CNSmlContactsDataStore::DoDeletedItems() const { _DBG_FILE("CNSmlContactsDataStore::DoDeletedItems(): begin"); if ( iState == ENSmlOpenAndWaiting ) @@ -1347,7 +1344,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoSoftDeletedItems() // ---------------------------------------------------------------------------- -const MSmlDataItemUidSet& CNSmlContactsDataStore::DoSoftDeletedItems() const +EXPORT_C const MSmlDataItemUidSet& CNSmlContactsDataStore::DoSoftDeletedItems() const { _DBG_FILE("CNSmlContactsDataStore::DoSoftDeletedItems(): begin"); if ( iState == ENSmlOpenAndWaiting ) @@ -1371,7 +1368,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoModifiedItems() // ---------------------------------------------------------------------------- -const MSmlDataItemUidSet& CNSmlContactsDataStore::DoModifiedItems() const +EXPORT_C const MSmlDataItemUidSet& CNSmlContactsDataStore::DoModifiedItems() const { _DBG_FILE("CNSmlContactsDataStore::DoModifiedItems(): begin"); if ( iState == ENSmlOpenAndWaiting ) @@ -1395,7 +1392,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoMovedItems() // ---------------------------------------------------------------------------- -const MSmlDataItemUidSet& CNSmlContactsDataStore::DoMovedItems() const +EXPORT_C const MSmlDataItemUidSet& CNSmlContactsDataStore::DoMovedItems() const { _DBG_FILE("CNSmlContactsDataStore::DoMovedItems(): begin"); @@ -1420,7 +1417,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoResetChangeInfoL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoResetChangeInfoL( TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoResetChangeInfoL( TRequestStatus& aStatus ) { _DBG_FILE("CNSmlContactsDataStore::DoResetChangeInfoL(): begin"); iCallerStatus = &aStatus; @@ -1451,7 +1448,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCommitChangeInfoL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus, +EXPORT_C void CNSmlContactsDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems ) { _DBG_FILE("CNSmlContactsDataStore::DoCommitChangeInfoL(aItems): begin"); @@ -1473,7 +1470,7 @@ // ---------------------------------------------------------------------------- // void CNSmlContactsDataStore::DoCommitChangeInfoL() // ---------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus ) +EXPORT_C void CNSmlContactsDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus ) { _DBG_FILE("CNSmlContactsDataStore::DoCommitChangeInfoL(): begin"); iCallerStatus = &aStatus; @@ -1494,7 +1491,7 @@ // ---------------------------------------------------------------------------- // CDesCArray* CNSmlContactsDataStore::DoListStoresLC() // ---------------------------------------------------------------------------- -CDesCArray* CNSmlContactsDataStore::DoListStoresLC() +EXPORT_C CDesCArray* CNSmlContactsDataStore::DoListStoresLC() { _DBG_FILE("CNSmlContactsDataStore::DoListStoresLC(): begin"); @@ -1529,7 +1526,7 @@ // ------------------------------------------------------------------------------------------------ // TInt CNSmlContactsDataStore::LdoFetchItemL( TSmlDbItemUid& aUid, CBufBase& aItem ) // ------------------------------------------------------------------------------------------------ -void CNSmlContactsDataStore::LdoFetchItemL( TSmlDbItemUid& aUid, CBufBase& aItem ) +EXPORT_C void CNSmlContactsDataStore::LdoFetchItemL( TSmlDbItemUid& aUid, CBufBase& aItem ) { _DBG_FILE("CNSmlContactsDataStore::LdoFetchItemL(): begin"); @@ -1552,7 +1549,7 @@ // TTime& aLastModified, // TBool& aConfidential ) // ------------------------------------------------------------------------------------------------ -void CNSmlContactsDataStore::LdoAddItemL( const TDesC8& aItem, +EXPORT_C void CNSmlContactsDataStore::LdoAddItemL( const TDesC8& aItem, TInt aSize) { _DBG_FILE("CNSmlContactsDataStore::LdoAddItemL(): begin"); @@ -1584,7 +1581,7 @@ // TInt CNSmlContactsDataStore::LdoAddItemsL( CBufBase*& aItems, // TInt aSize) // ------------------------------------------------------------------------------------------------ -void CNSmlContactsDataStore::LdoAddItemsL( CBufBase*& aItems, +EXPORT_C void CNSmlContactsDataStore::LdoAddItemsL( CBufBase*& aItems, TInt aSize) { _DBG_FILE("CNSmlContactsDataStore::LdoAddItemL(): begin"); @@ -1614,7 +1611,7 @@ // TInt aSize, // TTime& aLastModified ) // ------------------------------------------------------------------------------------------------ -void CNSmlContactsDataStore::LdoUpdateItemL() +EXPORT_C void CNSmlContactsDataStore::LdoUpdateItemL() { _DBG_FILE("CNSmlContactsDataStore::LdoUpdateItemL(): begin"); @@ -1623,8 +1620,8 @@ StripPropertyL( iBuf, KVersitTokenUID() ); iReadStream.Open( *iBuf ); - MVPbkContactLink* contactLink = iIdConverter->IdentifierToLinkLC(iUid); - iVCardEngine->ImportVCardMergeL(*contactLink,*iStore,iReadStream,*this); + iContactLink = iIdConverter->IdentifierToLinkLC(iUid); + iVCardEngine->ImportVCardMergeL(*iContactLink, *iStore, iReadStream, *this); CleanupStack::Pop(); iLastOperation = ENSMLUpdateImportOp; @@ -1638,7 +1635,7 @@ // ------------------------------------------------------------------------------------------------ // CNSmlContactsDataStore::DriveBelowCriticalLevelL() // ------------------------------------------------------------------------------------------------ -TBool CNSmlContactsDataStore::DriveBelowCriticalLevelL( TInt aSize ) +EXPORT_C TBool CNSmlContactsDataStore::DriveBelowCriticalLevelL( TInt aSize ) { return SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ); } @@ -1646,7 +1643,7 @@ // ---------------------------------------------------------------------------- // CBufBase* CNSmlContactsDataStore::AddBufferListL() // ---------------------------------------------------------------------------- -CBufBase* CNSmlContactsDataStore::AddBufferListL( TSmlDbItemUid& aUid, TInt aSize, TInt aStatus ) +EXPORT_C CBufBase* CNSmlContactsDataStore::AddBufferListL( TSmlDbItemUid& aUid, TInt aSize, TInt aStatus ) { _DBG_FILE("CNSmlContactsDataStore::AddBufferListL(): begin"); @@ -1700,7 +1697,7 @@ // ------------------------------------------------------------------------------------------------ // void CNSmlContactsDataStore::StripPropertyL( HBufC8*& aItem, const TDesC8& aProperty ) // ------------------------------------------------------------------------------------------------ -void CNSmlContactsDataStore::StripPropertyL( HBufC8*& aItem, const TDesC8& aProperty ) const +EXPORT_C void CNSmlContactsDataStore::StripPropertyL( HBufC8*& aItem, const TDesC8& aProperty ) const { _DBG_FILE("CNSmlContactsDataStore::StripPropertyL(): begin"); @@ -1733,7 +1730,7 @@ // ------------------------------------------------------------------------------------------------ // void CNSmlContactsDataStore::StripPropertyL( CBufBase*& aItem, const TDesC8& aProperty ) // ------------------------------------------------------------------------------------------------ -void CNSmlContactsDataStore::StripPropertyL( CBufBase*& aItem, const TDesC8& aProperty ) const +EXPORT_C void CNSmlContactsDataStore::StripPropertyL( CBufBase*& aItem, const TDesC8& aProperty ) const { _DBG_FILE("CNSmlContactsDataStore::StripPropertyL(): begin"); @@ -1770,7 +1767,7 @@ // CNSmlContactsDataStore::IsConfidentialL // ---------------------------------------------------------------------------- // -TBool CNSmlContactsDataStore::IsConfidentialL( MVPbkStoreContact& aItem ) +EXPORT_C TBool CNSmlContactsDataStore::IsConfidentialL( MVPbkStoreContact& aItem ) { _DBG_FILE("CNSmlContactsDataStore::IsConfidentialL(): begin"); TBool ret( EFalse ); @@ -1789,7 +1786,7 @@ //compare the sync type if ( ptr.Compare( KNSmlContactSyncNoSync ) == 0 ) { - _DBG_FILE("CNSmlContactsModsFetcher::IsConfidentialL(): \ + _DBG_FILE("CNSmlContactsDataStore::IsConfidentialL(): \ find confidential"); ret = ETrue; } @@ -1805,7 +1802,7 @@ // CNSmlContactsDataStore::ResetBuffer // ---------------------------------------------------------------------------- // -void CNSmlContactsDataStore:: ResetBuffer() +EXPORT_C void CNSmlContactsDataStore:: ResetBuffer() { if( iItemDataAddBatch ) { @@ -1818,7 +1815,7 @@ // Called when a contact store is ready to use. // ----------------------------------------------------------------------------- -void CNSmlContactsDataStore::StoreReady( MVPbkContactStore& /*aContactStore*/ ) +EXPORT_C void CNSmlContactsDataStore::StoreReady( MVPbkContactStore& /*aContactStore*/ ) { _DBG_FILE("CNSmlContactsDataStore::StoreReady(): begin"); //The contact data base opened successfully @@ -1827,7 +1824,7 @@ iOpenedStoreId = DefaultHash::Des16( iStore->StoreProperties().Uri().UriDes()); - TRAPD(error,iContactsModsFetcher->FetchModificationsL( *iCallerStatus )); + TRAPD(error, iContactsModsFetcher->FetchModificationsL( *iCallerStatus )); if(error != KErrNone) { User::RequestComplete( iCallerStatus, error ); @@ -1841,7 +1838,7 @@ // Called when a contact store becomes unavailable. // --------------------------------------------------------------------------- // -void CNSmlContactsDataStore::StoreUnavailable( +EXPORT_C void CNSmlContactsDataStore::StoreUnavailable( MVPbkContactStore& /*aContactStore*/, TInt aReason ) { @@ -1862,7 +1859,7 @@ // From MVPbkContactStoreListObserver // --------------------------------------------------------------------------- // -void CNSmlContactsDataStore::HandleStoreEventL( +EXPORT_C void CNSmlContactsDataStore::HandleStoreEventL( MVPbkContactStore& /*aContactStore*/, TVPbkContactStoreEvent /*aStoreEvent*/ ) { @@ -1873,8 +1870,7 @@ // CNSmlContactsDataStore::VPbkSingleContactOperationComplete // --------------------------------------------------------------------------- // - - void CNSmlContactsDataStore::VPbkSingleContactOperationComplete( +EXPORT_C void CNSmlContactsDataStore::VPbkSingleContactOperationComplete( MVPbkContactOperationBase& aOperation, MVPbkStoreContact* aContact ) { @@ -1896,18 +1892,19 @@ // CNSmlContactsDataStore::VPbkSingleContactOperationFailed // --------------------------------------------------------------------------- // -void CNSmlContactsDataStore::VPbkSingleContactOperationFailed( - MVPbkContactOperationBase& aOperation, - TInt aError ) - { +EXPORT_C void CNSmlContactsDataStore::VPbkSingleContactOperationFailed( + MVPbkContactOperationBase& aOperation, + TInt aError ) + { MVPbkContactOperationBase* operation = &aOperation; if ( operation ) - { + { delete operation; operation = NULL; - } + } + if(iLastOperation == ENSMLFetchOp) - { + { iWriteStream.Close(); User::RequestComplete( iCallerStatus, aError ); } @@ -1924,6 +1921,8 @@ { iResultArray->Append( aError ); } + delete iContactLink; + iContactLink = NULL; delete iBuf; iBuf = NULL; iReadStream.Close(); @@ -1969,7 +1968,7 @@ // CNSmlContactsDataStore::VPbkSingleContactOperationFailed // --------------------------------------------------------------------------- // - void CNSmlContactsDataStore::SingleContactOperationCompleteL( +EXPORT_C void CNSmlContactsDataStore::SingleContactOperationCompleteL( MVPbkStoreContact* aContact) { if(iLastOperation == ENSMLFetchOp) @@ -1992,7 +1991,8 @@ } else if (iLastOperation == ENSMLUpdateExportOp) { - iDataMod->MergeRxL( *iContactsBufferItemList[iIndex]->iItemData, *iMergeItem ); + iDataMod->MergeRxL( *iContactsBufferItemList[iIndex]->iItemData, + *iMergeItem, iFieldLevelReplace ); iWriteStream.Close(); delete iMergeItem; iMergeItem = NULL; @@ -2000,6 +2000,8 @@ } else if (iLastOperation == ENSMLUpdateImportOp) { + iFieldLevelReplace = EFalse; + if(!IsConfidentialL(*aContact)) { TInt32 id = iIdConverter->LinkToIdentifier(*aContact->CreateLinkLC()); @@ -2025,12 +2027,13 @@ iResultArray->Append(KErrNone); } + delete iContactLink; + iContactLink = NULL; delete iBuf; iBuf = NULL; iReadStream.Close(); - iIndex++; if(iIndex == iContactsBufferItemList.Count() ) { @@ -2091,7 +2094,7 @@ // CNSmlContactsDataStore::ContactsSaved. // --------------------------------------------------------------------------- // - void CNSmlContactsDataStore::ContactsSaved( +EXPORT_C void CNSmlContactsDataStore::ContactsSaved( MVPbkContactOperationBase& aOperation, MVPbkContactLinkArray* aResults ) { @@ -2155,7 +2158,7 @@ // CNSmlContactsDataStore::ContactsSavingFailed // --------------------------------------------------------------------------- // -void CNSmlContactsDataStore::ContactsSavingFailed( +EXPORT_C void CNSmlContactsDataStore::ContactsSavingFailed( MVPbkContactOperationBase& aOperation, TInt aError ) { MVPbkContactOperationBase* operation = &aOperation; @@ -2204,7 +2207,7 @@ // CNSmlContactsDataStore::StepComplete // --------------------------------------------------------------------------- // -void CNSmlContactsDataStore::StepComplete( +EXPORT_C void CNSmlContactsDataStore::StepComplete( MVPbkContactOperationBase& /*aOperation*/, TInt aStepSize ) { @@ -2244,7 +2247,7 @@ // CNSmlContactsDataStore::StepFailed // --------------------------------------------------------------------------- // - TBool CNSmlContactsDataStore::StepFailed( +EXPORT_C TBool CNSmlContactsDataStore::StepFailed( MVPbkContactOperationBase& /*aOperation*/, TInt /*aStepSize*/, TInt aError ) @@ -2272,7 +2275,7 @@ // CNSmlContactsDataStore::OperationComplete // --------------------------------------------------------------------------- // -void CNSmlContactsDataStore::OperationComplete +EXPORT_C void CNSmlContactsDataStore::OperationComplete ( MVPbkContactOperationBase& aOperation ) { MVPbkContactOperationBase* operation = &aOperation; @@ -2293,8 +2296,7 @@ // CNSmlContactsDataStore::OperationCompleteL // --------------------------------------------------------------------------- // - -void CNSmlContactsDataStore::OperationCompleteL() +EXPORT_C void CNSmlContactsDataStore::OperationCompleteL() { if(iLastOperation == ENSmlDeleteOp) { @@ -2361,7 +2363,7 @@ // CNSmlContactsDataStore::ContactViewReady // Implements the view ready function of MVPbkContactViewObserver // --------------------------------------------------------------------------- -void CNSmlContactsDataStore::ContactViewReady( +EXPORT_C void CNSmlContactsDataStore::ContactViewReady( MVPbkContactViewBase& /*aView*/ ) { if(iLastOperation == ENSMLDeleteAllOp) @@ -2377,7 +2379,7 @@ // CNSmlContactsDataStore::PrepareForContactsDeleteL() // Delete all the contacts at client // --------------------------------------------------------------------------- -void CNSmlContactsDataStore::DoDeleteAllContactsL() +EXPORT_C void CNSmlContactsDataStore::DoDeleteAllContactsL() { iContactLnks = CVPbkContactLinkArray::NewL(); TInt contactCount = iContactViewBase->ContactCountL(); @@ -2399,7 +2401,7 @@ // CNSmlContactsDataStore::ContactViewUnavailable // Implements the view unavailable function of MVPbkContactViewObserver // --------------------------------------------------------------------------- -void CNSmlContactsDataStore::ContactViewUnavailable( +EXPORT_C void CNSmlContactsDataStore::ContactViewUnavailable( MVPbkContactViewBase& /*aView*/ ) { @@ -2409,7 +2411,7 @@ // CNSmlContactsDataStore::ContactAddedToView // Implements the add contact function of MVPbkContactViewObserver // --------------------------------------------------------------------------- -void CNSmlContactsDataStore::ContactAddedToView( +EXPORT_C void CNSmlContactsDataStore::ContactAddedToView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink*/ ) @@ -2420,7 +2422,7 @@ // CNSmlContactsDataStore::ContactRemovedFromView // Implements the remove contact function of MVPbkContactViewObserver // --------------------------------------------------------------------------- -void CNSmlContactsDataStore::ContactRemovedFromView( +EXPORT_C void CNSmlContactsDataStore::ContactRemovedFromView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink*/ ) @@ -2431,7 +2433,7 @@ // CNSmlContactsDataStore::ContactViewError // Implements the view error function of MVPbkContactViewObserver // --------------------------------------------------------------------------- -void CNSmlContactsDataStore::ContactViewError( +EXPORT_C void CNSmlContactsDataStore::ContactViewError( MVPbkContactViewBase& /*aView*/, TInt /*aError*/, TBool /*aErrorNotified*/ ) @@ -2443,8 +2445,7 @@ // CNSmlContactsDataStore::CreateViewL() // Create a contact view // ----------------------------------------------------------------------------- - -void CNSmlContactsDataStore::CreateViewL() +EXPORT_C void CNSmlContactsDataStore::CreateViewL() { CVPbkContactViewDefinition* viewDef = CVPbkContactViewDefinition::NewL(); @@ -2459,7 +2460,54 @@ iContactManager->FieldTypes() ); CleanupStack::Pop(); CleanupStack::PopAndDestroy(viewDef); - } +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataStore::GetStoreFormatResourceFileL +// ------------------------------------------------------------------------------------------------ +EXPORT_C const TDesC& CNSmlContactsDataStore::GetStoreFormatResourceFileL() + { + _DBG_FILE("CNSmlContactsDataStore::GetStoreFormatResourceFileL(): begin"); + + // Check correct Data Sync protocol + TInt value( EDataSyncNotRunning ); + TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys, + KDataSyncStatus, value ); + if ( error == KErrNone && + value == EDataSyncRunning ) + { + return KNSmlContactsStoreFormatRsc_1_1_2; + } + else // error or protocol version 1.2 + { + return KNSmlContactsStoreFormatRsc_1_2; + } + _DBG_FILE("CNSmlContactsDataStore::GetStoreFormatResourceFileL(): end"); + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataStore::CreateModsFetcherL +// ------------------------------------------------------------------------------------------------ +EXPORT_C MContactsModsFetcher* CNSmlContactsDataStore::CreateModsFetcherL() + { + _DBG_FILE("CNSmlContactsDataStore::CreateModsFetcherL(): begin"); + CNSmlContactsModsFetcher* modsFetcher = + new ( ELeave ) CNSmlContactsModsFetcher( iSnapshotRegistered, + *iContactManager,*iStore, iKey, *iChangeFinder ); + CleanupStack::PushL( modsFetcher ); + modsFetcher->ConstructL(); + CleanupStack::Pop( modsFetcher ); + _DBG_FILE("CNSmlContactsDataStore::CreateModsFetcherL(): end"); + return modsFetcher; + } + +// ------------------------------------------------------------------------------------------------ +// CNSmlContactsDataStore::GetDataMod +// ------------------------------------------------------------------------------------------------ +EXPORT_C CNSmlDataModBase& CNSmlContactsDataStore::GetDataMod() + { + _DBG_FILE("CNSmlContactsDataStore::GetDataMod()"); + return *iDataMod; + } + // End of File