diff -r 000000000000 -r dab8a81a92de omads/omadsextensions/adapters/bookmark/inc/bookmarkdatastore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsextensions/adapters/bookmark/inc/bookmarkdatastore.h Mon Nov 23 14:46:41 2009 +0200 @@ -0,0 +1,205 @@ +/* +* Copyright (c) 2005-2009 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: Part of SyncML Data Synchronization Plug In Adapter +* +*/ + + +#ifndef __BOOKMARKDATASTORE_H__ +#define __BOOKMARKDATASTORE_H__ + +#include +#include +#include + +#include +#include + +class CNSmlDataItemUidSet; +class CFavouritesItem; +class CBookmarkConversionUtil; +class RFeedsServer; +class CChangeFinder; +class TSnapshotItem; + +class CBookmarkDataStore : public CSmlDataStore, + public MFolderItemObserver, + public MFeedsServerObserver + { +private: + + CBookmarkDataStore(); + ~CBookmarkDataStore(); + +public: + + static CBookmarkDataStore* NewL(); + static CBookmarkDataStore* NewLC(); + void ConstructL(); + + // Transactions (optional) + void DoBeginTransactionL(); + void DoCommitTransactionL(TRequestStatus& aStatus); + void DoRevertTransaction(TRequestStatus& aStatus); + + // Batching (optional) + void DoBeginBatchL(); + void DoCommitBatchL(RArray& aResultArray, TRequestStatus& aStatus); + void DoCancelBatch(); + + // Opens data store asynchronously + void DoOpenL(const TDesC& aStoreName, MSmlSyncRelationship& aContext, TRequestStatus& aStatus); + // Cancels current asynchronous request + void DoCancelRequest(); + // Returns the name of open database, empty if OpenL hasn't been called + const TDesC& DoStoreName() const; + // Sets remote server data format + void DoSetRemoteStoreFormatL(const CSmlDataStoreFormat& aServerDataStoreFormat); + // Sets the remote server maximum object size + void DoSetRemoteMaxObjectSize(TInt aServerMaxObjectSize); + // Returns maximum object size, reported by remote server + TInt DoMaxObjectSize() const; + + // Opens item for reading + void DoOpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, TInt& aSize, + TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, TRequestStatus& aStatus); + // Initializes new item to data store + void DoCreateItemL(TSmlDbItemUid& aUid, TInt aSize, TSmlDbItemUid aParent, + const TDesC8& aMimeType, const TDesC8& aMimeVer, TRequestStatus& aStatus); + // Initializes replace of item in data store + void DoReplaceItemL(TSmlDbItemUid aUid, TInt aSize, TSmlDbItemUid aParent, + TBool aFieldChange, TRequestStatus& aStatus); + // Reads data from opened item + void DoReadItemL(TDes8& aBuffer); + // Writes data to created or replaced item + void DoWriteItemL(const TDesC8& aData); + // Commits the created or replaced item to database + void DoCommitItemL(TRequestStatus& aStatus); + // Closes the opened item + void DoCloseItem(); + // Moves item in the database + void DoMoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent, TRequestStatus& aStatus); + // Deletes item from the database + void DoDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus); + // Soft deletes item (if supported by plugin adapter), can be equal to DoDeleteItemL + void DoSoftDeleteItemL(TSmlDbItemUid aUid, TRequestStatus& aStatus); + // Deletes all items from the database + void DoDeleteAllItemsL(TRequestStatus& aStatus); + + // Returns, whether data store has history info. EFalse means slow sync + TBool DoHasSyncHistory() const; + // Returns ids of items, which are added after previous synchronization + const MSmlDataItemUidSet& DoAddedItems() const; + // Returns ids of items, which are deleted after previous synchronization + const MSmlDataItemUidSet& DoDeletedItems() const; + // Returns ids of items, which are soft-deleted after previous synchronization + const MSmlDataItemUidSet& DoSoftDeletedItems() const; + // Returns ids of items, which are modified after previous synchronization + const MSmlDataItemUidSet& DoModifiedItems() const; + // Returns ids of items, which are moved after previous synchronization + const MSmlDataItemUidSet& DoMovedItems() const; + // Resets change information of items (makes all items new from DS point of view) + void DoResetChangeInfoL(TRequestStatus& aStatus); + // Commits the changes, that are sent into the remote server + void DoCommitChangeInfoL(TRequestStatus& aStatus, const MSmlDataItemUidSet& aItems); + // Commits the changes, that are sent into the remote server + void DoCommitChangeInfoL(TRequestStatus& aStatus); + +private: // From MFolderItemObserver + void FolderItemRequestCompleted(TInt aStatus, CRequestHandler::TRequestHandlerType); + void FolderItemChanged() {}; +private: // From MFeedsServerObserver + void UpdateAllProgress(TInt, TInt ) {}; + void SettingsChanged( TInt ) {}; +private: // From MConnectionObserver + virtual void NetworkConnectionNeededL(TInt* /*aConnectionPtr*/, TInt& /*aSockSvrHandle*/, + TBool& /*aNewConn*/, TApBearerType& /*aBearerType*/){}; +private: + void DoFolderItemRequestCompletedL( TInt aStatus ); + void CreateRssItemL( TInt aRssParentUid, const TDesC& aName, const TDesC& aUrl, TBool aIsFolder ); + void ReplaceRssItemL( TInt aRssItemUid, const TDesC& aNewName, const TDesC& aNewUrl ); + void RssItemCreatedL(); + void RssItemReplacedL( TBool& aMoveNeeded ); + void RegisterSnapshotL(); + void RegisterToSnapshotL( CArrayFixSeg* aSnapshot, TInt aFolderUid ); + void RegisterRssFeedsToSnapshotL( CArrayFixSeg* aSnapshot, + const CFolderItem& folder ); + void AssignString( TDes8& aDestination, const TDesC8& aSource ); + + // Data store states + enum TState + { + EClosed = 0, + EOpenAndWaiting, + EBookmarkOpen, + EBookmarkCreating, + EBookmarkUpdating, + EBookmarkUpdatedAndMoving, + EBookmarkMoving, + EBookmarkDeleting, + EBookmarkDeletingAll + }; + + TState iCurrentState; + + RFs iRfs; + RFavouritesSession iSession; + RFavouritesDb iDb; + TBool iDataBaseOpened; + + RFeedsServer iFeedsServer; + RFolderItem iRootFolder; + + TRequestStatus* iCallerStatus; + + /** + * Key that is used in sorting snapshot. + */ + const TKeyArrayFix iKey; + + /** + * Change finder, used to determine db modifications. + */ + CChangeFinder* iChangeFinder; + + /** + * Bookmark item converter, used to convert xml and vBookmark data. + */ + CBookmarkConversionUtil* iConverter; + + TInt* iCurrentItem; + TInt iReplaceItem; + TSnapshotItem* iMovedItem; + + CBufFlat* iDataBuffer; + TInt iWriterPosition; + TInt iReaderPosition; + + TBool iHasHistory; + + CNSmlDataItemUidSet* iNewItems; + CNSmlDataItemUidSet* iDeletedItems; + CNSmlDataItemUidSet* iSoftDeletedItems; + CNSmlDataItemUidSet* iUpdatedItems; + CNSmlDataItemUidSet* iMovedItems; + + CFavouritesItem::TType iMimeType; + TInt iParentFolder; + TFileName iNewItemName; + + CFavouritesItem* iItemToBeReplaced; + + }; + +#endif