diff -r 2bb96f4ecad8 -r 8e7494275d3a omads/omadsextensions/adapters/notes/src/NSmlNotepadDataStore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsextensions/adapters/notes/src/NSmlNotepadDataStore.cpp Tue Aug 31 15:05:37 2010 +0300 @@ -0,0 +1,1357 @@ +/* +* Copyright (c) 2005 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: DS notepad data store +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "NSmlNotepadDatastore.h" +#include "nsmlnotepaddefs.h" +#include "nsmlnotepadDatabase.h" +#include "nsmlsnapshotitem.h" +#include "nsmlnotepadlogging.h" + +// ---------------------------------------------------------------------------- +// CNSmlNotepadDataStore::NewL +// ---------------------------------------------------------------------------- +CNSmlNotepadDataStore* CNSmlNotepadDataStore::NewL() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::NewL: BEGIN"); + CNSmlNotepadDataStore* self = new ( ELeave ) CNSmlNotepadDataStore(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); // self + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::NewL: END"); + return self; + } + +// ---------------------------------------------------------------------------- +// CNSmlNotepadDataStore::~CNSmlNotepadDataStore() +// ---------------------------------------------------------------------------- +CNSmlNotepadDataStore::~CNSmlNotepadDataStore() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::~CNSmlNotepadDataStore(): begin"); + if(iOwnStoreFormat) + { + delete iOwnStoreFormat; + iOwnStoreFormat = NULL; + } + if(iDefaultStoreName) + { + delete iDefaultStoreName; + iDefaultStoreName = NULL; + } + if(iNpdDb) + { + delete iNpdDb; + iNpdDb = NULL; + } + if(iReplacedUids) + { + delete iReplacedUids; + iReplacedUids = NULL; + } + if(iMovedUids) + { + delete iMovedUids; + iMovedUids = NULL; + } + if(iSoftDeletedUids) + { + delete iSoftDeletedUids; + iSoftDeletedUids = NULL; + } + if(iDeletedUids) + { + delete iDeletedUids; + iDeletedUids = NULL; + } + if(iNewUids) + { + delete iNewUids; + iNewUids = NULL; + } + iRfs.Close(); + iStringPool.Close(); + if(iOpenedStoreName) + { + delete iOpenedStoreName; + iOpenedStoreName = NULL; + } + if(iItemData) + { + delete iItemData; + iItemData = NULL; + } + if ( iChangeFinder ) + { + TRAP_IGNORE( iChangeFinder->CloseL() ); + delete iChangeFinder; + iChangeFinder = NULL; + } + + if( iSnapshot ) + { + delete iSnapshot; + iSnapshot = NULL; + } + + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::~CNSmlNotepadDataStore(): end"); + } + + +// ---------------------------------------------------------------------------- +// CNSmlNotepadDataStore::CNSmlNotepadDataStore() +// ---------------------------------------------------------------------------- +CNSmlNotepadDataStore::CNSmlNotepadDataStore() : iOpenedStoreId(KNSmlNotepadAdapterImplUid),iKey( TKeyArrayFix( _FOFF( TNSmlSnapshotItem,ItemId() ),ECmpTInt )) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::CNSmlNotepadDataStore(): begin"); + iSyncHistory = EFalse; + iDataBaseOpened = EFalse; + iReaderPosition = -1; + iWriterPosition = -1; + iModificationCount = KNSmlCompactAfterChanges; + iState = ENSmlClosed; + iSnapshotRegistered = EFalse; + iDrive = -1; + iReplaceItemId = -1; + iServerMaxObjectSize = 0; // Maximum size default value + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::CNSmlNotepadDataStore(): end"); + } + +// ---------------------------------------------------------------------------- +// CNSmlNotepadDataStore::ConstructL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::ConstructL() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::ConstructL(): begin"); + User::LeaveIfError(iRfs.Connect()); + iStringPool.OpenL(); + iUsedMimeType.Set( KMimePlainText() ); + iUsedMimeVersion.Set( KMimePlainTextVersion() ); + // Uid Sets + if(iNewUids) + { + delete iNewUids; + iNewUids = NULL; + } + iNewUids = new (ELeave) CNSmlDataItemUidSet(); + if(iDeletedUids) + { + delete iDeletedUids; + iDeletedUids = NULL; + } + iDeletedUids = new (ELeave) CNSmlDataItemUidSet(); + if(iSoftDeletedUids) + { + delete iSoftDeletedUids; + iSoftDeletedUids = NULL; + } + iSoftDeletedUids = new (ELeave) CNSmlDataItemUidSet(); + if(iMovedUids) + { + delete iMovedUids; + iMovedUids = NULL; + } + iMovedUids = new (ELeave) CNSmlDataItemUidSet(); + if(iReplacedUids) + { + delete iReplacedUids; + iReplacedUids = NULL; + } + iReplacedUids = new (ELeave) CNSmlDataItemUidSet(); + if(iNpdDb) + { + delete iNpdDb; + iNpdDb = NULL; + } + iNpdDb = CNSmlNotepadDatabase::NewL(); + if(iDefaultStoreName) + { + delete iDefaultStoreName; + iDefaultStoreName = NULL; + } + iDefaultStoreName = HBufC::NewL( KNSmlDefaultStoreNameMaxSize ); + *iDefaultStoreName = KNSmlNotepadStoreName; + + if(iOwnStoreFormat) + { + delete iOwnStoreFormat; + iOwnStoreFormat = NULL; + } + iOwnStoreFormat = DoOwnStoreFormatL(); + + iSnapshot = new (ELeave) CArrayFixSeg(KSnapshotGranularity); + + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::ConstructL(): end"); + } + + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DefaultStoreNameL() +// ---------------------------------------------------------------------------- +const TDesC& CNSmlNotepadDataStore::DefaultStoreNameL() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DefaultStoreNameL(): begin"); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DefaultStoreNameL(): end"); + if ( iDefaultStoreName ) + { + return *iDefaultStoreName; + } + return KNullDesC; + } + + +// ---------------------------------------------------------------------------- +// CDesCArray* CNSmlNotepadDataStore::DoListStoresLC(); +// ---------------------------------------------------------------------------- +CDesCArray* CNSmlNotepadDataStore::DoListStoresLC() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoListStoresLC(): begin"); + CDesCArrayFlat *npdStores = new (ELeave)CDesCArrayFlat(1); + CleanupStack::PushL(npdStores); + npdStores->AppendL(KNSmlNotepadStoreName); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoListStoresLC(): end"); + return npdStores; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoOpenL(const TDesC& aStoreName, +// MSmlSyncRelationship& aContext, +// TRequestStatus& aStatus) +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoOpenL( const TDesC& aStoreName, + MSmlSyncRelationship& aContext, + TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoOpenL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if( iState != ENSmlClosed || iDataBaseOpened ) + { + + User::RequestComplete( iCallerStatus, KErrInUse ); + return; + } + if(aStoreName.Length()>0) + { + if( RFs::CharToDrive(aStoreName[0], iDrive) != KErrNone ) + { + RFs::CharToDrive( KNSmlDriveC()[0], iDrive ); + } + } + + // Open the Database + TInt err( KErrNone ); + TRAP(err,iNpdDb->OpenL( KNSmlNotepadDefaultStoreName )); + if ( err ) + { + User::RequestComplete( iCallerStatus, err ); + return; + } + + if ( iOpenedStoreName ) + { + delete iOpenedStoreName; + iOpenedStoreName = NULL; + } + iOpenedStoreName = HBufC::NewL( KNSmlDefaultStoreNameMaxSize ); + *iOpenedStoreName = KNSmlNotepadStoreName; + + iDataBaseOpened = ETrue; + + if ( iChangeFinder ) + { + iChangeFinder->CloseL(); + delete iChangeFinder; + iChangeFinder = NULL; + } + iChangeFinder = CNSmlChangeFinder::NewL( aContext, iKey, iSyncHistory, KNSmlNotepadAdapterImplUid ); + + err = FetchModificationsL(); + + + iState = ENSmlOpenAndWaiting; + User::RequestComplete( iCallerStatus, err ); + + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoOpenL(): end"); +} + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCancelRequest() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCancelRequest() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCancelRequest(): begin"); + if ( iState == ENSmlOpenAndWaiting ) + { + iState = ENSmlClosed; + } + else + { + iState = ENSmlOpenAndWaiting; + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCancelRequest(): NOT NEEDED end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoStoreName() +// ---------------------------------------------------------------------------- +const TDesC& CNSmlNotepadDataStore::DoStoreName() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoStoreName(): begin"); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoStoreName(): end"); + if ( iOpenedStoreName ) + { + return *iOpenedStoreName; + } + return KNullDesC; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoBeginTransactionL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoBeginTransactionL() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoBeginTransactionL(): begin"); + User::Leave( KErrNotSupported ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoBeginTransactionL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCommitTransactionL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCommitTransactionL(TRequestStatus& aStatus) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitTransactionL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + User::RequestComplete( iCallerStatus, KErrNotSupported ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitTransactionL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoRevertTransaction() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoRevertTransaction(TRequestStatus& aStatus) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoRevertTransaction(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + User::RequestComplete( iCallerStatus, KErrNotSupported ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoRevertTransaction(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoBeginBatchL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoBeginBatchL() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoBeginBatchL(): begin"); + User::Leave( KErrNotSupported ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoBeginBatchL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCommitBatchL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCommitBatchL( RArray& /*aResultArray*/, TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitBatchL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + User::RequestComplete( iCallerStatus, KErrNotSupported ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitBatchL(): end"); + } +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCancelBatch() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCancelBatch() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCancelBatch(): begin"); + // Nothing to do + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCancelBatch(): end"); + } +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoSetRemoteStoreFormatL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoSetRemoteStoreFormatL( const CSmlDataStoreFormat& aServerDataStoreFormat ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSetRemoteStoreFormatL(): begin"); + TBool foundMime = EFalse; + // KErrNotSupported is returned if server does not support same mime type + // and same mime type version as Data Provider. + TInt i=0; + while( i< aServerDataStoreFormat.MimeFormatCount() && !foundMime ) + { + if( iUsedMimeType.MatchF(aServerDataStoreFormat.MimeFormat(i).MimeType().DesC()) ==0 && + iUsedMimeVersion.MatchF(aServerDataStoreFormat.MimeFormat(i).MimeVersion().DesC())==0 ) + { + foundMime = ETrue; + iServerMimeType = aServerDataStoreFormat.MimeFormat(i).MimeType(); + iServerMimeVersion = aServerDataStoreFormat.MimeFormat(i).MimeVersion(); + } + i++; + } + if( !foundMime ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSetRemoteStoreFormatL(): SERVER MIMETYPE NOTSUPPORTED end"); + + User::Leave( KErrNotSupported ); + } + if( !iOwnStoreFormat ) + { + iOwnStoreFormat = DoOwnStoreFormatL(); + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSetRemoteStoreFormatL(): end"); + return; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoSetRemoteMaxObjectSize() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoSetRemoteMaxObjectSize( TInt aServerMaxObjectSize ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSetRemoteMaxObjectSize(): begin"); + iServerMaxObjectSize = aServerMaxObjectSize; + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSetRemoteMaxObjectSize(): end"); + } +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoMaxObjectSize() +// ---------------------------------------------------------------------------- +TInt CNSmlNotepadDataStore::DoMaxObjectSize() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMaxObjectSize(): begin"); + if ( iOwnStoreFormat ) + { + if ( iOwnStoreFormat->HasMaxSize() ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMaxObjectSize - From resource: END"); + + return iOwnStoreFormat->MaxSize(); + } + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMaxObjectSize() 100 k: end"); + return KNSmlDataStoreMaxSize; // 100 k + } + + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoOpenItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoOpenItemL( TSmlDbItemUid aUid, + TBool& aFieldChange, + TInt& aSize, + TSmlDbItemUid& aParent, + TDes8& aMimeType, + TDes8& aMimeVer, + TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoOpenItemL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if ( iState != ENSmlOpenAndWaiting ) + { + User::RequestComplete( iCallerStatus, KErrNotReady ); + return; + } + aFieldChange = EFalse; // Whole item sent NOT SUPPORT ON FIELDCHANGE + aMimeType = iOwnStoreFormat->MimeFormat( 0 ).MimeType().DesC(); + aMimeVer = iOwnStoreFormat->MimeFormat( 0 ).MimeVersion().DesC(); + aParent = KNullDataItemId; + if( !iItemData ) + { + iItemData= CBufFlat::NewL( KNSmlItemDataExpandSize ); + } + else + { + iItemData->Reset(); + } + TInt err = OpenItemL( aUid, *iItemData ); + if( !err ) + { + + iItemData->Compress(); + iReaderPosition = 0; + aSize = iItemData->Size(); + iState = ENSmlItemOpen; + if ( iServerMaxObjectSize == 0 || aSize <= iServerMaxObjectSize ) + { + User::RequestComplete( iCallerStatus, KErrNone ); + } + else + { + User::RequestComplete( iCallerStatus, KErrTooBig ); + } + } + else + { + User::RequestComplete( iCallerStatus, err ); + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoOpenItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCreateItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCreateItemL( TSmlDbItemUid& aUid, + TInt aSize, + TSmlDbItemUid /*aParent*/, + const TDesC8& aMimeType, + const TDesC8& aMimeVer, + TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCreateItemL(): begin"); + TBuf8<255> lMimeType; + lMimeType.Copy(aMimeType); + TBuf8<255> lMimeVer; + lMimeVer.Copy(aMimeVer); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + iAddItemId = &aUid; + if ( iState != ENSmlOpenAndWaiting ) + { + User::RequestComplete( iCallerStatus, KErrNotReady ); + return; + } + if ( iOwnStoreFormat->HasMaxSize() ) + { + if ( iOwnStoreFormat->MaxSize() < aSize ) + { + User::RequestComplete( iCallerStatus, KErrTooBig ); + return; + } + } + if( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ) ) + { + User::RequestComplete( iCallerStatus, KErrDiskFull ); + return; + } + TBuf8<255> lOwnMimeType; + lOwnMimeType.Copy(iOwnStoreFormat->MimeFormat( 0 ).MimeType().DesC()); + TBuf8<255> lOwnMimeVer; + lOwnMimeVer.Copy(iOwnStoreFormat->MimeFormat( 0 ).MimeVersion().DesC()); + if ( (iOwnStoreFormat->MimeFormat( 0 ).MimeType().DesC().Compare( aMimeType ) != 0 ) ) + { + User::RequestComplete( iCallerStatus, KErrNotSupported ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCreateItemL - KErrNotSupported: END"); + return; + } + if ( iItemData ) + { + delete iItemData; + iItemData = NULL; + } + iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize ); + iWriterPosition = 0; + iItemSize = aSize; // Size sent from server + iState = ENSmlItemCreating; + User::RequestComplete( iCallerStatus, KErrNone ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCreateItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoReplaceItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoReplaceItemL( TSmlDbItemUid aUid, + TInt aSize, + TSmlDbItemUid /*aParent*/, + TBool aFieldChange, + TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if ( iState != ENSmlOpenAndWaiting ) + { + User::RequestComplete( iCallerStatus, KErrNotReady ); + return; + } + if ( iOwnStoreFormat->HasMaxSize() ) + { + if ( iOwnStoreFormat->MaxSize() < aSize ) + { + User::RequestComplete( iCallerStatus, KErrTooBig ); + return; + } + } + if( aFieldChange ) + { + User::RequestComplete( iCallerStatus, KErrNotSupported ); + return; + } + if( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ) ) + { + User::RequestComplete(iCallerStatus, KErrDiskFull); + return; + } + TInt err = KErrNone; + iUid = aUid; + iItemSize = aSize; + iWriterPosition = 0; + if ( iItemData ) + { + delete iItemData; + iItemData = NULL; + } + iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize ); + CNpdItem *note; + note = CNpdItem::NewLC(); + TInt itemFound; + TRAP(itemFound,iNpdDb->GetNoteL(aUid, *note)); + CleanupStack::PopAndDestroy(note);//for note + if ( itemFound != KErrNone) + { + delete iItemData; + iItemData = NULL; + + User::RequestComplete( iCallerStatus, KErrNotFound ); + return; + } + iReplaceItemId = aUid; + iState = ENSmlItemUpdating; + User::RequestComplete( iCallerStatus, err ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemL(): end"); + } +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoReadItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoReadItemL( TDes8& aBuffer ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReadItemL(): begin"); + if ( iState != ENSmlItemOpen || !iItemData ) + { + iReaderPosition = -1; + User::Leave( KErrNotReady ); + } + if ( iReaderPosition == -1 ) + { + User::Leave( KErrEof ); + } + + if ( aBuffer.MaxSize() <= iItemData->Size() ) + { + //iItemData->Read( 0, aBuffer ); + //iReaderPosition = -1; + if (iReaderPosition < (iItemData->Size() - iReaderPosition)) + { + iItemData->Read( iReaderPosition , aBuffer); + iReaderPosition = iReaderPosition + aBuffer.Size(); + } + else + { + if (aBuffer.MaxLength() <= (iItemData->Size() - iReaderPosition)) + { + iItemData->Read( iReaderPosition , aBuffer, aBuffer.MaxLength() ); + } + else + { + iItemData->Read( iReaderPosition , aBuffer, (iItemData->Size() - iReaderPosition) ); + } + iReaderPosition = -1; + } + } + else + { + TInt length = iItemData->Size() - iReaderPosition; + if ( aBuffer.Size() <= length ) + { + iItemData->Read( iReaderPosition , aBuffer ); + iReaderPosition = -1; + } + else + { + iItemData->Read( iReaderPosition , aBuffer, aBuffer.Size() ); + iReaderPosition = iReaderPosition + aBuffer.Size(); + } + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReadItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoWriteItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoWriteItemL( const TDesC8& aData ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoWriteItemL(): begin"); + if ( iState == ENSmlItemCreating || iState == ENSmlItemUpdating ) + { + TInt totalSize = aData.Size() + iItemData->Size(); + if( SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, totalSize, iDrive ) ) + { + User::RequestComplete(iCallerStatus, KErrDiskFull); + return; + } + if ( iItemData ) + { + if ( iWriterPosition == -1 ) + { + User::Leave( KErrEof ); + } + iItemData->InsertL( iWriterPosition , aData ); + iWriterPosition = aData.Size(); + return; + } + } + User::Leave( KErrNotReady ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoWriteItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCommitItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCommitItemL( TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitItemL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if ( iState == ENSmlItemCreating || iState == ENSmlItemUpdating ) + { + if ( !iItemData ) + { + User::RequestComplete( iCallerStatus, KErrNotReady ); + return; + } + } + else + { + User::RequestComplete(iCallerStatus, KErrNotReady ); + return; + } + iItemData->Compress(); + TInt err(KErrNone); + if ( iState == ENSmlItemCreating ) + { + iState = ENSmlClosed; + TSmlDbItemUid newUid; + err = DoAddItemToDataBaseL( *iItemData,newUid); + *iAddItemId = newUid; + } + else // ENSmlItemUpdating + { + iState = ENSmlClosed; + err = DoReplaceItemAtDataBaseL( *iItemData, iReplaceItemId ); + } + iReplaceItemId = -1; + iWriterPosition = -1; + iState = ENSmlOpenAndWaiting; + if ( iItemData ) + { + delete iItemData; + iItemData = NULL; + } + User::RequestComplete( iCallerStatus, err); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCloseItem() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCloseItem() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCloseItem(): begin"); + if ( iState == ENSmlItemOpen ) + { + iReaderPosition = -1; + if ( iItemData ) + { + delete iItemData; + iItemData = NULL; + } + iState = ENSmlOpenAndWaiting; + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCloseItem(): end"); + } + + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoMoveItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoMoveItemL( TSmlDbItemUid /*aUid*/, + TSmlDbItemUid /*aNewParent*/, + TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMoveItemL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if ( iState != ENSmlOpenAndWaiting ) + { + User::RequestComplete( iCallerStatus, KErrNotReady ); + return; + } + User::RequestComplete( iCallerStatus, KErrNotSupported ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMoveItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoDeleteItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoDeleteItemL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if ( iState != ENSmlOpenAndWaiting ) + { + // Items cannot be deleted if some of them is opened + User::RequestComplete( iCallerStatus, KErrNotReady ); + return; + } + iItemData = CBufFlat::NewL( KNSmlItemDataExpandSize ); + CNpdItem *note; + note = CNpdItem::NewLC(); + TInt itemFound; + TRAP(itemFound,iNpdDb->GetNoteL(aUid, *note)); + CleanupStack::PopAndDestroy(note); // for note + if( itemFound != KErrNone) + { + delete iItemData; + iItemData = NULL; + + User::RequestComplete( iCallerStatus, KErrNotFound ); + return; + } + TRAPD( err, iNpdDb->DeleteNoteL( aUid ) ); + if( err == KErrNone ) + { + if(iChangeFinder) + { + iChangeFinder->ItemDeleted( TNSmlSnapshotItem( aUid ) ); + } + } + User::RequestComplete(iCallerStatus, err); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoDeleteItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoSoftDeleteItemL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoSoftDeleteItemL( TSmlDbItemUid aUid, TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSoftDeleteItemL(): begin"); + DoDeleteItemL( aUid,aStatus ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSoftDeleteItemL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoDeleteAllItemsL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoDeleteAllItemsL( TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoDeleteAllItemsL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if ( iState != ENSmlOpenAndWaiting ) + { + // Items cannot be deleted if they are opened. + User::RequestComplete(iCallerStatus, KErrNotReady); + return; + } + iNpdDb->ResetL(); + if( iChangeFinder ) + { + iChangeFinder->ResetL(); + } + iSnapshotRegistered = EFalse; + User::RequestComplete(iCallerStatus, KErrNone); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoDeleteAllItemsL(): end"); + } + +// ---------------------------------------------------------------------------- +// TBool CNSmlNotepadDataStore::DoHasSyncHistory() +// ---------------------------------------------------------------------------- +TBool CNSmlNotepadDataStore::DoHasSyncHistory() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoHasSyncHistory(): begin"); + TBool doHasSyncHistory = EFalse; + if( !iDataBaseOpened ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoHasSyncHistory(): NOT OPEN end"); + return doHasSyncHistory; + } + + if( iSyncHistory ) + { + if ( iOpenedStoreId != iChangeFinder->DataStoreUid() ) + { + iChangeFinder->SetDataStoreUid( iOpenedStoreId ); + doHasSyncHistory = EFalse; + } + else + { + doHasSyncHistory = ETrue; + } + } + else + { + iChangeFinder->SetDataStoreUid( iOpenedStoreId ); + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoHasSyncHistory(): end"); + return doHasSyncHistory; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoAddedItems() +// ---------------------------------------------------------------------------- +const MSmlDataItemUidSet& CNSmlNotepadDataStore::DoAddedItems() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddedItems(): begin"); + if ( iState == ENSmlOpenAndWaiting ) + { + iNewUids->Reset(); + if( iChangeFinder ) + { + TRAPD( err,iChangeFinder->FindNewItemsL( *iNewUids ) ); + if( err != KErrNone ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddedItems(): LEAVE end"); + } + } + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddedItems(): end"); + return *iNewUids; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoDeletedItems() +// ---------------------------------------------------------------------------- +const MSmlDataItemUidSet& CNSmlNotepadDataStore::DoDeletedItems() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoDeletedItems(): begin"); + if ( iState == ENSmlOpenAndWaiting ) + { + iDeletedUids->Reset(); + if( iChangeFinder ) + { + TRAPD(err,iChangeFinder->FindDeletedItemsL( *iDeletedUids ) ); + if( err != KErrNone ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoDeletedItems(): LEAVE end"); + } + } + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoDeletedItems(): end"); + return *iDeletedUids; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoSoftDeletedItems() +// ---------------------------------------------------------------------------- +const MSmlDataItemUidSet& CNSmlNotepadDataStore::DoSoftDeletedItems() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSoftDeletedItems(): begin"); + if ( iState == ENSmlOpenAndWaiting ) + { + iSoftDeletedUids->Reset(); + if( iChangeFinder ) + { + TRAPD( err, iChangeFinder->FindSoftDeletedItemsL( *iSoftDeletedUids ) ); + if( err != KErrNone ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSoftDeletedItems(): LEAVE end"); + } + } + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoSoftDeletedItems: END"); + return *iSoftDeletedUids; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoModifiedItems() +// ---------------------------------------------------------------------------- +const MSmlDataItemUidSet& CNSmlNotepadDataStore::DoModifiedItems() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoModifiedItems(): begin"); + if ( iState == ENSmlOpenAndWaiting ) + { + iReplacedUids->Reset(); + if( iChangeFinder ) + { + TRAPD( err, iChangeFinder->FindChangedItemsL( *iReplacedUids ) ); + if( err != KErrNone ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoModifiedItems(): LEAVE end"); + } + } + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoModifiedItems: END"); + return *iReplacedUids; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoMovedItems() +// ---------------------------------------------------------------------------- +const MSmlDataItemUidSet& CNSmlNotepadDataStore::DoMovedItems() const + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMovedItems(): begin"); + if ( iState == ENSmlOpenAndWaiting ) + { + iMovedUids->Reset(); + if( iChangeFinder ) + { + TRAPD( err, iChangeFinder->FindMovedItemsL( *iMovedUids ) ); + if( err != KErrNone ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMovedItems(): LEAVE end"); + } + } + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoMovedItems: END"); + return *iMovedUids; + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoResetChangeInfoL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoResetChangeInfoL( TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoResetChangeInfoL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if( iChangeFinder ) + { + iChangeFinder->ResetL(); + } + iSnapshotRegistered = EFalse; + TInt err = FetchModificationsL(); + User::RequestComplete( iCallerStatus, err ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoResetChangeInfoL(): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCommitChangeInfoL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus, + const MSmlDataItemUidSet& aItems ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitChangeInfoL(aItems): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if( iChangeFinder ) + { + iChangeFinder->CommitChangesL( aItems ); + User::RequestComplete( iCallerStatus, KErrNone ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitChangeInfoL(aItems):success end"); + return; + } + User::RequestComplete( iCallerStatus, KErrNotReady ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitChangeInfoL(aItems): end"); + } + +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoCommitChangeInfoL() +// ---------------------------------------------------------------------------- +void CNSmlNotepadDataStore::DoCommitChangeInfoL( TRequestStatus& aStatus ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitChangeInfoL(): begin"); + iCallerStatus = &aStatus; + *iCallerStatus = KRequestPending; + if( iChangeFinder ) + { + iChangeFinder->CommitChangesL(); + User::RequestComplete( iCallerStatus, KErrNone ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitChangeInfoL(): success end"); + return; + } + User::RequestComplete( iCallerStatus, KErrNotReady ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoCommitChangeInfoL(): end"); + } + +// ---------------------------------------------------------------------------- +// CSmlDataStoreFormat* CNSmlNotepadDataStore::DoOwnStoreFormatL() +// ---------------------------------------------------------------------------- +CSmlDataStoreFormat* CNSmlNotepadDataStore::DoOwnStoreFormatL() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoOwnStoreFormatL(): begin"); + TFileName fileName; + TParse parse; + + // Locate the resource file + TFileName dllFileName; + Dll::FileName( dllFileName ); + + TFileName resourceFileName; + resourceFileName.Copy( TParsePtrC( dllFileName ).Drive() ); + resourceFileName.Append(KNSmlNotepadStoreFormatRsc); + + parse.Set( resourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); + fileName = parse.FullName(); + RResourceFile resourceFile; + BaflUtils::NearestLanguageFile( iRfs, fileName ); + resourceFile.OpenL( iRfs, fileName ); + CleanupClosePushL( resourceFile ); + HBufC8* notepadDataFormat = resourceFile.AllocReadLC( NSML_NOTEPAD_DATA_STORE_FORMAT ); + TResourceReader reader; + reader.SetBuffer( notepadDataFormat ); + CSmlDataStoreFormat* lDsFormat = CSmlDataStoreFormat::NewLC( iStringPool, reader ); + CleanupStack::Pop(lDsFormat); // lDsFormat + CleanupStack::PopAndDestroy(notepadDataFormat); // notepadDataFormat + CleanupStack::PopAndDestroy();// resourceFile + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoOwnStoreFormatL(): end"); + return lDsFormat; + } + +// ---------------------------------------------------------------------------- +// TInt CNSmlNotepadDataStore::OpenItemL(TSmlDbItemUid& aUid,CBufBase& aItem) +// ---------------------------------------------------------------------------- +TInt CNSmlNotepadDataStore::OpenItemL(TSmlDbItemUid& aUid,CBufBase& aItem) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::OpenItemL(): begin"); + TInt err = KErrNone; + if(iNpdDb->IsOpen()) + { + CNpdItem *note; + note = CNpdItem::NewLC(); + TRAP(err,iNpdDb->GetNoteL(aUid, *note)); + if(err == KErrNone) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore:: FetchItemL(): begin"); + + HBufC8* buf = ConvertNoteToSyncItemL(*note); + CleanupStack::PushL(buf); + aItem.Reset(); + // Write the buffer to the passed writeStream (aItem) + TBufBuf bufBuf; + bufBuf.Set(aItem, 0, TBufBuf::EWrite); + RWriteStream writeStream( &bufBuf); + writeStream.PushL(); + writeStream.WriteL(buf->Des().Ptr(), buf->Des().Length()); + writeStream.CommitL(); + CleanupStack::PopAndDestroy(1);//writeStream + CleanupStack::PopAndDestroy(buf);//buf + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchItemL(): end"); + } + CleanupStack::PopAndDestroy(note); // note + } + else + { + err = KErrNotReady; + } + + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::OpenItemL(): end"); + return err; +} + +// ---------------------------------------------------------------------------- +// TInt CNSmlNotepadDataStore::ConvertSyncItemToNoteL(const TDesC8& aSyncItem, CNpdItem& aNote) +// ---------------------------------------------------------------------------- +TInt CNSmlNotepadDataStore::ConvertSyncItemToNoteL(const TDesC8& aSyncItem, CNpdItem& aNote) + { + TInt err(KErrNone); + TTime gmt; + gmt.UniversalTime(); + gmt.RoundUpToNextMinute(); + gmt -= TTimeIntervalMinutes(1); + HBufC *note = NULL; + if(&aSyncItem) + { + RDesReadStream stream(aSyncItem); + CPlainText *text; + text = CPlainText::NewL(); + CleanupStack::PushL(text); + CPlainText::TImportExportParam param; + param.iForeignEncoding = KCharacterSetIdentifierUtf8; + param.iOrganisation = CPlainText::EOrganiseByParagraph; + param.iGuessForeignEncoding = EFalse; + CPlainText::TImportExportResult result; + text->ImportTextL(0,stream,param,result); + stream.Close(); + note = HBufC::NewL(result.iOutputChars); + CleanupStack::PushL(note); + TPtr tmpdes = note->Des(); + text->Extract(tmpdes,0); + CleanupStack::Pop(note); + CleanupStack::PopAndDestroy(text); + } + aNote.SetContent(note); + aNote.SetModified(gmt); + return err; + } + +// ---------------------------------------------------------------------------- +// HBufC8* CNSmlNotepadDataStore::ConvertNoteToSyncItemL(CNpdItem& aNote) +// ---------------------------------------------------------------------------- +HBufC8* CNSmlNotepadDataStore::ConvertNoteToSyncItemL(CNpdItem& aNote) + { + if (!aNote.Content()) + { + HBufC8* tempHBuf = HBufC8::NewL(KNullCharLen);//room for null character + return tempHBuf; + } + // Note: a single unicode character can be 4 bytes long in UTF8 format, + // hence the long length for 8-bit buffer. + TInt length = (aNote.Content()->Length()) * KUTF8Lenght; + HBufC8* tempHBuf = HBufC8::NewLC(length + KNullCharLen); + CPlainText *text = CPlainText::NewL(); + CleanupStack::PushL(text); + text->InsertL(0,aNote.Content()->Des()); + CPlainText::TImportExportResult result; + CPlainText::TImportExportParam param; + param.iForeignEncoding = KCharacterSetIdentifierUtf8; + param.iOrganisation = CPlainText::EOrganiseByParagraph; + param.iGuessForeignEncoding = EFalse; + param.iMaxOutputChars = length; + TPtr8 ptr = tempHBuf->Des(); + RDesWriteStream stream(ptr); + text->ExportTextL(0,stream,param,result); + stream.Close(); + CleanupStack::PopAndDestroy(text); + CleanupStack::Pop(tempHBuf);//pop the HBufC8 temp + return (tempHBuf); + } + +// ---------------------------------------------------------------------------- +// TInt CNSmlNotepadDataStore::DoAddItemToDataBaseL(CBufBase& aItem) +// ---------------------------------------------------------------------------- +TInt CNSmlNotepadDataStore::DoAddItemToDataBaseL(CBufBase& aItem,TInt& aUid) +{ + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddItemToDataBaseL: begin"); + TInt lKey = -1; + TInt length = aItem.Size(); + HBufC8* buf = HBufC8::NewLC(length*KUnicodeSize + KNullCharLen); + buf->Des().Copy(aItem.Ptr(0)); + TPtr8 lPtr(buf->Des()); + CNpdItem *note; + note = CNpdItem::NewLC(); + TInt err(KErrNone); + err = ConvertSyncItemToNoteL(*buf, *note); + if(err != KErrNone) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddItemToDataBaseL: conversion error"); + } + else + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddItemToDataBaseL: before adding to notepad db"); + TRAP(err,iNpdDb->AddNoteL(*note,lKey)); + if(err!=KErrNone) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddItemToDataBaseL: Addnote error"); + } + else + { + TNSmlSnapshotItem item( lKey ); + TTime lLastModified = note->LastModified(); + item.SetLastChangedDate(lLastModified); + item.SetSoftDelete( EFalse ); + iChangeFinder->ItemAddedL( item ); + } + } + aUid = lKey; + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoAddItemToDataBaseL: after adding to notepad db"); + CleanupStack::PopAndDestroy(note);//note + CleanupStack::PopAndDestroy(buf);//buf + return err; +} +// ---------------------------------------------------------------------------- +// void CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL(CBufBase& aItem, TInt& aUid) +// ---------------------------------------------------------------------------- +TInt CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL(CBufBase& aItem, TInt& aUid) +{ + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL: begin"); + TInt length = aItem.Size(); + HBufC8* buf = HBufC8::NewLC(length*KUnicodeSize + KNullCharLen); + buf->Des().Copy(aItem.Ptr(0)); + TPtr8 lPtr(buf->Des()); + CNpdItem *note; + note = CNpdItem::NewLC(); + TInt err(KErrNone); + err = ConvertSyncItemToNoteL(*buf, *note); + if(err != KErrNone) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL: conversion error"); + } + else + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL: before updating into notepad db"); + TRAP(err,iNpdDb->UpdateNoteL(aUid,*note)); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL: after updating into notepad db"); + if(err!=KErrNone) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL: updating error"); + } + else + { + TNSmlSnapshotItem item( aUid ); + item.SetLastChangedDate( note->LastModified() ); + item.SetSoftDelete( EFalse ); + iChangeFinder->ItemUpdatedL( item ); + } + } + CleanupStack::PopAndDestroy(note);//note + CleanupStack::PopAndDestroy(buf); //buf + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::DoReplaceItemAtDataBaseL: end"); + return err; +} + +// ------------------------------------------------------------------------------------------------ +// CNSmlNotepadDataStore::DriveBelowCriticalLevelL() +// ------------------------------------------------------------------------------------------------ +TBool CNSmlNotepadDataStore::DriveBelowCriticalLevelL( TInt aSize ) + { + return SysUtil::DiskSpaceBelowCriticalLevelL( &iRfs, aSize, iDrive ); + } + +// ---------------------------------------------------------------------------- +// TInt CNSmlNotepadDataStore::FetchModificationsL() +// ---------------------------------------------------------------------------- +TInt CNSmlNotepadDataStore::FetchModificationsL() + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: begin"); + TInt err( KErrNone ); + CArrayPtr* arrNpdItem = NULL; + arrNpdItem = iNpdDb->FetchItemsLC(); + + if( !iSnapshot ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: inside if(!isnapshot)"); + iSnapshot = new (ELeave) CArrayFixSeg( 8 ); + } + + if( !iSnapshotRegistered ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: inside if(!iSnapshotRegistered)"); + for( TInt count = 0; count < arrNpdItem->Count(); count++ ) + { + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: inside for before snap"); + TNSmlSnapshotItem snap( arrNpdItem->At( count )->Key() ); + snap.SetLastChangedDate( arrNpdItem->At( count )->LastModified() ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: inside for before insertisql"); + iSnapshot->InsertIsqL( snap, iKey ); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: inside for after insertisql"); + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: for loop ends"); + iSnapshot->Compress(); + iChangeFinder->SetNewSnapshot( iSnapshot ); // changefinder takes ownership + iSnapshot = NULL; + iSnapshotRegistered = ETrue; + } + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: before popanddestroy arrnpditem"); + CleanupStack::PopAndDestroy(arrNpdItem); + _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: end"); + return err; + } + +// End of File