browserui/browser/FeedsInc/FeedsClientUtilities.h
branchRCL_3
changeset 48 8e6fa1719340
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsInc/FeedsClientUtilities.h	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,759 @@
+/*
+* 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:  Manages the feed related views and implements the FeedsViewBridge.
+*
+*/
+
+#ifndef FEEDS_CLIENT_UTILITIES_H
+#define FEEDS_CLIENT_UTILITIES_H
+
+// INCLUDES
+#include <brctlspecialloadobserver.h>
+
+#include "Preferences.h"
+#include "FeedsWaitDialog.h"
+#include "FeedsFileSearchAgent.h"
+#include "CommonConstants.h"
+#include <feedsinterface.h>
+#include <feedsmap.h>
+#include <transaction.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CAknViewAppUi;
+class CEikMenuPane;
+class MApiProvider;
+class CFeedsFolderView;
+class CFeedsTopicView;
+class CFeedsFeedView;
+class CBrowserGotoPane;
+
+// CLASS DECLARATION
+
+
+/**
+*  Manages the feed related views and implements the FeedsViewBridge.
+*  @lib FeedsViewBridge.lib
+*  @since 3.1
+*/
+class CFeedsClientUtilities: public CBase, 
+        public MPreferencesObserver,
+        public MFeedsWaitDialogListener,
+     	public MFeedsFileSearchAgentCallback,
+     	public MFeedsApiObserver
+    {
+    public:  // Constructors and destructor
+
+        static CFeedsClientUtilities* NewL( CAknViewAppUi& aAppUI, MApiProvider& aApiProvider );
+
+        /**
+        * Destructor.
+        */        
+        ~CFeedsClientUtilities();
+
+    public:  // from MPreferencesObserver
+
+        /**
+        * Derived classes should implement this method, and act accordingly.
+        */
+        void HandlePreferencesChangeL( const TPreferencesEvent aEvent,
+                                       TPreferencesValues& aValues,
+                                       TBrCtlDefs::TBrCtlSettings aSettingType );
+   
+    public: //From MFeedsApiObserver
+        /**
+        * This function is called by CFeedsInterface class whenever
+        * request is completed
+        * 
+        * @param aTrans Pointer to current transaction class
+        * @param aEvent event related to this call.
+        */
+        virtual void RequestCompleted(CTransaction* aTrans,TInt aEvent);
+
+	public:
+        /**
+        * Request to create a network connection.
+        *
+        * @since 7.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
+        */
+    	void NetworkConnectionNeededL( TInt* aConnectionPtr, TInt& aSockSvrHandle,
+                                       TBool& aNewConn, TApBearerType& aBearerType );
+
+    public:
+    
+        /**
+        * Set Browser prefs to Feed engine
+        * @since 3.1
+        * @param aValues Browser preferences       
+        * @return void
+        */    
+        void SetPreferencesToFeedL( const TPreferencesValues& aValues );
+        
+        /**
+        * Load Url in new window
+        *
+        * @since 3.1
+        * @return void.
+        */
+    	void LoadUrlL( const TDesC& aUrl );
+    	
+        /**
+        * Shows the folder view, loading the folder list from the FeedsServer if need be.
+        *
+        * @since 3.1
+        * @param aCalledFromView to recored from which view this was invoked. Default value
+        *   is BrowserBookmarksViewId if this argument is not specified.
+        * @return void.
+        */
+        void ShowFolderViewL(TUid aCalledFromView = KUidBrowserBookmarksViewId);
+
+        /**
+        * Shows the topic view, loading the given feed associated with the given 
+        * folder item.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void ShowTopicViewL(const CFeedsEntity& aFolderItem);
+
+        /**
+        * Shows the folder view and subscribes to the given feed.
+        *
+        * @since 3.1
+        * @param aTitle The feed's title.
+        * @param aUrl The feed's url.
+        * @return void.
+        */
+        void SubscribeToL(const TDesC& aTitle, const TDesC& aUrl);
+
+        /**
+        * Returns the feed related mime-types.  This makes 
+        * for a clean way to pass downloaded feeds content from the client to the FeedsServer 
+        * (via CFeedsClientUtilities::HandleFeedL).
+        *
+        * @since 3.1
+        * @return An array of supported mime-types.
+        */
+        TPtrC SupportedMimeTypesL();
+                
+        /**
+        * Returns Feeds Server related settings.
+        *
+        * @since 3.1
+        * @return Feeds Server related settings.
+        */
+        TInt FeedsServerSettingsL(TFeedsServerSetting& aSetting);
+        
+        /**
+        * Sets Feeds Server related settings.
+        *
+        * @since 3.1
+        * @param aNewSettings The new settings.
+        * @return void.
+        */
+        void SetFeedsServerSettingsL(const TFeedsServerSetting& aNewSetting);
+
+        /**
+        * Sets a Browser Control related settings.  These settings are directly passed to all 
+        * Browser Control instances used by the CFeedsViewBridge.  As such see the Browser
+        * Control documentation for infomation about the settings.
+        *
+        * @since 3.1
+        * @param aSetting The setting to update
+        * @param aValue The new value of the setting
+        * @return void.
+        */
+        void SetBrowserControlSettingL(TUint aSetting, TUint aValue);
+        
+        /**
+        * Called by RequestHandlerCompleted when the root FolderItem is either ready or an error occured.
+        *
+        * @since 3.1
+        * @param aStatus The result code of the FetchRootFolderItemL method.
+        * @param aTrans The type of transaction that was made
+        * @return void.
+        */
+        void FolderItemRequestCompleted(TInt aStatus, CTransaction::TTransactionType aTrans=CTransaction::ENone);
+
+        /**
+        * Leaving method which is called by FolderItemRequestCompleted
+        *
+        * @since 3.2
+        * @param aStatus The result code of the FetchRootFolderItemL method.
+        * @param aTrans The type of transaction that was made
+        * @return void.
+        */
+        void FolderItemRequestCompletedL(TInt aStatus, CTransaction::TTransactionType aTransType=CTransaction::ENone);
+
+        /**
+        * Called by RequestHandlerCompleted when the FolderItem has changed.  The client
+        * should request an updated copy from the server.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void FolderItemChanged() {};
+
+        /**
+        * Called by RequestHandlerCompleted when the asynchronous request is complete.
+        *
+        * @since 3.1
+        * @pram aStatus The completion status code.
+        * @return void.
+        */
+        void FeedRequestCompleted(TInt aStatus);
+        
+        /**
+        * Leaving method which is called from FeedRequestCompleted
+        *
+        * @since 3.2
+        * @pram aStatus The completion status code.
+        * @return void.
+        */
+        void FeedRequestCompletedL(TInt aStatus);
+
+        /**
+        * 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.
+        */
+        void FeedChanged() {};
+
+        /**
+        * 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.
+        */
+        void FeedItemStatusChanged() {};
+
+
+    public:  // From MWaitDialogListener
+        /**
+        * Called when the user presses the cancel button.
+        *
+        * @since 3.0
+        * @return void.
+        */
+        void DialogDismissedL();
+        
+
+    public:  // New Methods.
+        /**
+        * Searches for a FolderItem with the given name.  If "this"
+        * isn't a folder it only checks whether or not it matches
+        * the given name.  If "this" is a folder it also checks 
+        * all embedded items
+        *
+        * @since 7.1
+        * @param aName The title of the feed
+        * @param aFolder The folder to be searched
+        * @return void.
+        */
+
+        const CFeedsEntity* Search(const TDesC& aName,const CFeedsEntity& aFolder) const;
+        /**
+        * Searches for a FolderItem with the given id.  If "this"
+        * isn't a folder it only checks whether or not it matches
+        * the given id.  If "this" is a folder it also checks 
+        * all embedded items
+        *
+        * @since 7.1
+        * @param aFolderItemId The id of the folder item.
+        * @param aFolder The folder to be searched
+        * @return void.
+        */
+
+    	const CFeedsEntity* Search(TInt aFolderItemId,const CFeedsEntity& aFolder) const;
+
+        /**
+        * Get the root folder from the Feeds server.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void FetchRootFolderL();
+        
+        /**
+        * Add a new folder item.
+        *
+        * @since 3.1
+        * @param aTitle The title of the item.
+        * @param aUrl The url of the item.
+        * @param aIsFolder True if this is a folder.
+        * @param aParent The parent folder.
+        * @param aFreq The frequency for auto updating.
+        * @return void.
+        */
+        void AddFolderItemL(const TDesC& aTitle, const TDesC& aUrl,
+                TBool aIsFolder, const CFeedsEntity& aParent, TInt aFreq);
+        
+        /**
+        * Change the folder item.  If this is a folder then KNullDesC 
+        * should be passed to the aUrl argument.
+        *
+        * @since 3.1
+        * @param aFolderItem The item to update.
+        * @param aTitle The item's title..
+        * @param aUrl The item's url or KNullDesC.
+        * @param aFreq The frequency for auto updating.
+        * @return void
+        */
+        void ChangeFolderItemL(CFeedsEntity& aFolderItem, 
+                const TDesC& aTitle, const TDesC& aUrl, TInt aFreq);
+
+        /**
+        * Delete the folder items. 
+        *
+        * @since 3.1
+        * @param aFolderItem The folder item that's being deleted.
+        * @return void
+        */
+        void DeleteFolderItemsL(RPointerArray<const CFeedsEntity>& aFolderItems);
+
+        /**
+        * Move the folder items to a different parent. 
+        *
+        * @since 3.1
+        * @param aFolderItem The folder item that's being moved.
+        * @param aParent The folder item's new parent.
+        * @return void
+        */
+        void MoveFolderItemsToL(RPointerArray<const CFeedsEntity>& aFolderItems,
+                const CFeedsEntity& aParent);
+
+        /**
+        * Move the folder item to a different index. 
+        *
+        * @since 3.1
+        * @param aFolderItem The folder item that's being moved.
+        * @param aIndex The new index of the folder item (within its parent).
+        * @return void
+        */
+        void MoveFolderItemsL(RPointerArray<const CFeedsEntity>& aFolderItems,
+                TInt aIndex);
+
+        /**
+        * Get the given feed from the Feeds server.
+        *
+        * @since 3.1
+        * @param aFeedUrl The id of the feed to fetch.
+        * @param aForceUpdate When true the server will ignore the cache.
+        * @param aNoCache When true the server will not cache the feed.
+        * @return void.
+        */
+        void FetchFeedL(const CFeedsEntity& aFeedEntity, TBool aForceUpdate = EFalse, 
+                TBool aNoCache = EFalse);
+
+        /**
+        * Updates the feed with the given id.
+        *
+        * @since 3.1
+        * @param aFeedId The id of the feed to update.
+        * @return void.
+        */
+        void UpdateFeedL(const CFeedsEntity& aFeedEntity);
+                                        
+        /**
+        * Updates the given feeds in the background.
+        *
+        * @since 3.1
+        * @param aFolderItems The feeds to update.
+        * @return void.
+        */
+        void UpdateFolderItemsL(const RPointerArray<const CFeedsEntity>& 
+                aFolderItems);
+                                        
+        /**
+        * Updates all of feeds in the background.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void UpdateFolderItemsL();
+                                        
+		/**
+		* Handle the menu "Import Feeds" command. This will kick off the search
+		* for OMPL feeds files stored on the phone. Control will return via the 
+		* FeedsFileSearchComplete callback.
+		*
+		* @since 3.2
+		* @return void.
+		*/
+		void ImportFeedsL();
+		
+		/**
+		* Given a filepath on the filesystem, begin import feeds from the file path
+		* This will set up the path and flags and allow the feeds folder to be 
+		* activated before the import actually takes place.
+		*
+		* @since 3.2
+		* @return void
+		* @param a filesystem path to import from
+		*/
+		void BeginImportOPMLFeedsFileL( TFileName& aFilepath );
+	
+		/**
+		* Handle the menu "Export Feeds" command
+		* once items have been selected and a name chosen.
+		*
+		* @since 3.2
+		* @return void
+		* @param folder items to export and a name to export to
+		*/
+		void ExportFeedsL(RPointerArray<const CFeedsEntity>& aFolderItems, const TDesC &aExportFileName);
+
+        /**
+        * Shows the folder view.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void ShowFolderViewLocalL();
+
+        /**
+        * Shows the topic view.
+        *
+        * @since 3.1
+        * @param aInitialItem The initial item to show.
+        * @return void.
+        */
+        void ShowTopicViewLocalL(TInt aInitialItem);
+
+        /**
+        * Shows the feed view.
+        *
+        * @since 3.1
+        * @param aInitialItem The initial item to show.
+        * @return void.
+        */
+        void ShowFeedViewLocalL(TInt aInitialItem);
+
+
+        /**
+        * Returns the current root folder.
+        *
+        * @since 3.1
+        * @return The current root folder..
+        */
+        const CFeedsEntity* CurrentRootFolder() ;        
+
+        /**
+        * Returns the current feed.
+        *
+        * @since 3.1
+        * @return The current feed.
+        */
+        CFeedsEntity* CurrentFeed() ; 
+                                    
+        /**
+        * Add a menu item to the given menu.
+        *
+        * @since 3.1
+        * @param aMenuPane The menu to add the item to.
+        * @param aCommand The item's command.
+        * @param aTitleId The item's title resouce-id.
+        * @return void.
+        */
+        void AddItemL(CEikMenuPane& aMenuPane, TInt aCommand, TInt aTitleId);
+
+        /**
+        * Add a sub-menu to the given menu.
+        *
+        * @since 3.1
+        * @param aMenuPane The menu to add the item to.
+        * @param aCommand The cascade's command.
+        * @param aTitleId The item's title resouce-id.
+        * @param aCascade The cascade's resource id.
+        * @return void.
+        */
+        void AddCascadeL(CEikMenuPane& aMenuPane, TInt aCommand, 
+                TInt aTitleId, TInt aCascade);
+                
+        /**
+        * Sets the item's status (read/unread/new).
+        *
+        * @since 3.1
+        * @param aItemIndex The index of the item to change.
+        * @param aStatus The new status.
+        * @return void.
+        */
+        void SetItemStatusL(CFeedsEntity* aItem, TFeedItemStatus aStatus);
+
+        /**
+        * Returns the item's status (read/unread/new).
+        *
+        * @since 3.1
+        * @param aItemIndex The index of the item to change.
+        * @return The status.
+        */
+        TFeedItemStatus ItemStatus(TInt aItemIndex);
+
+        /**
+        * Writes the item status out to the server.
+        *
+        * @since 3.1
+        * @return Void.
+        */
+        void ItemStatusWriteToServerL();
+
+        /**
+        * Returns the Favicon to the given url or NULL if one isn't found.
+        *
+        * @since 3.1
+        * @param aUrl The url of the Favicon.
+        * @return The associated Favicon or NULL.
+        */
+        CGulIcon* FaviconL(const TDesC& aUrl);
+        
+        /**
+        * Connect to the server.
+        *
+        * @since 3.1
+        * @param aGetRootFolder If true the root folder is also fetched.
+        * @return Void
+        */
+        void ConnectToServerL(TBool aGetRootFolder = ETrue);
+
+        /**
+        * Disconnect from the server.
+        *
+        * @since 3.1
+        * @return Void
+        */
+        void DisconnectFromServer();
+
+        /**
+        * Since the folder list isn't updated after it is fetched the FeedsClientUtilities 
+        * tracks the last update times for feeds the user visits in the current session.
+        * This method returns the "last updated" timestamp of the given item.
+        *
+        * @since 3.1
+        * @param aItem The folder item to get the last updated time.
+        * @return The timestamp.
+        */
+        TTime FeedUpdatedTime(const CFeedsEntity& aItem);
+
+        /**
+        * Resets the "last updated" cache.
+        *
+        * @since 3.1
+        * @return Void.
+        */
+        void ResetFeedUpdateTime();
+
+        /**
+        * Update the feed's "last updated" value in the cache.
+        *
+        * @since 3.1
+        * @param aFeed The feed to udpate the last updated time.
+        * @return Void.
+        */
+        void UpdateFeedUpdatedTimeL(const CFeedsEntity& aFeed);
+
+        /**
+        * Initialize context-sensitive menu.
+        * @param aResourceId Resource id of the menu pane.
+        * @param aMenuPane Menu pane object being initialized.
+        */
+		void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+		
+		/**
+        * Processes commands.
+        *
+        * @since 3.1
+        * @param aViewId the view that calls this.
+        * @param aCommand the command to process.
+        * @return void.
+        */
+		void HandleCommandL(TUid aViewId, TInt aCommand);
+
+        /**
+        * Sets Feeds Server related settings.
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void DisconnectManualUpdateConnectionL();
+
+        /**
+        * Disconnect connection used by FeedsView
+        *
+        * @since 3.1
+        * @return void.
+        */
+        void DisconnectFeedsViewL();
+        
+        /**
+        * Set the View Id that called Feeds
+        *
+        * @since 3.1
+        * @param View id of the view Feeds was called from.
+        */
+        void SetCalledFromView(TUid aViewId);
+
+        /**
+        * Get the View Id that called Feeds
+        *
+        * @since 3.1
+        * @return the view id Feeds was called from.
+        */
+        TUid CalledFromView();
+       
+	public: // from MFeedsFileSearchAgentCallback
+        /**
+        * Callback to this class when the search agent CActive had 
+        * completed its searching for feeds files
+        *
+        * @since 3.2
+        * @return void
+        * @param the number of files found
+        */
+		
+		void FeedsFileSearchCompleteL(TInt aCount);
+
+    private:  // New Methods.
+        /**
+        * C++ default constructor.  aName and 
+        * aSourceUrl are adopted by this method.
+        */
+        CFeedsClientUtilities(CAknViewAppUi& aAppUI, MApiProvider& iApiProvider);
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+        /**
+        * Ensures that the views and the connection to the FeedsServer are ready.
+        *
+        * @since 3.1
+        * @param aGetRootFolder If true the root folder is also fetched.
+        * @return void.
+        */
+        void LazyInitL(TBool aGetRootFolder);
+        
+        /**
+        * Show a server error.
+        *
+        * @since 3.1
+        * @param aStatus The status code.
+        * @param aRequestType The type of request that was made
+        * @return void.
+        */
+        void ShowServerError(TInt aStatus, CTransaction::TTransactionType aRequestType = CTransaction::ENone);
+        
+        /**
+        * Init a menu item
+        * @since 3.1
+        * @param aMenuPane Menu pane to be initialized        
+        * @param aCommandId The command ID
+        * @param aResourceId The resource ID
+        * @param aCascadeId The cascade ID
+        * @param aFlags Flags
+        * @return void
+        */    
+        void InitMenuItemL( CEikMenuPane* aMenuPane,
+                            TInt aCommandId,
+                            TInt aResourceId, 
+                            TInt aCascadeId = 0,
+                            TInt aFlags = 0 );
+
+        /**
+        * Send the OPML using the Send UI
+        *
+        * @since 3.2
+        * @param void.
+        * @return void.
+        */
+		void SendOPMLFileL(void);
+		
+       /**
+       * 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 7.1
+       * @param aItemIds The ids of the items.
+       * @param aItemStatus The coresponding status of each of the items in the feed.
+       * @param aFeed The feed whose items' status has to fetched.
+       * @return void.
+       */
+       void ItemStatusL(RArray<TInt>& aItemIds, 
+                RArray<TFeedItemStatus>& aItemStatus, const CFeedsEntity& aFeed) const;
+
+		
+		
+    private:  // Data.
+    	CAknViewAppUi&				iAppUI;
+    	MApiProvider&				iApiProvider;
+        TUid						iNextViewId;
+        TBool						iIsUpdatingFeed;      
+        CFeedsWaitDialog*			iWaitDialog;
+        HBufC*              		iEnteredURL;
+        TInt                		iCbaResource;
+
+        CFeedsFolderView* 			iFolderView;  // not owned
+		CFeedsTopicView* 			iTopicView;  // not owned
+		CFeedsFeedView* 			iFeedView;  // not owned
+        
+        TBool						iIsConnected;
+        RArray<TInt>				iItemIds;
+        RArray<TFeedItemStatus>		iItemStatus;
+        RArray<TFeedItemStatus>		iItemStatusOrig;
+
+        HBufC*						iMimeTypes;   
+        
+        RArray<TInt>				iFeedUpdateTimeIds;
+        RArray<TTime>				iFeedUpdateTimeTimestamps;
+        
+        TDesC*						iPendingFolderItemTitle;
+        TDesC*						iPendingFolderItemUrl;
+        TDesC*						iExportFileName;        
+        
+		CFeedsFileSearchAgent*					iSearchAgent;
+		CArrayFixFlat<TBrCtlSelectOptionData>* 	iSearchOptList;
+		
+		TFileName 					iTempOPMLImportFilePath;
+		TBool						iFeedImportRequested;
+		TBool						iRequestCanceled;
+        TUid                        iCalledFromView;           
+        TBool						iIsWaitDialogDisplayed;
+        RFeedsInterface				iFeedsInterface;
+        CTransaction::TTransactionType iCurrentRequest;
+        CTransaction::TTransactionType iCanceledRequest;
+    };
+
+#endif      // FEEDS_CLIENT_UTILITIES_H
+            
+// End of File