diff -r 000000000000 -r 7f85d04be362 upnpmpxplugins/upnpplaybackplugins/inc/upnpmusicdownloadproxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpmpxplugins/upnpplaybackplugins/inc/upnpmusicdownloadproxy.h Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,243 @@ +/* +* 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 "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: Proxy for downloading upnp files and playing locally +* +*/ + + + + + + +#ifndef __CUPNPMUSICDOWNLOADPROXY_H__ +#define __CUPNPMUSICDOWNLOADPROXY_H__ + +// INCLUDES +#include +#include +#include +#include "upnptrackobserver.h" + +// FORWARD DECLARATIONS +class CUPnPSingleton; +class CUPnPTrack; +class MDesCArray; // for MPX compatibility - actually this is NOT a class + + +/** + * UPnP Proxy class for Local Player. + * + * Provides additional UPnP download functionality: first + * downloads the file and then uses the underlying plugin to + * execute commands (play,stop,pause) on the local copy of the + * song + * + * @lib upnpmusicplugins.lib + * @since S60 v3.1 + */ +class CUPnPMusicDownloadProxy : public CMPXPlaybackPlugin, + public MMPXPlaybackPluginObserver, + public MUPnPTrackObserver + { + +private: + + /** + * Defines internal player state + * + * EStateUninitialised - Initial and terminal state + * EStatePreparing - Preparatory phases before download + * EStateDownloading - Downloading the temporary file + * EStateInitialisingLocally - Download is complete, starting to + * initialize proxied local plugin + * EStateActive - Init complete, now acting as a proxy for + * the local plugin to play the temp file + * @since Series 60 3.1 + */ + enum TProxyState + { + EStateUninitialised = 0, // initial state + EStatePreparing, // preparatory phases + EStateDownloading, // download phase + EStateInitialisingLocally, // local init + EStateActive, // normal + EStateClosing // used if error during initialise + }; +public: + + /** + * Static 1st phase constructor. + * + * @since Series 60 3.1 + * @param aObs reference to call back interface + * @return A new player instance + */ + static CUPnPMusicDownloadProxy* NewL( MMPXPlaybackPluginObserver& aObs ); + + /** + * Destructor + * + * @since Series 60 3.1 + */ + ~CUPnPMusicDownloadProxy(); + + +private: + + /** + * Private default constructor + * + * @since Series 60 3.1 + * @param aObs reference to call back interface + */ + CUPnPMusicDownloadProxy( MMPXPlaybackPluginObserver& aObs ); + + /** + * 2nd phase constructor + * + * @since Series 60 3.1 + */ + void ConstructL(); + +public: // From CMPXPlaybackPlugin + + /** + * See CMPXPlaybackPlugin + */ + void InitialiseL( const TDesC& aSong ); + + /** + * See CMPXPlaybackPlugin + */ + void InitialiseL( RFile& aSong ); + + /** + * See CMPXPlaybackPlugin + */ + void CommandL( TMPXPlaybackCommand aCmd, TInt aData ); + + /** + * See CMPXPlaybackPlugin + */ + void SetL( TMPXPlaybackProperty aProperty, TInt aValue ); + + /** + * See CMPXPlaybackPlugin + */ + void ValueL( TMPXPlaybackProperty aProperty ) const; + + /** + * See CMPXPlaybackPlugin + */ + void SubPlayerNamesL(); + + /** + * See CMPXPlaybackPlugin + */ + void SelectSubPlayerL(TInt aIndex); + + /** + * See CMPXPlaybackPlugin + */ + const TDesC& SubPlayerName(); + + /** + * See CMPXPlaybackPlugin + */ + TInt SubPlayerIndex() const; + + /** + * See CMPXPlaybackPlugin + */ + void MediaL( const TArray& aAttrs ); + + /** + * See CMPXPlaybackPlugin + */ + void CancelRequest(); + + /** + * See CMPXPlaybackPlugin + */ + void SetObserver(MMPXPlaybackPluginObserver& aObs); + +protected: // From MMPXPlaybackPluginObserver + + /** + * See MMPXPlaybackPluginObserver + */ + void HandlePluginEvent( TEvent aEvent, TInt aData, TInt aError ); + + /** + * see MMPXPlaybackPluginObserver's base class MMPXPlaybackCallback + */ + void HandleProperty( TMPXPlaybackProperty aProperty, TInt aValue, + TInt aError ); + + /** + * see MMPXPlaybackPluginObserver's base class MMPXPlaybackCallback + */ + void HandleSubPlayerNames( TUid aPlayer, const MDesCArray* aSubPlayers, + TBool aComplete, TInt aError ); + + /** + * see MMPXPlaybackPluginObserver's base class MMPXPlaybackCallback + */ + void HandleMedia( const CMPXMedia& aProperties, TInt aError ); + +protected: // From MUPnPTrackObserver + + /** + * See MUPnPTrackObserver + */ + void ResolveURIComplete( TInt aError ); + +private: + + /** + * cleanup when going in uninitialised state + */ + void Cleanup(); + +private: // Data + + /** + * Local plugin instance + * Own. + */ + CMPXPlaybackPlugin* iLocalPlayer; + + /** + * The UPnP services singleton + * Own. + */ + CUPnPSingleton* iSingleton; + + /** + * Player state + */ + mutable TProxyState iProxyState; + + /** + * UPnP track + * Own. + */ + CUPnPTrack* iTrack; + }; + +#endif // __CUPNPMUSICDOWNLOADPROXY_H__ + + + +