diff -r 000000000000 -r 96612d01cf9f videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionplugin.h Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,485 @@ +/* +* 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: Implementation of My Videos MPX Collection Plugin interface* +*/ + + + + +#ifndef VCXMYVIDEOSCOLLECTIONPLUGIN_H +#define VCXMYVIDEOSCOLLECTIONPLUGIN_H + +// INCLUDES + +#include +#include +#include +#include + +#include "vcxmyvideosactivetask.h" + +#include "vcxmyvideosmdsdb.h" +#include "vcxmyvideosdownloadutil.h" + +// FORWARD DECLARATIONS +class CVcxMyVideosMdsDb; +class CMPXResource; +class CMPXMediaArray; +class CVcxMyVideosDownloadUtil; +class CVcxMyVideosVideoCache; +class CVcxMyVideosCategories; +class CVcxMyVideosMessageList; +class CVcxMyVideosAsyncFileOperations; +class CVcxMyVideosOpenHandler; + +// CONSTANTS + +// CLASS DECLARATION + +/** +* Plug-in, provides access to My Videos collection. +* +* @lib mpxmyvideoscollectionplugin.lib +*/ +NONSHARABLE_CLASS(CVcxMyVideosCollectionPlugin) : + public CMPXCollectionPlugin, + public MVcxMyVideosMdsDbObserver, + public MVcxMyVideosActiveTaskObserver, + public MVcxMyVideosDownloadUtilObserver + { + public: // Constructors and destructor + + friend class CVcxMyVideosOpenHandler; + friend class CVcxMyVideosVideoCache; + + /** + * Two-phased constructor + * @param aInitParams: initialization parameters + * @return object constructed + */ + static CVcxMyVideosCollectionPlugin* NewL (TAny* aInitParams); + + /** + * Destructor + */ + virtual ~CVcxMyVideosCollectionPlugin(); + + public: // from base classes + /** + * From CMPXCollectionPlugin + * Navigates to the given path. This method is serviced + * asynchronously and HandleOpenL is called upon completion + * @param aPath a path + * @param aAttrs attributes requested + * @param aFilter filter to apply or NULL if none + */ + void OpenL(const CMPXCollectionPath& aPath, + const TArray& aAttrs, + CMPXFilter* aFilter); + + /** + * From CMPXCollectionPlugin + * Get the extended properties of the item referred to by the + * specified collection path. This method is serviced asynchronously and + * HandleMediaL is called upon completion + * @param aPath a collection path referring to the item to retrieve the + * extended properties for + * @param aAttr: array of attributes requested + * @param aCaps platsec capabilities of client requesting media; plug-in + * should also verify its process capabilities (not yet supported) + * @aParam aSpecs specifications for attributes (not yet supported) + */ + void MediaL(const CMPXCollectionPath& aPath, + const TArray& aAttrs, + const TArray& aCaps, + CMPXAttributeSpecs* aSpecs); + + /** + * From CMPXCollectionPlugin + * Cancel outstanding request. + */ + void CancelRequest(); + + /** + * From CMPXCollectionPlugin + * Executes the given CMPXCommand command on the collection + * @param aCmd a command + */ + void CommandL(CMPXCommand& aCmd); + + /** + * From CMPXCollectionPlugin + * Find the items matching the media specifications. This method is serviced + * asynchronously and HandleFindAllL is called upon completion + * @param aCriteria Properties of the item that is to be found + * @param aAttrs Requested attributes to return + */ + void FindAllL(const CMPXMedia& aCriteria, const TArray& aAttrs); + + /** + * From CMPXCollectionPlugin + * Find the items matching the media specifications + * @param aCriteria Properties of the item that is to be found + * @param aAttrs Requested attributes to return + * @return results of the search. Method abandons ownership of results. + */ + CMPXMedia* FindAllSyncL(const CMPXMedia& aCriteria, + const TArray& aAttrs); + + /** + * Get the list of supported capabilities + * @return TCollectionCapability, bitmask of supported capabilities + */ + TCollectionCapability GetCapabilities(); + + /** + * DEPRECATED + * From CMPXCollectionPlugin + * Executes the given TMPXCollectionCommand command on the collection + * @param aCmd a command + * @param aArg an argument + */ + void CommandL(TMPXCollectionCommand /*aCmd*/, TInt /*aArg = 0*/) {} + + /** + * DEPRECATED + * From CMPXCollectionPlugin + * Adds an episode to the collection + * @param aMedia Properties of the item + */ + void AddL(const CMPXMedia& /*aMedia*/) {} + + /** + * DEPRECATED + * From CMPXCollectionPlugin + * Remove an item(s) from the collection database using the given path + * Note that the selection indices are hidden within the path + * @param aPath: path to the item to be removed + * + */ + void RemoveL(const CMPXCollectionPath& /*aPath*/) {} + + /** + * DEPRECATED + * Remove item(s) from the collection database using the given media properties + * @param aMedia Properties of the item(s) to be removed. May cantain a URI + * or metadata. All item(s) matching the specified properties + * will be removed. + */ + void RemoveL(const CMPXMedia& /*aMedia*/) {} + + /** + * DEPRECATED + * Sets/updates the specified media for an item in the collection. Media + * is identified by specifying an ID or URI. + * @param aMedia: new property values for the item + */ + void SetL(const CMPXMedia& /*aMedia*/) {} + + /** + * From MMPXDbActiveTaskObserver + */ + TBool HandleStepL(); + + /** + * From MMPXDbActiveTaskObserver + */ + void HandleOperationCompleted( TInt aErr ); + + /** + * From MVcxMyVideosMdsDbObserver. + */ + void HandleMyVideosDbEvent( TMPXChangeEventType aEvent, + RArray& aId ); + + /** + * Leaving version of HandleMyVideosDbEvent. + */ + void DoHandleMyVideosDbEventL( TMPXChangeEventType aEvent, + RArray& aId ); + + /** + * From MVcxMyVideosMdsDbObserver. + * Handler function for list fetching events. This callback is called as a response + * to CreateVideoList( aSync = EFalse ). + * + * @param aVideoList List of videos fetched from MDS. + * @param aNewItemsStartIndex Start position for the new items added. + * @param aComplete ETrue if list is complete and no more items are expected, + * EFalse if there are more to come. + */ + void HandleCreateVideoListResp( CMPXMedia* aVideoList, TInt aNewItemsStartIndex, + TBool aComplete ); + + /** + * From MVcxMyVideosMdsDbObserver. Called when media is removed or inserted. + */ + void HandleObjectPresentNotification(); + + /** + * Leaving version of HandleObjectPresentNotification. + */ + void DoHandleObjectPresentNotificationL(); + + /** + * From CVcxMyVideosDownloadUtilObserver. + */ + void HandleDlEvent( TVcxMyVideosDownloadState aState, + TUint32 aDownloadId, TInt aProgress, TInt64 aDownloaded, + TInt32 aError, TInt32 aGlobalError ); + + /** + * Leaving version of HandleDlEvent. + */ + void DoHandleDlEventL( TVcxMyVideosDownloadState aState, + TUint32 aDownloadId, TInt aProgress, TInt64 aDownloaded, + TInt32 aError, TInt32 aGlobalError ); + + private: + /** + * Constructor + */ + CVcxMyVideosCollectionPlugin(); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL (); + + /** + * Synchronizes set of videos in cache with Download Manager. + * Download related attributes are set in cache if corresponding + * download is found. + * + * @param aItemsInCache Array of MDS IDs. + */ + void SyncWithDownloadsL( RArray& aItemsInCache ); + + /** + * Synchronizes video with Download Manager. + * + * @aVideo Video to synchronize. + * @aEventAdded Set to ETrue if event was added to iMessageList, does not change the + * value otherwise. + */ + void SyncVideoWithDownloadsL( CMPXMedia& aVideo, TBool& aEventAdded, + TBool aAddEvent = ETrue ); + + /** + * Copies download attributes from aDownload to aVideo. + * + * @param aVideo Video in cache. + * @param aDownload Corresponding download in Download Manager. + * @param aSendMpxEvent ETrue if MPX item has been modified and caller should + * send the modification event. + */ + void SyncVideoAndDownloadL( + CMPXMedia& aVideo, + RHttpDownload& aDownload, + TBool& aSendMpxEvent ); + + /** + * Copies KVcxMediaMyVideosTransactionId field from aRequest to aResp. + */ + void SetTransactionIdL( CMPXMedia& aRequest, CMPXMedia& aResp ); + + /** + * Generates and sends resp message for Move,Copy and Delete operations. + * Does nothing if there is some other operation going on. + * This function is called when operation is interrupted from a leave or + * cancel request. + * Leaves with KErrNotFound if no operation was in progress. + * + * @param aErr Error code which is set for non handled items in the resp array. + */ + void CancelOperationL( TInt aErr ); + + /** + * Returns reference to iAsyncFileOperations member. + * + * @return reference to iAsyncFileOperations. + */ + CVcxMyVideosAsyncFileOperations& AsyncFileOperationsL(); + + /** + * Called by iCache when it notices that current video list fetching has to + * be done again from the scratch. This is called only when there is video list + * fetching ongoing. + */ + void RestartVideoListFetchingL(); + + + /** + * Sets download ID to 0 and download state to none. Updates MDS and sends + * modified event. + * + * @param aDownloadId Download ID of the MPX item. + */ + void SetDownloadIdToZeroL( TUint aDownloadId ); + + +#ifdef _DEBUG + /** + * Returns download state as a descriptor. + */ + const TDesC& DownloadState( TUint8 aDlState ); +#endif + + public: + + /** + * Adds video to MDS and cache. + * + * @param aVideo video to add, KMPXMediaGeneralId will be set to new value. + */ + void AddVideoToMdsAndCacheL( CMPXMedia& aVideo ); + + /** + * Sets video parameters in iCache and MDS from aVideo. + * + * @param aVideo Media used to copy parameters from. + */ + void SetVideoL( CMPXMedia& aVideo ); + + /** + * Sends My Videos message to clients. Transaction ID is copied from + * aCommand if it is available. + * + * @param aMessageId Message id. + * @param aCommand Command which has caused the message, optional. + * Ownership does not move. + */ + void SendMyVideosMessageL( TUint32 aMessageId, CMPXCommand* aCommand = NULL ); + + /** + * Synchronizes video list with Download Manager. + * + * @param aVideoList Video list to synchronize. + * @param aStartPos Items before aStartPos index are left out from synchronizing. + * @param aSendEvents If ETrue and modifications are done to the list, then + * MPX events are sent. + */ + void SyncVideoListWithDownloadsL( CMPXMedia& aVideoList, + TBool aSendEvents, TInt aStartPos = 0 ); + + /** + * Returns reference to iDownloadUtil. If iDownloadUtil is NULL then + * it is created. + */ + CVcxMyVideosDownloadUtil& DownloadUtilL(); + + /** + * Sends messages to clients. If udeb version, adds messageid + * parameter to the message for debugging purposes. May or may not + * contain media list as parameter. + * + * @param aMessages Messages to send. + */ + void SendMessages( CMPXMessage& aMessages ); + + /** + * Creates iCategories if its not created yet and returns reference to it. + * + * @return Reference to iCategories member. + */ + CVcxMyVideosCategories& CategoriesL(); + + /** + * Notifies to mediator listeners that a download has completed. + * + * @param aVideo Downloaded video. + */ + void NotifyDownloadCompletedL( CMPXMedia& aVideo ); + + /** + * Notifies to mediator listeners that count of new videos has decreased. + * + * @param aVideo Removed or watched video. + */ + void NotifyNewVideosCountDecreasedL( CMPXMedia& aVideo ); + + public: + /** + * MDS database handler, own. + */ + CVcxMyVideosMdsDb* iMyVideosMdsDb; + + /** + * MDS items are cached here for fast access. + * Own. + */ + CVcxMyVideosVideoCache* iCache; + + /** + * Messages are grouped here for sending. + */ + CVcxMyVideosMessageList* iMessageList; + + /** + * File server session. + */ + RFs iFs; + + /** + * Executes command in several small steps. + */ + CVcxMyVideosActiveTask* iActiveTask; + + private: + + /** + * Contains category list, accessed through CategoriesL() function. + * Own. + */ + CVcxMyVideosCategories* iCategories; + + /** + * Download util, own. + */ + CVcxMyVideosDownloadUtil* iDownloadUtil; + + /** + * Target drive for Move operation. + */ + TInt iTargetDrive; + + /** + * Performs multiple Move,Copy and Delete operations step by step. Own. + */ + CVcxMyVideosAsyncFileOperations* iAsyncFileOperations; + + /** + * Contains collection Open operation related functionality. + */ + CVcxMyVideosOpenHandler* iOpenHandler; + + /** + * Used for clearing orphan downloads only once. + */ + TBool iOrphanDownloadsCleared; + + +#ifdef _DEBUG + /** + * Used for debugging that client receives all events. + */ + TInt iTotalMessagesSent; + TInt iMessagesInArraySent; +#endif + + }; + +#endif // VCXMYVIDEOSCOLLECTIONPLUGIN_H + +