web_plat/feeds_engine_api/inc/FeedsServerFeed.h
changeset 0 dd21522fd290
child 26 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web_plat/feeds_engine_api/inc/FeedsServerFeed.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,653 @@
+/*
+* 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 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:  The client side connection to a feed on the FeedsSever.
+*
+*/
+
+
+#ifndef FEEDS_SERVER_FEED_H
+#define FEEDS_SERVER_FEED_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+
+#include <FeedsServerRequestHandler.h>
+#include <FeedsServerMsg.h>
+#include "FeedsEntity.h"
+
+#include "LeakTracker.h"
+#include "Transaction.h"
+
+// CONSTANTS
+
+// MACROS
+
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+class CEnclosure;
+class CFeed;
+class CFeedsEntity;
+class CItem;
+class CPackedFeed;
+class RFeedsServer;
+class RFile;
+class CFeedRequestHandler;
+
+/**
+*  The RFeed observer interface.
+*
+*  \b Library: FeedsEngine.lib
+*
+*  @since 3.1
+*/
+class MFeedObserver : public MConnectionObserver
+    {
+    public:  // New Methods
+        /**
+        * Called when the asynchronous request is complete.
+        *
+        * @since 3.1
+        * @param aStatus The completion status code.
+        * @return void.
+        */
+        virtual void FeedRequestCompleted(TInt aStatus) = 0;
+
+        /**
+        * Notifies the observer that the feed has changed.  This method is called
+        * when the feed is updated by the feeds server.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        virtual void FeedChanged() = 0;
+
+        /**
+        * Notifies the observer that the feed's item status has changed.  
+        * This method is called when __another__ client updates the feed's 
+        * item status (via UpdateFeedItemStatusL).
+        *
+        * @since 3.1
+        * @return void.
+        */
+        virtual void FeedItemStatusChanged() = 0;
+    };
+
+
+/**
+*  The client side interface to a server resident Feed.
+*
+*  \b Library: FeedsEngine.lib
+*
+*  @since 3.1
+*/
+class RFeed: public RSubSessionBase, public MRequestHandlerObserver
+    {
+    public:
+        /**
+        * C++ default constructor.
+        */
+        IMPORT_C RFeed(MFeedObserver& aObserver);
+
+
+    public:  // From MRequestHandlerObserver
+        /**
+        * Requests the observer to send a command to the server.
+        *
+        * @since 7.1
+        * @param aFunction The function number identifying the request. 
+        * @param aArgs A set of up to 4 arguments and their types to be passed to the server.
+        * @param aStatus The request status object used to contain the completion status of the request.
+        * @return void.
+        */
+        virtual void SendAsyncCommand(TInt /*aFunction*/, const TIpcArgs& /*aArgs*/, 
+                TRequestStatus& /*aStatus*/) const {} ;
+
+        /**
+        * Preserving Binary Compatibility.
+        *
+        * @since 7.1
+        * Empty function does nothing.
+        * @return void.
+        */
+        virtual void RequestHandlerCompleted(CRequestHandler& /*aRequestHandler*/,
+                TInt /*aStatus*/)  {} ;
+
+        /**
+        * Preserving Binary Compatibility.
+        *
+        * @since 7.1
+        * Empty function does nothing.
+        * @return void.
+        */
+        virtual void CancelAllCommandsL() { } ;
+
+        /**
+        * Request to create a network connection.
+        *
+        * @since 3.1
+        * @param aConnectionPtr A pointer to the new connection. If NULL, the 
+        *                       proxy filter will automatically create a network connection.
+        * @param aSockSvrHandle A handle to the socket server.
+        * @param aNewConn A flag if a new connection was created. If the 
+        *                 connection is not new, proxy filter optimization will not 
+        *                 read the proxy again from CommsBd.
+        * @param aBearerType The bearer type of the new connection
+        * @return void
+        */
+        virtual void NetworkConnectionNeededL(TInt* aConnectionPtr, TInt& aSockSvrHandle,
+            TBool& aNewConn, TApBearerType& aBearerType);
+
+    public:  // New methods
+
+        /**
+        * Notifies the observer that the request is completed.
+        *
+        * @since 3.1
+        * @param aRequestHandler The request handler.
+        * @param aStatus The result code of the request.
+        * @return void.
+        */
+        void RequestHandlerCompletedL(CTransaction& aTrans, TInt aStatus);
+ 
+        /**
+        * Opens a session to the given feed on the server.
+        *
+        * @since 3.1
+        * @param aFeedsServer The shared connection to the feeds server.
+        * @return Error/success code
+        */
+        IMPORT_C TInt Open(RFeedsServer& aFeedsServer);
+
+        /**
+        * Closes the session.
+        *
+        * @since 3.1
+        * @return void
+        */
+        IMPORT_C void Close();
+
+        /**
+        * Fetches the given feed.  FetchFeedCompleted is called upon completion.
+        * The same url could appear multiple times in the feeds DB if each has different folder list ID.
+        *
+        * @since 3.1
+        * @param aUrl The url of the feed.
+        * @param aFolderListId The folder list ID associate with the feed.
+        * @param aForceUpdate When true the server will ignore the cache.
+        * @param aNoCache When true the server will not cache the feed.
+        * @return void
+        */
+        IMPORT_C void FetchFeedL(const TDesC& aUrl, TInt aFolderListId = 0, TBool aForceUpdate = EFalse, 
+                TBool aNoCache = EFalse);
+
+        /**
+        * Fetches the given feed -- using the feed's id.  FetchFeedCompleted
+        * is called upon completion.
+        *
+        * @since 3.1
+        * @param aFeedId The id of the feed (from the associated CFolderItem).
+        * @param aForceUpdate When true the server will ignore the cache.
+        * @param aNoCache When true the server will not cache the feed.
+        * @return void
+        */
+        IMPORT_C void FetchFeedL(TInt aFeedId, TBool aForceUpdate = EFalse, 
+                TBool aNoCache = EFalse);
+
+        /**
+        * Request the feeds server to update the feed's item status. 
+        *
+        * @since 3.1
+        * @param aItemIds The id's of the items to update.
+        * @param aItemStatus The new item status.
+        * @return void
+        */
+        IMPORT_C void UpdateFeedItemStatusL(const RArray<TInt>& aItemIds,
+                const RArray<TItemStatus>& aItemStatus, TInt aUnreadCount);
+
+        /**
+        * Returns ETrue if it has an available current feed.
+        *
+        * @since 3.1
+        * @return Returns ETrue if it has an available current feed.
+        */
+        IMPORT_C TBool HasCurrentFeed() const;
+
+        /**
+        * Once fetched, it returns the CFeed.  This method panics the
+        * client if it is called before the feed item is available.
+        *
+        * @since 3.1
+        * @return The root CFeed.
+        */
+        IMPORT_C const CFeed& Feed() const;
+    public:
+        friend class RFeedsServer;
+
+    private:  // Data
+        MFeedObserver&                  iObserver;
+        CFeed*                          iFeed;
+
+        RPointerArray<CFeedRequestHandler>  iActiveRequests;
+        TBool                           iPendingFetchFeed;
+        RFeedsServer*                   iFeedsServer;
+
+    };
+
+
+/**
+*  Holds information about a feed.
+*
+*  \b Library: FeedsEngine.lib
+*
+*  @since 3.0
+*/
+class CFeed: public CBase
+    {
+    public: // Destructor
+        /**
+        * Destructor.
+        */        
+        IMPORT_C virtual ~CFeed();
+
+    public: // New methods
+        /**
+        * Returns the feed's unique id.
+        *
+        * @since 3.1
+        * @return The value.
+        */
+        IMPORT_C TInt Id() const;
+
+        /**
+        * Returns the feed's title.
+        *
+        * @since 3.0
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Title() const;
+
+        /**
+        * Returns the feed's description.
+        *
+        * @since 3.0
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Description() const;
+
+        /**
+        * Returns the feed's url.
+        *
+        * @since 3.0
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Url() const;
+
+        /**
+        * Returns the feed's Date.
+        *
+        * @since 3.0
+        * @return The value.
+        */
+        IMPORT_C const TTime& Date() const;
+
+        /**
+        * Returns the number of items.
+        *
+        * @since 3.0
+        * @return The number of items.
+        */
+        IMPORT_C TInt ItemCount(void) const;
+
+        /**
+        * Returns the item at the given index
+        *
+        * @since 3.0
+        * @param aIndex The index of the item.
+        * @return Returns the item or NULL.
+        */
+        IMPORT_C const CItem& ItemAt(TInt aIndex) const;
+
+        /**
+        * Returns the INITIAL status of each of the items in the feed.
+        * The caller can then modify the values and call RFeed::UpdateFeedItemStatusL
+        * to request the feeds server to update the feed's item status. 
+        *
+        * @since 3.1
+        * @param aItemIds The ids of the items.
+        * @param aItemStatus The coresponding status of each of the items in the feed.
+        * @return void.
+        */
+        IMPORT_C void ItemStatusL(RArray<TInt>& aItemIds, 
+                RArray<TItemStatus>& aItemStatus) const;
+
+//#ifdef _DEBUG
+        /**
+        * Prints the feed to the log file.
+        *
+        * @since 3.0
+        * @return void.
+        */        
+        IMPORT_C void Debug_Print(void) const;
+
+        /**
+        * Prints info about the feed.
+        *
+        * @since 3.0
+        * @param aUrl The feeds url.
+        * @param aFile The log file.
+        * @return void.
+        */        
+        IMPORT_C void Debug_PrintInfo(const TDesC& aUrl, RFile& aFile) const;
+//#endif
+
+    private:  // New methods
+        /**
+        * Two-phased constructor.  aPackedFeed is adopted by this method.
+        * Only called from RFeed.
+        */
+        static CFeed* NewL(CFeedsEntity* aFeedsEntity);
+
+        /**
+        * C++ default constructor.
+        */
+        CFeed(CFeedsEntity* aFeedsEntity);
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Appends the new Item to the Feed.  aItem is adopted by this method.
+        *
+        * @since 3.0
+        * @param aItem The Item
+        * @return void.
+        */
+        void AddItemL(CItem* aItem);
+
+        /**
+        * Sets an attribute.
+        *
+        * @since 3.1
+        * @param aAttribute The attribute.
+        * @param aAttributeValue The attribute value.
+        * @return void.
+        */
+        void SetAttribute(TUint aAttribute, const TPtrC& aAttributeValue);
+
+    private:  // Data
+        TLeakTracker          iLeakTracker;
+
+        CFeedsEntity*         iFeedsEntity;
+        TInt                  iFeedId;
+        TPtrC                 iTitle;
+        TPtrC                 iDescription;
+        TPtrC                 iUrl;
+        TTime                 iDate;
+
+        TInt                  iOtherTitles;
+        TInt                  iOtherDescriptions;
+        TInt                  iOtherLinks;
+
+        RPointerArray<CItem>  iItems;
+
+    public:  // Friends
+        friend class CFeedRequestHandler;
+        friend class RFeed;
+    };
+
+
+/**
+*  Holds information about a feed's item.
+*
+*  \b Library: FeedsEngine.lib
+*
+*  @since 3.0
+*/
+class CItem: public CBase
+    {
+    public:  // Destructor
+        /**
+        * Destructor.
+        */        
+        IMPORT_C virtual ~CItem();
+
+    public: // New methods
+        /**
+        * Returns the item's id.
+        *
+        * @since 3.1
+        * @return The value.
+        */
+        IMPORT_C TInt Id() const;
+
+        /**
+        * Returns the item's title.
+        *
+        * @since 3.0
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Title() const;
+
+        /**
+        * Returns the item's description.
+        *
+        * @since 3.0
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Description() const;
+
+        /**
+        * Returns the item's url.
+        *
+        * @since 3.0
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Url() const;
+
+        /**
+        * Returns the item's Date.
+        *
+        * @since 3.1
+        * @return The value.
+        */
+        IMPORT_C const TTime& Timestamp() const;
+
+        /**
+        * Returns the item's status.
+        *
+        * @since 3.1
+        * @return The value.
+        */
+        IMPORT_C TItemStatus ItemStatus() const;
+
+        /**
+        * Returns the number of enclosures.
+        *
+        * @since 3.1
+        * @return The number of items.
+        */
+        IMPORT_C TInt EnclosureCount(void) const;
+
+        /**
+        * Returns the enclosure at the given index
+        *
+        * @since 3.1
+        * @param aIndex The index of the enclosure.
+        * @return The enclosure.
+        */
+        IMPORT_C const CEnclosure& EnclosureAt(TInt aIndex) const;
+        
+//#ifdef _DEBUG
+        /**
+        * Prints the item to the log file.
+        *
+        * @since 3.0
+        * @return void.
+        */        
+        IMPORT_C void Debug_Print(void) const;
+//#endif
+
+    private:  // New methods
+        /**
+        * Two-phased constructor.
+        * Only called from RFeed.
+        */
+        static CItem* NewL(CFeedsEntity* aFeedsEntity);
+
+        /**
+        * C++ default constructor.
+        */
+        CItem(CFeedsEntity* aFeedsEntity);
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Appends the new enclosure to the Item.  aEnclosure is adopted by this method.
+        * Only called from RFeed.
+        *
+        * @since 3.1
+        * @param aEnclosure The enclosure
+        * @return void.
+        */
+        void AddEnclosureL(CEnclosure* aEnclosure);
+
+        /**
+        * Sets an attribute.
+        *
+        * @since 3.1
+        * @param aAttribute The attribute.
+        * @param aAttributeValue The attribute value.
+        * @return void.
+        */
+        void SetAttribute(TUint aAttribute, const TPtrC& aAttributeValue);
+
+    private:  // Data
+        TLeakTracker               iLeakTracker;
+
+        CFeedsEntity*              iFeedsEntity;
+        TPtrC                      iTitle;
+        TPtrC                      iDescription;
+        TPtrC                      iUrl;
+        TTime                      iTimestamp;
+        TInt                       iId;
+        TItemStatus                iItemStatus;
+
+        RPointerArray<CEnclosure>  iEnclosures;
+
+    public:  // Friends
+        friend class CFeed;
+    };
+
+
+/**
+*  Holds information about a feed's enclosure.
+*
+*  \b Library: FeedsEngine.lib
+*
+*  @since 3.1
+*/
+class CEnclosure: public CBase
+    {
+    public:  // Destructor
+        /**
+        * Destructor.
+        */        
+        IMPORT_C virtual ~CEnclosure();
+
+    public: // New methods
+        /**
+        * Returns the enclosure's content-type.
+        *
+        * @since 3.1
+        * @return The value.
+        */
+        IMPORT_C const TDesC& ContentType() const;
+
+        /**
+        * Returns the enclosure's Size.
+        *
+        * @since 3.1
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Size() const;
+
+        /**
+        * Returns the enclosure's url.
+        *
+        * @since 3.1
+        * @return The value.
+        */
+        IMPORT_C const TDesC& Url() const;
+
+//#ifdef _DEBUG
+        /**
+        * Prints the enclosure to the log file.
+        *
+        * @since 3.1
+        * @return void.
+        */        
+        IMPORT_C void Debug_Print(void) const;
+//#endif
+
+    private:
+        /**
+        * Two-phased constructor.
+        * Only called from RFeed.
+        */
+        static CEnclosure* NewL(CFeedsEntity* aFeedsEntity);
+
+        /**
+        * C++ default constructor.
+        */
+        CEnclosure(CFeedsEntity* aFeedsEntity);
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Sets an attribute.
+        *
+        * @since 3.1
+        * @param aAttribute The attribute.
+        * @param aAttributeValue The attribute value.
+        * @return void.
+        */
+        void SetAttribute(TUint aAttribute, const TPtrC& aAttributeValue);
+
+    private:  // Data
+        TLeakTracker  iLeakTracker;
+
+        CFeedsEntity* iFeedsEntity;
+        TPtrC         iContentType;
+        TPtrC         iSize;
+        TPtrC         iUrl;
+
+    public:  // Friends
+        friend class CFeed;
+    };
+
+#endif  // FEEDS_SERVER_FEED_H
+// End of File
\ No newline at end of file