--- /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 <barsc.h>
+#include <bautils.h>
+#include <s32mem.h>
+#include <sysutil.h>
+#include <nsmlnotepaddatastoreformat.rsg>
+#include <data_caging_path_literals.hrh>
+#include <SmlDataProvider.h>
+#include <txtetext.h>
+#include <charconv.h>
+#include <nsmlchangefinder.h>
+
+#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<TNSmlSnapshotItem>(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<TInt>& /*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<CNpdItem>* arrNpdItem = NULL;
+ arrNpdItem = iNpdDb->FetchItemsLC();
+
+ if( !iSnapshot )
+ {
+ _NOTEPAD_DBG_FILE("CNSmlNotepadDataStore::FetchModificationsL: inside if(!isnapshot)");
+ iSnapshot = new (ELeave) CArrayFixSeg<TNSmlSnapshotItem>( 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