videofeeds/vcnsuiengine/inc/vcxnscontentprovider.h
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/vcnsuiengine/inc/vcxnscontentprovider.h	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,366 @@
+/*
+* 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: 
+*
+*/
+
+
+
+
+#ifndef C_VCXNSCONTENTPROVIDER_H
+#define C_VCXNSCONTENTPROVIDER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <mpxitemid.h>
+#include "CIptvUtil.h" 
+
+#include "vcxnscontentproviderif.h"
+#include "vcxnscontentproviderobserver.h"
+#include "vcxnscontent.h"
+
+// FORWARD DECLARATIONS
+class MVcxNsContentProviderObserver;
+class CVcxNsUiEngine;
+class CVcxNsContentList;
+class CIptvMediaContent;
+class CIptvVodContentContentBriefDetails;
+
+// CLASS DECLARATION
+
+/**
+* Class CVcxNsContentProvider handles application contents.
+*
+* @lib vcxnsuiengine.lib
+*/
+class CVcxNsContentProvider : public CBase,
+                              public MVcxNsContentProviderIf
+    { 
+
+public:
+
+    /**
+     * Constructor.
+     * @param aUiEngine Ui engine
+     */
+    static CVcxNsContentProvider* NewL( CVcxNsUiEngine& aUiEngine );
+
+    virtual ~CVcxNsContentProvider();
+
+    /**
+     * RegisterObserver.
+     * @param aObserver Observer
+     */
+    void RegisterObserver( MVcxNsContentProviderObserver* aObserver );
+
+    /**
+     * DeRegisterObserver.
+     * @param aObserver Observer
+     */
+    void DeRegisterObserver( MVcxNsContentProviderObserver* aObserver );
+
+    /**
+     * Get contents with highlighted position
+     * @param aHighlight On return, highlight index for content list
+     * @return Array of contents.
+     */
+    RPointerArray<CVcxNsContent>& GetContentsL( TInt& aHighlight );
+    
+    /**
+     * Gets contents.
+     *
+     * @return Vod contents
+     */
+    RPointerArray<CVcxNsContent>& GetContentsL();
+    
+    /**
+     * Reset the contents with given service id.
+     *
+     * @param aServiceId Service id
+     */
+    void RemoveServiceData( TUint32 aServiceId );
+
+    /**
+     * Reset the contents of specified category in service.
+     * Note: This is usually done only for search category when
+     * search results are cleared before new search.
+     *
+     * @param aServiceId Service id
+     * @param aCategoryId Category id
+     */
+    void RemoveCategoryData( TUint32 aServiceId, TUint32 aCategoryId );
+    
+    /**
+     * Handle the back command by choosing new application state.
+     * @return Was the back event consumed. If EFalse, 
+     *         the back event should be handled by caller.     
+     */
+    TBool HandleBack();
+    
+    /**
+     * Starts the content update.
+     *
+     * @return KErrNone or one of the system wide error codes.
+     */
+    TInt RefreshContentsL();
+
+    /**
+     * Starts download of given content item.
+     * @param aIndex Index of the content to be downloaded
+     * @return KErrNone or one of the system wide error codes.
+     */
+    TInt StartDownloadL( TInt aIndex );
+      
+    /**
+     * Pause download of given content item.
+     * 
+     * @param aIndex Index of the content item.
+     * @return KErrNone or one of the system wide error codes.
+     */
+    TInt PauseDownloadL( TInt aIndex );
+    
+    /**
+     * Resume download of given content item.
+     * 
+     * @param aIndex Index of the content item.
+     * @return KErrNone or one of the system wide error codes.
+     */
+    TInt ResumeDownloadL( TInt aIndex );
+    
+    /**
+     * Resume download of given content item.
+     * 
+     * @param aContent Content details
+     * @return KErrNone or one of the system wide error codes.
+     */
+    TInt ResumeDownloadL( CVcxNsContent& aContent );
+    
+    /**
+     * Cancels downloading of given content item.
+     * 
+     * @param aIndex Index of the content item.
+     * @return KErrNone or one of the system wide error codes.
+     */
+    TInt CancelDownloadL( TInt aIndex );
+    
+    /**
+     * Search content by uri.
+     * @param aUri uri of the content to be found
+     * @return Content which has the given uri or NULL if not found.
+     */
+    CVcxNsContent* SearchContentByUri( const TDesC& aUri );
+    
+    /**
+     * Search content by TMPXItemId.
+     * @param aItemId MPX item id
+     * @return Content which has the given TMPXItemId or NULL if not found.
+     */
+    CVcxNsContent* SearchContentByMpxId( TMPXItemId aItemId );
+    
+    /**
+     * Search content by id.
+     * @param aServiceId  Service id  
+     * @param aContentId  Content id
+     * @return Content which has the given service and content id.
+     */
+    CVcxNsContent* SearchContentById( TUint32 aServiceId, TUint32 aContentId );
+    
+    /**
+     * Search content's index in ui model.
+     * @param aContent Content item
+     * @return Index of the content or KErrNotFound, if not visible.
+     */
+    TInt ContentIndex( CVcxNsContent* aContent );
+    
+    /**
+     * Tell UI layer that the given single content item needs to be updated.
+     * Event is forwarded to MVcxNsContentProviderObserver
+     *
+     * @param aContentdata Updated content data     
+     */
+    void UpdateContent( CVcxNsContent* aContentdata );
+    
+    /**
+     * Fetches the icons path from epg database and 
+     * updates them to current content array.
+     */
+    void UpdateIconsPathL();
+    
+    /**
+     * Get the content with given id by any means.
+     * @param aServiceId  Service id  
+     * @param aContentId  Content id
+     * @return Content which has the given service and content id.
+     */
+    CVcxNsContent* GetContentL( TUint32 aServiceId, TUint32 aContentId );
+
+// From MVcxNsContentProviderObserver
+
+    /**
+     * Content update notification.
+     *
+     * @param aIndex Updated item's index
+     */
+    void ContentUpdated( TInt aIndex );
+    
+    /**
+     * View needs to be refreshed.
+     */
+    void RefreshView();
+
+    /**
+     * Application state needs to be updated.
+     */
+    void HandleAppStateChangedL();
+
+    /**
+     * Epg update is ongoing, show the notification.
+     * When downloading and parsing the xml, both parameters are 0.
+     * 
+     * @param aShow If ETrue, show the note, if EFalse, hide it.
+     * @param aDownloadedTbns count of downloaded thumbnails.
+     * @param aTotalTbns Total count of thumbnails to be downloaded.
+     */
+    void ShowUpdatingNoteL( TBool aShow, TInt aDownloadedTbns, TInt aTotalTbns );
+    
+    /**
+     * Store the last play position to epg db.
+     * This is intended to be used just with streams,
+     * video attributes are managed by MPX collection.
+     * @param aContent Content item
+     * @param aType Media content access type 
+     * @param aPos Last play position to be set
+     */
+    void StoreLastPlayPosL( CVcxNsContent* aContent, 
+                            CVcxNsContent::TVcxNsContentAccessType aType,
+                            TReal32 aPos );
+    
+    
+    /**
+     * Handle error, send error information to UI.
+     *
+     * @param aError Error code.
+     * @param aUpdate ETrue if error comes from epg update. 
+     *                EFalse if error is from download.
+     * @param aServiceId Service ID
+     */
+    void HandleErrorL( TInt aError, TBool aUpdate, TUint32 aServiceId );
+    
+    /**
+     * Handle dl error. 
+     *
+     * @param aError Error code.
+     * @param aContent Details of the failed video content.
+     */
+    void HandleDlErrorL( TIptvDlError aError, CVcxNsContent& aContent );
+    
+    /**
+     * Checks if video has more details than just name
+     * 
+     * @param aSelected Index of selected item
+     * @return Does the video have other details than just name
+     */
+     TBool HasVideoDetailsL( TInt aSelected );
+        
+     /**
+      * Fetches full video details
+      * 
+      * @param aSelected Index of selected item
+      * @return Content full details
+      */
+     CVcxNsContent* GetFullDetailsL( TInt aSelected );
+     
+     /**
+      * Save content view highlight for currently active category. 
+      * @param aHighlight Highlight index to save.
+      */
+     void SetContentHighlight( TInt aHighlight );
+     
+     /**
+      * Fetches full details for the given content item.
+      * 
+      * @param aContent Content, which details to fetch
+      */
+     void FetchFullDetailsL( CVcxNsContent* aContent );
+
+private:
+
+    /**
+     * Constructor.
+     * @param aUiEngine Ui engine
+     */
+    CVcxNsContentProvider( CVcxNsUiEngine& aUiEngine );
+
+    /**
+     * Get content list from cache.
+     * @return Content list
+     */
+    CVcxNsContentList* GetListFromCache();
+    
+    /**
+     * Get the Content data from DB
+     * @return Content list
+     */
+    CVcxNsContentList* LoadEpgDataL();
+    
+    /**
+     * Adds contents which has mds ids to mpx client's downlolad list.
+     * @param aContentList Content list, which items to add to dl list
+     */
+    void BuildDownloadListL( RPointerArray<CVcxNsContent>& aContentList );
+    
+    /**
+     * Adds valid content accesses from the list to the content.
+     * @param aContent Content item
+     * @param aContentAccessList Content access list
+     */
+    void AddContentAccessesL( CVcxNsContent& aContent, 
+                    RPointerArray<CIptvMediaContent>& aContentAccessList );
+    
+    /**
+     * Creates ns content item from server side videocenter content object.
+     * @param aData Source content data class
+     * @param aServiceId Content's service ID 
+     * @return Newly constructed content item
+     */
+    CVcxNsContent* ConstructContentItemL( CIptvVodContentContentBriefDetails* aData,
+                                          TUint32 aServiceId );
+    
+// Data
+    
+    /**
+     * Array of content event observers. Not Own.
+     */
+    RPointerArray<MVcxNsContentProviderObserver> iContentObservers;
+    
+    /**
+     * UI engine.
+     */
+    CVcxNsUiEngine& iUiEngine;
+
+    /**
+     * Array of content lists.
+     */
+    RPointerArray<CVcxNsContentList> iContentListList;
+    
+    /**
+     * Pointer to previously fetched content list.
+     * 
+     * Owned elsewhere.
+     */
+    CVcxNsContentList* iPreviousList;
+
+    };
+
+#endif // C_VCXNSCONTENTPROVIDER_H