videofeeds/scheduleddlplugin/inc/vcnsscheduleddownloadmpxclient.h
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/scheduleddlplugin/inc/vcnsscheduleddownloadmpxclient.h	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,364 @@
+/*
+* 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:    Class for handling mpx collection interactions*
+*/
+
+
+
+
+#ifndef VCXNSDOWNLOADCLIENTHANDLER_H_
+#define VCXNSDOWNLOADCLIENTHANDLER_H_
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <mpxcollectionobserver.h>
+
+#include "CIptvUtil.h"
+
+// FORWARD DECLARATIONS
+class CIptvService;
+class CIptvMediaContent;
+class MMPXCollectionUtility;
+class CIptvVodContentClient;
+class CIptvVodDlDownloadEvent;
+
+/**
+* MVcxNsMpxClientObserver
+* 
+* class specifies the interface for CVcxNsScheduledDownloadMpxClient callback function.
+* Client must inherit this and implement the virtual functions.
+*/
+class MVcxNsMpxClientObserver
+    {
+        
+public: // New functions
+
+    /**
+    * This emulates old fashion dl client events
+    */
+    virtual void HandleVodDlDownloadEvent( CIptvVodDlDownloadEvent& aEvent ) = 0;
+    
+    };
+
+/**
+* Class CVcxNsScheduledDownloadMpxClient handles mpx collection client interactions.
+*
+* @lib iptvscheduleddownloadplugin.lib
+*/
+class CVcxNsScheduledDownloadMpxClient : public CBase,
+                                         public MMPXCollectionObserver
+    {
+
+public:
+
+    /**
+     * Two-phased constructor. 
+     */
+    static CVcxNsScheduledDownloadMpxClient* NewL( MVcxNsMpxClientObserver& aObserver,
+                                                   CIptvVodContentClient& aContentClient,
+                                                   TUint32 aServiceId );
+
+    /**
+     * Destructor.
+     */    
+    virtual ~CVcxNsScheduledDownloadMpxClient();
+    
+    /**
+     * Download content from service.
+     * @param aIapId
+     * @param aService   Service.
+     * @param aContentId Content ID identifier.
+     * @param aName      Content name.
+     * @param aIndex     Content access index.
+     * @param aDltype    Type of the requested download, currently only EIptvDownloadTypeImmediate
+     *                   supported.
+     * @return           Error code, indicates if download is started successfully. If return code is
+     *                   EIptvDlNoError, then further download status is reported via events, on error
+     *                   no further events will arrive.
+     */
+    TIptvDlError DownloadL(
+        TUint32 aIapId,
+        CIptvService* aService,
+        TIptvContentId aContentId,
+        const TDesC& aName );
+    
+    /**
+     * Cancels download.
+     * Operation includes clean up that removes files from file system,
+     * deletes data related to FileId and releases FileId identifier.
+     * @param aServiceId
+     * @param aContentId
+     * @return Error code, KErrNone if no errors, otherwise one of the system wide error codes.
+     *         KErrNotFound if download was not found from VOD DL Manager, file might still be in
+     *         My Videos.
+     */
+    TInt CancelDownloadL(
+        TUint32 aServiceId,
+        TUint32 aContentId );    
+
+    /**
+     * Get the mpx media object by id.
+     * @param aMpxIds
+     */
+    void GetMediaByMpxIdReqL(  RArray<TUint32>& aMpxIds  );
+    
+    /**
+     *  Check media's download state and do routines if necessary.
+     * 
+     *  @param aMediaId media object id which to check.
+     */
+    void CheckMediaStateL( TUint32 aMediaId );
+
+    /**
+     * Append the given content to download list.
+     * 
+     * List takes ownership of given object.
+     * 
+     * @param aContent Content
+     */
+    void AppendToDownloadList( CIptvMediaContent* aContent );
+
+    /**
+     * Remove the given content from download list.
+     * 
+     * Pointed object is deleted.
+     * 
+     * @param aContent Content
+     */
+    void RemoveFromDownloadList( CIptvMediaContent* aContent );
+
+    /**
+     * Find a content by url from download list.
+     */
+    CIptvMediaContent* SearchFromDownloadList( const TDesC& aUri );
+
+    /**
+     * Find a content by mpx id from download list.
+     */
+    CIptvMediaContent* SearchFromDownloadList( const TUint32 aMpxId );
+    
+    /**
+     * Find a content by service and content id from download list.
+     */
+    CIptvMediaContent* SearchFromDownloadList( const TUint32 aServiceId, 
+                                               const TUint32 aContentId );
+
+// From Base classes
+
+    /**
+    *  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
+    *  All clients should implement this callback
+    *  @param aCommandResult result of the command, NULL if error
+    *  @param aError error code    
+    */
+    void HandleCommandComplete( CMPXCommand* /*aCommandResult*/, TInt /*aError*/ );
+    
+    /**
+     *  Marks given items as watched to MPX col.
+     * 
+     *  @param aArray media object array to be processed.
+     */
+    void MarkItemsAsWatchedL( CMPXMediaArray* aArray );
+    
+    /**
+     *  Sets given items last play pos to MPX col.
+     * 
+     *  @param aArray media object array to be processed.
+     */
+    void WriteLastPlayPosL( CMPXMediaArray* aArray );
+
+private:
+
+    /**
+     * Starts download of given item.
+     * 
+     * @param aAddress          Address of the downloaded content
+     * @param aName             Name of the downloaded content
+     * @param aIapId            Iap id for the download
+     * @param aIsReadOnlyIap    Is the give iap read-only
+     * @param aUserName         UserName of the downloaded content
+     * @param aPassword         Password of the downloaded content
+     * @return                  System-wide error code
+     */
+    TInt DoDownloadL( const TDesC& aAddress,
+                      const TDesC& aName,
+                      TUint32 aIapId,
+                      TBool aIsReadOnlyIap,
+                      const TDesC& aUserName,
+                      const TDesC& aPassword );
+    
+    /**
+     * Links the mpx media objects to contents.
+     * 
+     * @param aArray Mpx media array containing the data.
+     */
+    void LinkMediaObjectsL( CMPXMediaArray* aArray  );
+
+    /**
+     * Sets the mpx media object to downloaded content
+     * item and refreshes the content view, if visible.
+     * 
+     * @param aMedia Mpx media containing the data.
+     */
+    void SearchAndAddMpxMediaL( CMPXMedia* aMedia );
+    
+    /** 
+     * Calls HandleSingleCollectionMessageL() for every message.
+     * 
+     *  @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 ExplodeCollectionMessagesL( CMPXMessage* aMsg, TInt aErr ); 
+
+    /**
+     * Handles one sinlgle message
+     * 
+     *  @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 HandleSingleCollectionMessageL( CMPXMessage* aMsg, TInt aErr  );
+    
+    /**
+     * HandleSingleCollectionMessage's implementation.
+     * 
+     *  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 DoHandleSingleCollectionMessageL( CMPXMessage* aMsg, TInt aErr );
+    
+    /**
+     *  Handle mpx item changed -collection message
+     * 
+     *  @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 HandleMpxItemChangedL( CMPXMessage* aMsg, TInt aErr );
+
+    /**
+     *  Copy ecg data to mpx database
+     * 
+     *  @param aContent Source content, where copy values from.
+     *  @param aMedia   Target media object, where to copy the values.
+     */
+    void CopyEcgDataToMpxColL( CIptvMediaContent *aContent, CMPXMedia *aMedia );
+    
+    /**
+     *  Get CMPXMedia.
+     * 
+     *  @param aMediaId media object id, which to get.
+     *  @return CMPXMedia object. Ownership not transferred.
+     */
+    CMPXMedia* GetMpxMediaFromList( TUint32 aMediaId );
+
+    CVcxNsScheduledDownloadMpxClient(  MVcxNsMpxClientObserver& aObserver,
+                                       CIptvVodContentClient& aContentClient,
+                                       TUint32 aServiceId );
+
+    void ConstructL();
+
+private:
+    
+    /**
+    * MMPXCollectionUtility* 
+    */
+    MMPXCollectionUtility* iCollectionUtility;
+    
+    /**
+    * The currently / previously downloaded contents.
+    */  
+    RPointerArray<CIptvMediaContent> iDownloadedContents;
+
+    /**
+    * The downloaded content's mpx items.
+    */  
+    RPointerArray<CMPXMedia> iDownloadedMedias;
+    
+    /**
+    * MVcxNsMpxClientObserver
+    */
+    MVcxNsMpxClientObserver& iObserver; 
+    
+    /**
+    * CIptvVodContentClient
+    */
+    CIptvVodContentClient& iContentClient;
+    
+    /**
+    * Current service id
+    */
+    TUint32 iServiceId;
+
+    };
+
+#endif // VCXNSDOWNLOADCLIENTHANDLER_H_