diff -r 000000000000 -r dd21522fd290 web_plat/feeds_engine_api/inc/Transaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web_plat/feeds_engine_api/inc/Transaction.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,508 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Main transaction class for handling server client communication + * +*/ + + +#ifndef TRANSACTION_H +#define TRANSACTION_H + +// INCLUDES +#include +#include + +#include +#include "FeedsServerMsg.h" + +#include "FeedsEntity.h" +#include "FeedsInterface.h" + +// CONSTANTS + +// MACROS + +// FUNCTION PROTOTYPES + +// CLASS DECLARATION +class CIdle; +class CPackedFolder; +class CPackedFeed; +class CFeedsMap; +class CTransaction; +class RFeedsInterface; +class CFeedsEntity; +struct TFeedsServerSetting; + +// DATA TYPES + +// Feeds Events +enum TFeedsEvent + { + EFeedsRequestCompleted, + EFeedsRequestFailed + }; + +class CTransaction : public CActive + { +public: + // Data types + enum TTransactionType + { + ENone = 0, + // folder related + EFetchRootFolderItem, + EWatchForChanges, + EAddFolderItem, + EDeleteFolderItem, + EChangeFolderItem, + EMoveFolderItem, + EMoveFolderItemTo, + EUpdateFolderItem, + EImportOPML, + EExportOPML, + + // feed related + EFetchFeed, + EUpdateItemStatus, + + // general client related + EChangeSettings, + EFetchSettings, + EWatchForSettingChanges, + ECancelAll, + EDisconnectManualUpdateConnection, + EPrintDBTables + }; + +public: + // Construct/Destructor + /** + * Two-phased constructor. + */ + static CTransaction* NewL(MTransactionObserver& aObserver, TInt aUniqueId, + TInt aFolderListId); + + static CTransaction* NewLC(MTransactionObserver& aObserver, TInt aUniqueId, + TInt aFolderListId); + + /** + * Destructor. + */ + virtual ~CTransaction(); + +public: + // From CActive + /** + * Implements cancellation of an outstanding request. + * + * @return void. + */ + virtual void DoCancel(); + + /** + * Handles an active object's request completion event. + * + * @return void. + */ + virtual void RunL(); + + /** + * Handles an active object's errors. + * + * @param aError The error. + * @return A status code. + */ + virtual TInt RunError(TInt aError); + +public: + // New methods + /** + * Starts an CIdle to delete the instance after the callstack has unrolled. + * + * @return Void + */ + IMPORT_C void AutoDelete(); + + /** + * Returns the handler's type. + * + * @return Void + */ + IMPORT_C TTransactionType Type(); + +private: + // New Methods + /** + * C++ default constructor. + */ + CTransaction(MTransactionObserver& aObserver, TInt aUniqueId, + TInt aFolderListId); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * Starts the handler + * + * @return void + */ + void Start(); + + /** + * Called to handle the response. + * + * @return Void + */ + void RequestCompletedL(TInt aStatusCode); + + /** + * Request the FeedsServer to cancel all activities that can be cancelled. + * + * @return void + */ + void CancelAllL(); + +private: + /** + * Deletes the instance after the callstack has unrolled.. + * + * @return Void + */ + static TInt DelayedDelete(TAny* aPtr); + +public: // Function from client request handler + /** + * Print tables of database. + * + * @since 7.1 + * @return void + */ + void DebugPrintTables(); + + /** + * Disconnect connection provided by client for manual update. + * + * @return void + */ + void DisconnectManualUpdateConnection(); + + /** + * Sets up a notifier to execute when the settings of given folder list changes. + * + * @param aFolderListId The folder-list's id. + * @return void + */ + void WatchSettingsL(); + + /** + * Handles the upating of the FeedsServer settings. + * + * @return void + */ + void ChangeServerSettingsL(const TFeedsServerSetting& aNewSetting); + + /** + * Handles the fetching of the FeedsServer settings. + * + * @return void + */ + void FetchServerSettingsL(); + + /** + * Handles the fetching of the feeds server settings synchronously. + * + * @since 7.1 + * @return void + */ + void FetchServerSettingsSyncL(); + + + /** + * Returns the FeedsServer's settings. + * + * @return The settings. + */ + IMPORT_C TFeedsServerSetting Settings(); + +public: + /** + * Sets the feed interface object + * + * @param aFeedInterface + * @return void + */ + void SetFeedInterface(RFeedsInterface* aFeedInterface) + { + iFeedInterface = aFeedInterface; + } + + /** + * Returns transaction id + * + * @return Transaction id + */ + IMPORT_C TInt GetId(); + + /** + * Returns Status code + * + * @return Status code + */ + IMPORT_C TInt GetStatusCode(); + + /** + * Cancels the request + * @return Status code + */ + IMPORT_C void CancelRequest(); + +public: + //Folder related functions + /** + * Fetch the root folder associated with the given folder list id. + * + * @param aFolderListId The folder-list's id. + * @return void + */ + void FetchFolderItemL(TBool aItemTitleNeed); + + /** + * Add a new folder item. + * + * @param aTitle The title. + * @param aUrl The url if this is not a folder. + * @param aIsFolder Whether or not this is a folder. + * @param aParent The parent folder-item. + * @return void + */ + void AddFolderItemL(const TDesC& aTitle, const TDesC& aUrl, + TBool aIsFolder, const CFeedsEntity& aParent, TInt aFreq); + + /** + * Change a folder item. + * + * @param aTitle The title. + * @param aUrl The url if this is not a folder. + * @return void + */ + void ChangeFolderItemL(const CFeedsEntity& aFolderItem, + const TDesC& aTitle, const TDesC& aUrl, TInt aFreq); + + /** + * Delete one or more folder items. + * + * @param aFolderItems The list of folder items. + * @return void + */ + void DeleteFolderItemL(const RPointerArray& aFolderItems); + + /** + * Export one or more folder items. + * + * @param aFolderItems The list of folder items. + * @return void + */ + void ExportFolderItemL(const RPointerArray& aFolderItems, + const TDesC &aExportFileName); + + /** + * Move one or more folder items to a different parent folder. + * + * @param aFolderItems The list of folder items. + * @param aParent The parent. + * @return void + */ + void MoveFolderItemsToL(const RPointerArray& aFolderItems, + const CFeedsEntity& aParent); + + /** + * Move one or more folder items to a new position. + * + * @param aFolderItems The list of folder items. + * @param aIndex The target index. + * @return void + */ + void MoveFolderItemsL(const RPointerArray& aFolderItems, + TInt aIndex); + + /** + * Update one or more feed. + * + * @param aFolderItems The list of folder items. + * @return void + */ + void UpdateFolderItemsL( + const RPointerArray& aFolderItems); + + /** + * Update all of the feeds associated with the given folder list id. + * + * @param aFolderListId The folder-list's id. + * @return void + */ + void UpdateFolderItemsL(); + + /** + * Sets up a notifier to execute when the folder list changes. + * + * @param aFolderListId The folder-list's id. + * @return void + */ + void WatchFolderListL(); + + /** + * Returns the folder-item -- the caller takes ownership. + * Only returns a valid folder item after a sucessful call to FetchFolderItemL. + * + * @return The folder item. + */ + + CFeedsEntity* OrphanFolderItem(); + + /** + * Import OPML file passed from the client. + * + * @param aFolderListId The folder list id to which imported feeds belong. + * @param aAutoUpdate The flag to or not to auto update the feeds with aFolderListId. + * @param aPath The OPML file path. + * @return void. + */ + void ImportOPMLL(const TDesC& aPath, TBool aClearFolderList); + +public: + //Feed related functions + /** + * Fetch the given feed. + * + * @param aUrl The url of the feed to fetch (if length equals zero then the aFeedId is used instead). + * @param aFeedId The id of the feed. + * @param aForceUpdate If ETrue the feed is always updated before returning it. + * @param aNoCache If ETrue the feed isn't placed in database after updating. + * @return void + */ + void FetchFeedHelperL(const TDesC& aUrl, TInt aFeedId, TBool aForceUpdate, + TBool aNoCache); + + /** + * Fetch the given feed. + * + * @param aUrl The url of the feed to fetch. + * @param iFolderListId The folder list ID associate with the feed. + * @param aForceUpdate If ETrue the feed is always updated before returning it. + * @param aNoCache If ETrue the feed isn't placed in database after updating. + * @return void + */ + void FetchFeedL(const TDesC& aUrl, TBool aForceUpdate, TBool aNoCache); + + /** + * Fetch the given feed. + * + * @param aFeedId The id of the feed. + * @param aForceUpdate If ETrue the feed is always updated before returning it. + * @param aNoCache If ETrue the feed isn't placed in database after updating. + * @return void + */ + void FetchFeedL(TInt aFeedId, TBool aForceUpdate = EFalse, TBool aNoCache = EFalse); + + /** + * Handles the upating of a the feed's item-status. + * + * @param aFeedId The feed. + * @param aItemIds The id's of the items to update. + * @param aItemStatus The new status of the items. + * @return void + */ + void UpdateItemStatusL(TInt aFeedId, const RArray& aItemIds, + const RArray& aItemStatus, TInt aUnreadCount); + + /** + * Returns the feedentity -- the caller takes ownership. + * + * @return The FeedsEntity. + */ + CFeedsEntity* OrphanFeedsEntity(); + + /** + * Returns Type of transaction being handled by this object + * + * @return TTransactionType. + */ + IMPORT_C TTransactionType GetType(); + + /** + * Extract the current settings from the servers response. + * + * @since 7.1 + * @param aResponseBuffer The response buffer to extract the settings from. + * @return The settings. + */ + static TFeedsServerSetting SettingsFromResponseBuffPtrL(CBufFlat& aResponseBuffer); + + /** + * returns the current settings. + * + * @since 7.1 + * @param . + * @return The settings. + */ + void GetSetting(TFeedsServerSetting& aSetting); + + // friend class declaration. + friend class RFeedsInterface; + +private: + /** + * Initialises iSetting by reading response buffer from server. + * + * @return ETrue if waiter is completed. + */ + void SettingsFromResponseBufferL(); + +private: // Data members. + + MTransactionObserver& iObserver; + TTransactionType iType; + CBufFlat* iRequestBuff; + TPtrC8 iRequestBuffPtr; + TInt iFolderListId; // Folderlist should be stored in transaction instead of FeedsEntity + + // Data + CIdle* iAutoDelete; + TBool iNotifyOnCancel; + TInt iId; + TInt iTranStatus; + + // Used to handle FetchFolderItemL/FetchFeed + TFeedsServerResponseType iServerResponseType; + TPckg iServerResponseTypePkg; + HBufC8* iResponseBuffer; + CBufFlat* iSettingsResponseBuffer; + TPtr8 iResponsePtr; + CPacked* iPacked; + CFeedsEntity* iFeedsEntity; + TFeedsServerSetting iSetting; + + // Used to handle AddFolderItemL + TInt iResponseEntryId; + TPckg iResponseEntryIdPkg; + RFeedsInterface* iFeedInterface; + + }; + +#endif // TRANSACTION_H + +// End of File \ No newline at end of file