videocollection/hgmyvideos/inc/vcxhgmyvideoscollectionclient.h
changeset 0 96612d01cf9f
child 6 7d91903f795f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/hgmyvideos/inc/vcxhgmyvideoscollectionclient.h	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,419 @@
+/*
+* 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:      Client class for My Videos MPX Collection.*
+*/
+
+
+
+
+#ifndef VCXHGMYVIDEOSCOLLECTIONCLIENT_H
+#define VCXHGMYVIDEOSCOLLECTIONCLIENT_H
+
+// INCLUDE FILES
+#include <coemain.h>
+#include <mpxcollectionobserver.h>
+
+// FORWARD DECLARATIONS
+class MMPXCollectionUtility;
+class MVcxHgMyVideosCategoryModelObserver;
+class MVcxHgMyVideosVideoModelObserver;
+class CVcxHgMyVideosDownloadClient;
+
+// CLASS DECLARATION
+
+/**
+ * Client class for My Videos MPX Collection.
+ *
+ * @lib vcxhgmyvideos.lib
+ */
+NONSHARABLE_CLASS( CVcxHgMyVideosCollectionClient ) : public CBase,
+                                                      public MMPXCollectionObserver
+    {
+    public:
+        
+        enum TVcxHgMyVideosCollectionCommand
+            {
+            EVcxHgMyVideosCollectionCommandNone = 0,
+            EVcxHgMyVideosCollectionCommandMultiDelete_Starting,
+            EVcxHgMyVideosCollectionCommandMultiDelete_Started,
+            EVcxHgMyVideosCollectionCommandMultiDelete_Finished,
+            EVcxHgMyVideosCollectionCommandCancelDelete_Requested,
+            EVcxHgMyVideosCollectionCommandCancelDelete_Completed,
+            EVcxHgMyVideosCollectionCommandResort,
+            EVcxHgMyVideosCollectionCommandMoveCopy_Starting,
+            EVcxHgMyVideosCollectionCommandMoveCopy_Started,
+            EVcxHgMyVideosCollectionCommandMoveCopy_Finished,
+            EVcxHgMyVideosCollectionCommandCancelMoveCopy_Requested,
+            EVcxHgMyVideosCollectionCommandCancelMoveCopy_Completed,
+            EVcxHgMyVideosCollectionCommandVideoDetails_Requested
+            };
+        
+    public: // Constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         *
+         * @return New object.
+         */
+        static CVcxHgMyVideosCollectionClient* NewL();
+
+        /**
+         * Two-phased constructor.
+         *
+         * @return New object.
+         */
+        static CVcxHgMyVideosCollectionClient* NewLC();
+
+        /**
+         * Destructor.
+         */
+        virtual ~CVcxHgMyVideosCollectionClient();
+
+    public:
+
+        /**
+         * Returns Download client.
+         *
+         * @return Reference to Download client.
+         */
+        CVcxHgMyVideosDownloadClient& DownloadClient();
+        
+        /**
+         * Returns true if object has pending command for MPX Collection Utility.
+         * 
+         * @return ETrue if command is pending.
+         */
+        TBool HasPendingCommand();        
+        
+        /**
+         * Called to set category data observer. Can be called with NULL to
+         * reset the observer.
+         * 
+         * @param aCategoryModelObserver Observer.
+         */
+        void SetCategoryModelObserver(
+                MVcxHgMyVideosCategoryModelObserver* aCategoryModelObserver ); 
+
+        /**
+         * Called to set video data observer. Can be called with NULL to
+         * reset the observer.
+         * 
+         * @param aVideoModelObserver Observer.
+         */
+        void SetVideoModelObserver(
+                MVcxHgMyVideosVideoModelObserver* aVideoModelObserver );
+        
+        /**
+         * When called, starts fetching category list. Category list is returned
+         * through callback interface MVcxHgMyVideosCategoryModelObserver.
+         */
+        void GetCategoryListL();        
+        
+        /**
+         * When called, starts fetching video list. Video list is returned
+         * through callback interface MVcxHgMyVideosVideoModelObserver.
+         * 
+         * @param aIndex Index of video list to fetch.
+         */
+        void GetVideoListL( TInt aIndex );
+                
+        /**
+         * Translates array index to MPX item id by reading the value from array.
+         *
+         * @param aArrayIndex Index in array.
+         * @param aArray Array of MPX Media objects.
+         * @return MPX item id
+         */
+        TMPXItemId ArrayIndexToMpxItemIdL( TInt aArrayIndex, CMPXMediaArray* aArray );
+ 
+        /**
+         * Deletes an array of videos.
+         * 
+         * @param aMediasToDelete Array of MPX Media objects to delete.
+         */
+        void DeleteVideosL( CMPXMediaArray* aMediasToDelete );
+
+        /**
+         * Cancels ongoing deletion of videos. See DeleteVideosL().
+         */
+        void CancelDeleteVideosL();
+
+        /**
+         * Moves or copies array of videos.
+         * 
+         * @param mediasToMoveOrCopy Array of MPX Media objects to move/copy.
+         * @param aTargetDrive Target drive.
+         * @param aCopy ETrue of copy operation, EFalse if move.
+         */
+        void MoveOrCopyVideosL( CMPXMediaArray* mediasToMoveOrCopy,
+                                TInt aTargetDrive,
+                                TBool aCopy );
+        
+        /**
+         * Cancels ongoing move/copy operation of videos. See MoveOrCopyVideosL().
+         */
+        void CancelMoveOrCopyVideosL();
+
+        /**
+         * Play a video with given MPX item id.
+         *
+         * @param aMpxItemId MPX item id
+         */
+        void PlayVideoL( TMPXItemId aMpxItemId );
+
+        /**
+         * Sets attribute value to MPX Collection.
+         * 
+         * @param aMedia MPX Media object to change.
+         * @param aAttribute MPX attribute to change.
+         * @param aValue New value for attribute.
+         */
+        void SetAttributeL( const CMPXMedia& aMedia,
+                            const TMPXAttribute& aAttribute,
+                            const TUint32 aValue );
+        
+        void SetAttributeL( const CMPXMedia& aMedia,
+                            const TMPXAttribute& aAttribute,
+                            const TReal32 aValue );        
+
+        /**
+         * Returns MPX Media object most recently requested with method call
+         * FetchMpxMediaByMpxIdL().
+         * 
+         * @return Latest MPX Media object or NULL.
+         */
+        CMPXMedia* GetLatestFetchedMpxMediaL();
+        
+        /**
+         * Fetches MPX Media object based on MPX ID. Fetched MPX Media object
+         * is returned through callback interface MVcxHgMyVideosVideoModelObserver.
+         * 
+         * @param aMpxId MPX ID.
+         */
+        void FetchMpxMediaByMpxIdL( TMPXItemId& aMpxId );
+        
+        /**
+         * Gets all details for the selected MPX Media object.
+		 * Result will be returned in HandleCommandComplete().
+         * 
+         * @param aMpxId MPX ID.
+         */
+        void GetVideoDetailsL( TMPXItemId& aMpxId );
+
+    public: // From MMPXCollectionObserver
+
+        /**
+         * From MMPXCollectionObserver->MMPXCollectionMediaObserver
+         * Handle extended media properties
+         *
+         * @param aMedia media 
+         * @param aError error code    
+         */
+        void HandleCollectionMediaL( const CMPXMedia& aMedia, TInt aError );
+
+        /** 
+         * From MMPXCollectionUtilityObserver.
+         * Handle collection message
+         * NOTE: only one of HandleCollectionMessage callback can be implemented
+         * 
+         * @param aMessage collection message, ownership not transferred. 
+         *        Please check aMsg is not NULL before using it. If aErr is not 
+         *        KErrNone, plugin might still call back with more info in the aMsg.
+         * @param aErr system error code.
+         */
+        void HandleCollectionMessage( CMPXMessage* aMsg, TInt aErr ); 
+
+        /**
+         * From MMPXCollectionUtilityObserver.
+         * Handles the collection entries being opened. Typically called
+         * when client has Open()'d a folder
+         *
+         * @param aEntries collection entries opened
+         * @param aIndex focused entry
+         * @param aComplete ETrue no more entries. EFalse more entries
+         *                  expected
+         * @param aError error code   
+         */
+        void HandleOpenL( const CMPXMedia& aEntries,
+                          TInt aIndex,
+                          TBool aComplete,
+                          TInt aError );
+    
+        /**
+         * From MMPXCollectionUtilityObserver.
+         * Handles the item being opened. Typically called
+         * when client has Open()'d an item. Client typically responds by
+         * 'playing' the item via the playlist
+         *
+         * @param aPlaylist collection playlist
+         * @param aError error code   
+         */                         
+        void HandleOpenL( const CMPXCollectionPlaylist& aPlaylist, TInt aError );
+
+        /**
+         * From MMPXCollectionUtilityObserver.
+         * Handle completion of a asynchronous command
+         *
+         * @param aCommandResult result of the command, NULL if error
+         * @param aError error code    
+         */
+        void HandleCommandComplete( CMPXCommand* aCommandResult, TInt aError );
+
+    protected: // Constructors
+
+        /**
+         * Default C++ constructor. 
+         */
+        CVcxHgMyVideosCollectionClient();
+
+        /**
+         * Symbian 2nd phase constructor.
+         */
+        void ConstructL();
+
+        /** 
+         * Called by HandleCollectionMessage(). Handles collection messages.
+         * 
+         * @param aMessage collection message.
+         * @param aError system error code.
+         */
+        void HandleCollectionMessageL( CMPXMessage* aMessage, TInt aError );
+
+        /** 
+         * Called by HandleCollectionMessageL(). Handles single collection message.
+         * 
+         * @param aMessage collection message.
+         * @param aError system error code.
+         */
+        void HandleSingleCollectionMessageL( CMPXMessage* aMessage, TInt aError );
+        
+        /**
+         * Returns the current level of collection.
+         */
+        TInt CollectionLevelL();
+        
+        /**
+         * Handles item addition message, called by HandleSingleCollectionMessageL().
+         * 
+         * @param aMessage collection message.
+         * @param aError system error code. 
+         */
+        void HandleMyVideosItemsAppendedL( CMPXMessage* aMessage, TInt aError );        
+        
+        /**
+         * Handles item changed message, called by HandleSingleCollectionMessageL().
+         * 
+         * @param aMessage collection message.
+         * @param aError system error code. 
+         */
+        void HandleMyVideosItemsChangedL( CMPXMessage* aMessage, TInt aError );        
+        
+        /**
+         * Handles delete related messages, called by HandleSingleCollectionMessageL().
+         * 
+         * @param aMessage collection message.
+         * @param aError system error code. 
+         */
+        void HandleMyVideosDeleteMessageL( CMPXMessage* aMessage, TInt aError );        
+
+        /**
+         * Handles move or copy related messages, called by HandleSingleCollectionMessageL().
+         * 
+         * @param aMessage collection message.
+         * @param aError system error code. 
+         */
+        void HandleMyVideosMoveOrCopyMessageL( CMPXMessage* aMessage, TInt aError );        
+
+        /**
+         * Handles response message when MPX Media object requested.
+         *
+         * @param aMessage collection message.
+         * @param aError system error code.
+         */
+        void HandleGetMediasByMpxIdRespL( CMPXMessage* aMessage, TInt aError );
+        
+        /**
+         * Handles response message when video details requested.
+         * 
+         * @param aMessage collection message.
+         * @param aError system error code.
+         */
+        void HandleGetVideoDetailsRespL( CMPXMessage* aMessage, TInt aError );
+
+    protected:
+        
+        enum TVcxHgCollectionOpenStatus
+            {
+            EVcxHgCollectionNotOpen = 0,
+            EVcxHgCollectionOpening,
+            EVcxHgCollectionOpened            
+            };
+        
+    protected:
+
+        /**
+         * Pointer to MPX Collection utility.
+         * Own.
+         */
+        MMPXCollectionUtility* iCollectionUtility;
+        
+        /**
+         * Pointer to Download client.
+         * Own.
+         */
+        CVcxHgMyVideosDownloadClient* iDownloadClient;
+                
+        /**
+         * Pointer to observer of category model.
+         * Not own.
+         */
+        MVcxHgMyVideosCategoryModelObserver* iCategoryModelObserver;
+        
+        /**
+         * Pointer to observer of video model.
+         * Not own.
+         */
+        MVcxHgMyVideosVideoModelObserver* iVideoModelObserver;
+        
+        /**
+         * Variable for storing My Videos collection opening status.
+         */
+        TVcxHgCollectionOpenStatus iCollectionOpenStatus;
+        
+        /**
+         * Variable for storing pending collection command.
+         */
+        TVcxHgMyVideosCollectionCommand iPendingCommand;
+        
+        /**
+         * Variable for storing latest MPX Media object fetched separately.
+         * Own.
+         */
+        CMPXMedia* iLatestMpxMedia;
+        
+#if defined(_DEBUG) && IPTV_LOGGING_METHOD != 0
+    private:
+        /**
+         * Debug only: Prints list of videos to debug output.
+         */
+        void DebugPrintVideoListL( CMPXMediaArray* aVideoArray );
+#endif // _DEBUG && IPTV_LOGGING_METHOD        
+        
+        /**
+         * Variable for storing current MPX collection level.
+         */
+        TInt iCollectionLevel;
+    };
+
+#endif // VCXHGMYVIDEOSCOLLECTIONCLIENT_H