upnpmpxplugins/upnpplaybackplugins/inc/upnpmusicdownloadproxy.h
author hgs
Fri, 30 Apr 2010 17:07:47 +0300
changeset 21 b39000d0fc2e
parent 0 7f85d04be362
permissions -rw-r--r--
201017

/*
* 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 <badesca.h>
#include <mpxplaybackplugin.h>
#include <mpxplaybackpluginobserver.h>
#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<TMPXAttribute>& 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__