--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/vcnsuiengine/inc/vcxnsmpxcollectionclienthandler.h Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,488 @@
+/*
+* 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 "CIptvUtil.h"
+#include <mpxcollectionobserver.h>
+
+#include "vcxnsdownloadupdater.h"
+
+// FORWARD DECLARATIONS
+class CVcxNsUiEngine;
+class CVcxNsService;
+class CVcxNsContent;
+class MMPXCollectionUtility;
+class CMPXMedia;
+
+/**
+* Class CVcxNsMpxCollectionClientHandler handles mpx collection client interactions.
+*
+* @lib vcxnsuiengine.lib
+*/
+class CVcxNsMpxCollectionClientHandler : public CBase,
+ public MMPXCollectionObserver,
+ public MVcxNsDownloadUpdaterObserver
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aUiEngine Reference to CVcxNsUiEngine.
+ */
+ static CVcxNsMpxCollectionClientHandler* NewL( CVcxNsUiEngine& aUiEngine );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CVcxNsMpxCollectionClientHandler();
+
+ /**
+ * Starts download of given item.
+ *
+ * @param aService Service data for downloaded iten
+ * @param aContent Content data for downloaded item
+ * @return System-wide error code
+ */
+ TInt DownloadL( CVcxNsService& aService, CVcxNsContent& aContent );
+
+ /**
+ * Pauses download of given item.
+ *
+ * @param aContent Content data for downloaded item
+ * @return System-wide error code
+ */
+ TInt PauseDownloadL( CVcxNsContent& aContent );
+
+ /**
+ * Resume download of given item.
+ *
+ * @param aContent Content data for downloaded item
+ * @return System-wide error code
+ */
+ TInt ResumeDownloadL( CVcxNsContent& aContent );
+
+ /**
+ * Cancels download of given item.
+ *
+ * @param aContent Content data for downloaded item
+ * @return System-wide error code
+ */
+ TInt CancelDownloadL( CVcxNsContent& aContent );
+
+ /**
+ * Get mpx data from collection to resolve ongoing or completed downloads.
+ */
+ void LoadMpxMediaObjectsL();
+
+ /**
+ * Fetch single mpx object from collection.
+ */
+ void LoadMpxMediaObjectL( TUint32 aMpxId );
+
+ /**
+ * Store the mpx id to content database.
+ * @param aContentId Target content id
+ * @param aCaIndex Target content index
+ * @param aMpxId Mpx media id
+ */
+ void StoreMpxIdToEcgDbL( TUint32 aContentId, TUint32 aCaIndex, TUint32 aMpxId );
+
+ /**
+ * Get the mpx media object by id.
+ * @param aMpxIds
+ */
+ void GetMediaByMpxIdReqL( RArray<TUint32>& aMpxIds );
+
+ /**
+ * Append the given content to download list.
+ *
+ * @param aContent Content
+ */
+ void AppendToDownloadList( CVcxNsContent* aContent );
+
+ /**
+ * Remove the given content from download list.
+ *
+ * @param aContent Content
+ */
+ void RemoveFromDownloadList( CVcxNsContent* aContent );
+
+ /**
+ * Reset whole download list.
+ *
+ * @param aResetCmdsFromContentItems If ETrue, resets commands
+ * from content items.
+ */
+ void ResetDownloadList( TBool aResetCmdsFromContentItems );
+
+ /**
+ * Find a comntent by url from download list.
+ * @param aUri
+ * @return Found content item or NULL
+ */
+ CVcxNsContent* SearchFromDownloadList( const TDesC& aUri );
+
+ /**
+ * Find a content by mpx id from download list.
+ * @param aMpxId
+ * @return Found content item or NULL
+ */
+ CVcxNsContent* SearchFromDownloadList( const TUint32 aMpxId );
+
+ /**
+ * MarkVideoAsWatchedL
+ * @param aMpxId
+ */
+ void MarkVideoAsWatchedL( const TUint32 aMpxId );
+
+ /**
+ * SetlastPlayPosL
+ * @param aMpxId Media id
+ * @param aPos Play position
+ */
+ void SetlastPlayPosL( const TUint32 aMpxId, TInt32 aPos );
+
+ /**
+ * Gets media object details from collection SYNC
+ *
+ * @param aMpxId MPX Media ID, which to fetch.
+ */
+ void GetMediaDetailsSyncL( TUint32 aMpxId );
+
+// 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 aMsg 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 );
+
+ /**
+ * From MVcxNsDownloadUpdaterObserver
+ *
+ * Notify, that the object with given mpx id has
+ * changed, and needs to be refreshed.
+ */
+ void UpdateVideoObject( TUint32 aMpxId );
+
+ /**
+ * From MVcxNsDownloadUpdaterObserver
+ *
+ * Notifies that resume has started from beginning.
+ * @param aMpxId MPX Media Id of the video object.
+ */
+ void ResumeStartedFromBeginningL( TUint32 aMpxId );
+
+ /**
+ * Searches given array and marks the item identified by
+ * iMarkAsWatchedId as watched.
+ *
+ * @param aArray media object array to be processed.
+ */
+ void SearchAndMarkItemAsWatchedL( CMPXMediaArray* aArray );
+
+ /**
+ * Marks the given media as watched.
+ *
+ * @param aMedia media object to be marked as watched.
+ */
+ void MarkItemAsWatchedL( CMPXMedia* aMedia );
+
+ /**
+ * Starts to play the given mpx media
+ *
+ * @param aMpxId Mpx Id
+ */
+ void PlayVideoL( TUint32 aMpxId );
+
+private:
+
+ /**
+ * Starts download of given item.
+ *
+ * @param aAddress Downloaded content's address
+ * @param aName Downloaded content's name
+ * @param aIapId Download iap id
+ * @param aIsReadOnlyIap Is the given iap readonly
+ * @param aUserName Downloaded content's username
+ * @param aPassword Downloaded content's password
+ * @param aTransactionId Download request transaction id
+ * @return System-wide error code
+ */
+ TInt DownloadL( const TDesC& aAddress,
+ const TDesC& aName,
+ TUint32 aIapId,
+ TBool aIsReadOnlyIap,
+ const TDesC& aUserName,
+ const TDesC& aPassword,
+ TUint32& aTransactionId );
+
+ /**
+ * 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 aMpxId Target media object id.
+ */
+ void CopyEcgDataToMpxColL( CVcxNsContent *aContent, TUint32 aMpxId );
+
+
+ /**
+ * Notify to ui client that a download has
+ * failed and error note needs to be shown.
+ *
+ * @param aMedia media object, which download has failed.
+ * @param aContent Details of the video content which download failed.
+ */
+ void NotifyDownloadErrorL( CMPXMedia* aMedia, CVcxNsContent& aContent );
+
+ /**
+ * Get VC error code out of S60 dmgr error codes.
+ *
+ * @param aMedia media object, which error code to get.
+ * @return VideoCenter specific error code.
+ */
+ TIptvDlError GetDownloadErrorL( CMPXMedia* aMedia );
+
+ /**
+ * Writes given media attribute to mpx collection
+ *
+ * @param aAttribute Attribute
+ * @param aValue Value
+ * @param aMpxId Mpx item id to write
+ */
+ void WriteAttrToColL( TMPXAttributeData aAttribute,
+ TInt32 aValue,
+ TUint32 aMpxId );
+
+ /**
+ * Writes given media attribute to mpx collection
+ *
+ * @param aAttribute Attribute
+ * @param aValue Value
+ * @param aMpxId Mpx item id to write
+ */
+ void WriteAttrToColL( TMPXAttributeData aAttribute,
+ TReal32 aValue,
+ TUint32 aMpxId );
+
+ /**
+ * Writes changed media object attribute data to collection
+ *
+ * @param aMsg Media object containing changes, which to commit.
+ */
+ void WriteMsgToColL( CMPXMedia* aMsg );
+
+ /**
+ * Gets media object details from collection
+ *
+ * @param aMpxId MPX Media ID, which to fetch.
+ */
+ void GetMediaDetailsL( TUint32 aMpxId );
+
+ /**
+ * Constructor.
+ *
+ * @param aUiEngine Reference to CVcxNsUiEngine.
+ */
+ CVcxNsMpxCollectionClientHandler( CVcxNsUiEngine& aUiEngine );
+
+ void ConstructL();
+
+ /**
+ * Deletes download from Ui Engine. Called when item deleted event arrives from collection,
+ * or when download cancel command completes (HandleCommandComplete).
+ *
+ * @param itemId Item to delete.
+ */
+ void DeleteDownload( TMPXItemId itemId );
+
+private:
+
+ /**
+ * Reference to CVcxNsUiEngine.
+ * Not own.
+ */
+ CVcxNsUiEngine& iUiEngine;
+
+ /**
+ * MMPXCollectionUtility*
+ */
+ MMPXCollectionUtility* iCollectionUtility;
+
+ /**
+ * Id of most recent command sent to mpx collection.
+ * Incremented after each cmd to keep 'em unique.
+ */
+ TUint32 iLatestTransactionId;
+
+ /**
+ * The currently / previously downloaded contents.
+ */
+ RPointerArray<CVcxNsContent> iDownloadedContents;
+
+ /**
+ * CVcxNsDownloadUpdater.
+ * Own.
+ */
+ CVcxNsDownloadUpdater* iDownloadUpdater;
+
+ /**
+ * Write pending play pos.
+ */
+ TInt32 iWritePendingPlayPos;
+
+ /**
+ * Downloading has been resumed for these MPX IDs. Needed for showing
+ * note "Resuming download not possible, download starts from beginning".
+ */
+ RArray<TUint32> iResumeArray;
+
+ /**
+ * Last fetched mpx media objects
+ */
+ RPointerArray<CMPXMedia> iLastFetchedMedias;
+
+ /**
+ * Wait for the async media fetch
+ */
+ CActiveSchedulerWait* iGetMediaDetailWait;
+
+ /**
+ * Id for the media that needs to be marked as watched.
+ */
+ TInt64 iMarkAsWatchedId;
+
+ };
+
+#endif // VCXNSDOWNLOADCLIENTHANDLER_H_