upnpmpxplugins/upnpplaybackplugins/src/upnpmusicdownloadproxy.cpp
branchIOP_Improvements
changeset 40 08b5eae9f9ff
parent 39 6369bfd1b60d
child 41 b4d83ea1d6e2
--- a/upnpmpxplugins/upnpplaybackplugins/src/upnpmusicdownloadproxy.cpp	Mon Nov 01 13:44:24 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,535 +0,0 @@
-/*
-* 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
-*
-*/
-
-
-
-
-
-
-// INCLUDES
-#include <upnpitem.h>
-#include "upnpitemutility.h" // for ResourceFromItemL
-#include "upnpavcontroller.h"
-#include "upnpmusicdownloadproxy.h"
-#include "upnpsingleton.h"
-#include "upnptrack.h"
-
-_LIT( KComponentLogfile, "musicplugins.txt");
-#include "upnplog.h"
-
-#include "upnppluginserrortranslation.h"
-
-// CONSTANTS
-// ** a message to music player to complete an immediate exit
-const TInt KMusicPluginMessageExit = 3001;
-const TUid KLocalPlayerDefinitionUid = { 0x101FFC06 };
-
-// ======== MEMBER FUNCTIONS ========
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::NewL
-// 1st phase constructor.
-// --------------------------------------------------------------------------
-//
-CUPnPMusicDownloadProxy* CUPnPMusicDownloadProxy::NewL( 
-    MMPXPlaybackPluginObserver& aObs )
-    {
-    CUPnPMusicDownloadProxy* p = new ( ELeave )
-        CUPnPMusicDownloadProxy( aObs );
-    __LOG1( "DownloadProxy: NewL this=%d", p );
-    CleanupStack::PushL( p );
-    p->ConstructL();
-    CleanupStack::Pop();
-    return p;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::CUPnPMusicDownloadProxy
-// Default constructor.
-// --------------------------------------------------------------------------
-// 
-CUPnPMusicDownloadProxy::CUPnPMusicDownloadProxy(
-    MMPXPlaybackPluginObserver& aObs )
-    : iProxyState( EStateUninitialised )
-    {
-    iObs = &aObs;
-    iLocalPlayer = NULL;
-    iSingleton = NULL;
-    iTrack = NULL;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::ConstructL
-// 1st phase constructor.
-// --------------------------------------------------------------------------
-//  
-void CUPnPMusicDownloadProxy::ConstructL()
-    {
-    __LOG( "DownloadProxy: ConstructL" );
-
-    // Construct the underlying local plugin
-    iLocalPlayer = CMPXPlaybackPlugin::NewL(
-        KLocalPlayerDefinitionUid );
-
-    // Create handle to singleton
-    iSingleton = CUPnPSingleton::GetInstanceL();
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::~CUPnPMusicDownloadProxy
-// Destructor.
-// --------------------------------------------------------------------------
-//
-CUPnPMusicDownloadProxy::~CUPnPMusicDownloadProxy()
-    {
-    __LOG1( "DownloadProxy: destructor [%d]",
-       this );
-    Cleanup();
-
-    // Free memory of owned members
-    delete iLocalPlayer;
-    CUPnPSingleton::LoseInstance( iSingleton );
-    }
-    
-
-// --------------------------------------------------------------------------
-// Methods from CMPXPlaybackPlugin
-// --------------------------------------------------------------------------
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::InitialiseL
-// --------------------------------------------------------------------------
-//  
-void CUPnPMusicDownloadProxy::InitialiseL( const TDesC& aSong )
-    {
-    __LOG2( "DownloadProxy::InitialiseL(%S) [%d]",
-        &aSong, this );
-
-    __ASSERTD( iProxyState == EStateUninitialised,__FILE__, __LINE__ );
-
-    iProxyState = EStatePreparing;
-
-    // Create local track object to resolving URI
-    delete iTrack;
-    iTrack = 0;
-    iTrack = CUPnPTrack::NewL( iSingleton->AVC() );
-    iTrack->ResolveURIL( aSong, *this, CUPnPTrack::EDirectionLocal );
-    iProxyState = EStateDownloading;
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::InitialiseL
-// --------------------------------------------------------------------------
-//  
-void CUPnPMusicDownloadProxy::InitialiseL( RFile& /*aSong*/ )
-    {
-    // Not used. Only remote file is supported
-    __PANICD( __FILE__, __LINE__ );
-    User::Leave( KErrNotSupported );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::HandleMetaData
-// from MUPnPTrackMetaDataObserver
-// --------------------------------------------------------------------------
-// 
-void CUPnPMusicDownloadProxy::ResolveURIComplete( TInt aError )
-    {
-    __LOG1( "DownloadProxy::ResolveURIComplete [%d]", this );
-    __ASSERTD( iProxyState == EStateDownloading,__FILE__, __LINE__ );
-
-    if ( aError == KErrNone )
-        {                        
-        TRAPD( initerror, iLocalPlayer->InitialiseL( 
-            iTrack->FilePath() ) );
-
-        if ( initerror != KErrNone )
-            {
-            __LOG1( "DownloadProxy:local player init leaves: %d",
-                initerror );
-            Cleanup();
-            iProxyState = EStateUninitialised;
-            //translate error
-            initerror = TUpnpPluginsErrorTranslation::ErrorTranslate( 
-                initerror );
-            iObs->HandlePluginEvent( 
-            MMPXPlaybackPluginObserver::EPInitialised, 0, initerror );
-            }
-        else
-            {
-            iProxyState = EStateInitialisingLocally;
-            }
-        }
-    else
-        {
-        __LOG1("DownloadProxy::ResolveURIComplete: error %d",
-            aError );
-        Cleanup();
-        iProxyState = EStateUninitialised;
-        aError = TUpnpPluginsErrorTranslation::ErrorTranslate( 
-                aError );
-        iObs->HandlePluginEvent( 
-            MMPXPlaybackPluginObserver::EPInitialised,
-            0, aError );
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::CommandL
-// --------------------------------------------------------------------------
-//  
-void CUPnPMusicDownloadProxy::CommandL( TMPXPlaybackCommand aCmd, 
-    TInt aData )
-    {
-    __LOG2( "DownloadProxy::CommandL(%d) [%d]", aCmd, this );
-    
-    if( iProxyState == EStateActive )
-        {
-        // ACTIVE state: all commands are forwarded to local plugin
-        __LOG( "DownloadProxy: command in active state" );
-        iLocalPlayer->CommandL( aCmd, aData );
-        }
-    else if ( iProxyState == EStatePreparing && aCmd == EPbCmdClose )
-        {
-        __LOG( "DownloadProxy: Close during prepare" );
-        Cleanup();
-        iProxyState = EStateUninitialised;
-        iObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPClosed,
-            0, KErrNone );
-        }
-    else if( iProxyState == EStateDownloading && aCmd == EPbCmdClose )
-        {
-        __LOG( "DownloadProxy: Close during download" );
-        Cleanup(); // this will cancel ongoing copy
-        iProxyState = EStateUninitialised;
-        iObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPClosed,
-            0, KErrNone );
-        }
-    else if( iProxyState == EStateInitialisingLocally && 
-        aCmd == EPbCmdClose )
-        {
-        __LOG( "DownloadProxy: Close when initialising locally" );
-        iLocalPlayer->CommandL( aCmd, aData );
-        }
-    else if( iProxyState == EStateUninitialised && aCmd == EPbCmdClose )
-        {
-        __LOG( "DownloadProxy: Close when uninitialized" );
-        iObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPClosed,
-            0, KErrNone );
-        }
-    else if( ( iProxyState == EStatePreparing ||
-        iProxyState == EStateDownloading ||
-        iProxyState == EStateInitialisingLocally ||
-        iProxyState == EStateUninitialised ) && aCmd == EPbCmdStop )
-        {
-        __LOG( "DownloadProxy: Stop during any state" );
-        iLocalPlayer->CommandL( aCmd, aData );
-        }
-    else // Not initialized
-        {
-        __LOG1( "DownloadProxy: Command not supported in this state: %d",
-            iProxyState );
-        User::Leave( KErrNotReady );    
-        }
-
-    // check for messages from upnp framework (aData param)
-    if ( aCmd == EPbCmdClose &&
-        aData == KMusicPluginMessageExit )
-        {
-        __LOG( "CommandL(Close, exit) -> cleanup and terminate" );
-
-        // cancel things that are ongoing
-        Cleanup();
-        iLocalPlayer->CancelRequest();
-        iProxyState = EStateUninitialised;
-
-        // Create event to user
-        
-        iObs->HandlePluginEvent(
-            MMPXPlaybackPluginObserver::EPPlayerUnavailable,
-            0, KErrDisconnected);
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::SetL
-// --------------------------------------------------------------------------
-//  
-void CUPnPMusicDownloadProxy::SetL( TMPXPlaybackProperty aProperty,
-    TInt aValue )
-    {
-    __LOG1( "DownloadProxy::SetL [%d]", this );
-    __LOG1( "Property=%d", (TInt)aProperty );
-    iLocalPlayer->SetL( aProperty, aValue );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::ValueL
-// --------------------------------------------------------------------------
-//  
-void CUPnPMusicDownloadProxy::ValueL( TMPXPlaybackProperty aProperty ) const
-    {
-    __LOG1( "DownloadProxy::ValueL [%d]", this );
-    iLocalPlayer->ValueL( aProperty );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::SubPlayerNamesL
-// --------------------------------------------------------------------------
-//  
-void CUPnPMusicDownloadProxy::SubPlayerNamesL()
-    {
-    iLocalPlayer->SubPlayerNamesL();
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::SelectSubPlayerL
-// --------------------------------------------------------------------------
-//   
-void CUPnPMusicDownloadProxy::SelectSubPlayerL( TInt aIndex )
-    {
-    iLocalPlayer->SelectSubPlayerL( aIndex );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::SubPlayerName
-// Returns current sub player name
-// --------------------------------------------------------------------------
-// 
-const TDesC& CUPnPMusicDownloadProxy::SubPlayerName()
-    {
-    return iLocalPlayer->SubPlayerName();
-    }
-    
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::SubPlayerIndex
-// --------------------------------------------------------------------------
-//  
-TInt CUPnPMusicDownloadProxy::SubPlayerIndex() const
-    {
-    return iLocalPlayer->SubPlayerIndex();
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::MediaL
-// --------------------------------------------------------------------------
-//
-void CUPnPMusicDownloadProxy::MediaL( const TArray<TMPXAttribute>& aAttrs )
-    {
-    // Get metadata from media server
-    if( iTrack )
-        {
-        __LOG1( "DownloadProxy: Get metadata [%d]", this );
-        iTrack->GetMetaDataL( aAttrs, *iObs );
-        }
-    else
-        {
-        __LOG( "DownloadProxy: Get metadata - no track!" );
-        User::Leave( KErrNotReady );
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::CancelRequest
-// --------------------------------------------------------------------------
-//
-void CUPnPMusicDownloadProxy::CancelRequest()
-    {
-    __LOG( "CUPnPMusicDownloadProxy::CancelRequest" );
-    if( iProxyState == EStateDownloading )
-        {
-        Cleanup(); // this will cancel ongoing copy
-        iProxyState = EStateUninitialised;
-        // Send "downloading cancelled" event to the user 
-        iObs->HandlePluginEvent( 
-            MMPXPlaybackPluginObserver::EPDownloadingCanceled,
-            0, KErrGeneral );
-        }
-    iLocalPlayer->CancelRequest();
-    }
-
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::SetObserver
-// --------------------------------------------------------------------------
-//
-void CUPnPMusicDownloadProxy::SetObserver(MMPXPlaybackPluginObserver& aObs)
-    {
-    CMPXPlaybackPlugin::SetObserver( aObs );
-    
-    iLocalPlayer->SetObserver( *this ); 
-    }
-
-// --------------------------------------------------------------------------
-// Methods from MMPXPlaybackPluginObserver
-// --------------------------------------------------------------------------
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::HandlePluginEvent
-// --------------------------------------------------------------------------
-// 
-void CUPnPMusicDownloadProxy::HandlePluginEvent( TEvent aEvent,
-    TInt aData, TInt aError )
-    {
-    __LOG1( "DownloadProxy::HandlePluginEvent [%d]", this );
-
-    switch( aEvent )
-        {
-        case EPInitialised:
-            {
-            __ASSERTD( iProxyState == EStateInitialisingLocally,__FILE__, 
-                __LINE__ );
-            __LOG1( "DownloadProxy: initialised event, err=%d",
-                aError );
-
-            // Proxied local plugin initialized
-            if ( aError == KErrNone )
-                {
-                iProxyState = EStateActive;
-             
-                iObs->HandlePluginEvent( aEvent, aData, aError );
-                }
-            else
-                {
-                iProxyState = EStateClosing;
-                TRAP_IGNORE (
-                    iLocalPlayer->CommandL( EPbCmdClose, 0 ) );
-                }
-            
-            if ( iProxyState == EStateActive )
-                {
-                TRAP_IGNORE(
-                    iTrack->SendMediaChangedEventL( *iObs );
-                    );
-                }
-            break;
-            }
-        case EPPlaying:             // fall through
-        case EPPlayComplete:        // fall through
-        case EPPaused:              // fall through
-        case EPStopped:             // fall through
-        case EPDownloadStarted:     // fall through
-        case EPDownloadingComplete: // fall through
-        case EPSubPlayersChanged:   // fall through
-        case EPVolumeChanged:       // fall through
-        case EPSetComplete:
-            {
-            __LOG2( "DownloadProxy plugin event=%d err=%d",
-                (TInt)aEvent, aError );
-
-            // Just forward event to the user.
-            aError = TUpnpPluginsErrorTranslation::ErrorTranslate( 
-                    aError );
-            iObs->HandlePluginEvent( aEvent, aData, aError );
-            break;
-            }
-        case EPClosed:
-            {
-            __LOG( "DownloadProxy: closed event" );
-
-            // a Stop command has changed. It will send back a Stopped event 
-            // and then a Closed event. Following Pause command will not be 
-            // accepted in Uninitialized state and CommandL() will leave. 
-            // This change in MPX was necessary to let engine know the file 
-            // was closed. One additional aData parameter is passed in 
-            // iObs->HandlePluginEvent(MMPXPlaybackPluginObserver::EPClosed, 
-            //    EPbCmdStop, KErrNone); to know the difference between a 
-            // real Close and a Stop/Close. When this happens, EPClosed event
-            // should be ignored.
-            if( aData == EPbCmdStop )
-                {
-                break;
-                }
-
-            Cleanup();
-
-            // If iProxyState is EStateClosing, initialise of 
-            // localplaybackplugin is failed -> send initialised event with
-            // an error code to the user.
-            // Otherwise forward event to the user normally.
-            if( iProxyState == EStateClosing )
-                {
-                iObs->HandlePluginEvent( 
-                    MMPXPlaybackPluginObserver::EPInitialised,
-                    0, KErrNotSupported );
-                }
-            else
-                {
-                aError = TUpnpPluginsErrorTranslation::ErrorTranslate( 
-                        aError );
-                iObs->HandlePluginEvent( aEvent, aData, aError );
-                }
-            iProxyState = EStateUninitialised;
-            break;
-            }
-        default:
-            {
-            __LOG( "DownloadProxy: Default event?" );
-            break;
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::HandleProperty
-// --------------------------------------------------------------------------
-// 
-void CUPnPMusicDownloadProxy::HandleProperty( TMPXPlaybackProperty aProperty,
-    TInt aValue, TInt aError )
-    {
-    __LOG1( "DownloadProxy::HandleProperty [%d]", this );
-        
-    iObs->HandleProperty( aProperty, aValue, aError );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::HandleSubPlayerNames
-// --------------------------------------------------------------------------
-// 
-void CUPnPMusicDownloadProxy::HandleSubPlayerNames( TUid aPlayer, 
-    const MDesCArray* aSubPlayers, TBool aComplete, TInt aError )
-    {
-    iObs->HandleSubPlayerNames( aPlayer, aSubPlayers, aComplete, aError );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::HandleMedia
-// --------------------------------------------------------------------------
-// 
-void CUPnPMusicDownloadProxy::HandleMedia( const CMPXMedia& aProperties,
-    TInt aError )
-    {
-    __LOG1( "DownloadProxy::HandleMedia [%d]", this );
-        
-    iObs->HandleMedia( aProperties, aError );
-    }
-
-// --------------------------------------------------------------------------
-// CUPnPMusicDownloadProxy::CleanUpSession
-// --------------------------------------------------------------------------
-// 
-void CUPnPMusicDownloadProxy::Cleanup()
-    {
-    __LOG1( "DownloadProxy::Cleanup [%d]", this );
-    if( iTrack )
-        {
-        delete iTrack;
-        iTrack = 0;
-        }
-    __LOG( "DownloadProxy::Cleanup - End");
-    }
-