web_plat/feeds_engine_api/inc/Transaction.h
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /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 <e32base.h>
+#include <e32std.h>
+
+#include <ApEngineconsts.h>
+#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<const CFeedsEntity>& aFolderItems);
+
+    /**
+     * Export one or more folder items.
+     *
+     * @param aFolderItems The list of folder items.
+     * @return void
+     */
+    void ExportFolderItemL(const RPointerArray<const CFeedsEntity>& 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<const CFeedsEntity>& 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<const CFeedsEntity>& aFolderItems,
+            TInt aIndex);
+
+    /**
+     * Update one or more feed.
+     *
+     * @param aFolderItems The list of folder items.
+     * @return void
+     */
+    void UpdateFolderItemsL(
+            const RPointerArray<const CFeedsEntity>& 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<TInt>& aItemIds,
+            const RArray<TFeedItemStatus>& 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<TFeedsServerResponseType> iServerResponseTypePkg;
+    HBufC8* iResponseBuffer;
+    CBufFlat* iSettingsResponseBuffer;
+    TPtr8 iResponsePtr;
+    CPacked* iPacked;
+    CFeedsEntity* iFeedsEntity;
+    TFeedsServerSetting iSetting;
+
+    // Used to handle AddFolderItemL
+    TInt iResponseEntryId;
+    TPckg<TInt> iResponseEntryIdPkg;
+    RFeedsInterface* iFeedInterface;
+
+    };
+
+#endif  // TRANSACTION_H
+
+// End of File
\ No newline at end of file