diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/FeedsInc/FeedsClientUtilities.h --- /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 + +#include "Preferences.h" +#include "FeedsWaitDialog.h" +#include "FeedsFileSearchAgent.h" +#include "CommonConstants.h" +#include +#include +#include + +// 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& 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& 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& 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& + 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& 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& aItemIds, + RArray& 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 iItemIds; + RArray iItemStatus; + RArray iItemStatusOrig; + + HBufC* iMimeTypes; + + RArray iFeedUpdateTimeIds; + RArray iFeedUpdateTimeTimestamps; + + TDesC* iPendingFolderItemTitle; + TDesC* iPendingFolderItemUrl; + TDesC* iExportFileName; + + CFeedsFileSearchAgent* iSearchAgent; + CArrayFixFlat* 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