mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerpluginengine.cpp
branchRCL_3
changeset 11 13afc0e517bd
parent 5 2a40e88564c8
child 13 a914e47e7a01
child 14 943ff5625028
--- a/mpxmusicplayer/activeidle/aiplayerplugin/src/aiplayerpluginengine.cpp	Tue Feb 02 00:09:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,514 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Music Player stautus observer
-*
-*/
-
-
-#include <mpxplaybackutility.h>
-#include <mpxplaybackmessage.h>
-#include <mpxmedia.h>
-#include <mpxmediageneraldefs.h>
-#include <mpxmediamusicdefs.h>
-#include <mpxmessagegeneraldefs.h>
-#include <mpxplaybackmessagedefs.h>
-#include <mpxlog.h>
-
-#include "aiplayerpluginengine.h"
-
-const TInt KMPXOneSecInMilliSecs( 1000 );
-const TInt KVolumeLevelMin = 0;
-const TInt KVolumeLevelMax = 10;
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CAiPlayerPluginEngine::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::ConstructL()
-    {
-    MPX_DEBUG1("CAiPlayerPluginEngine::ConstructL");
-    // Get the playback utility instance from engine.
-    iPlaybackUtility = MMPXPlaybackUtility::NewL( KPbModeActivePlayer, this );
-    
-    TMPXPlaybackState state( EPbStateNotInitialised ); 
-    
-    // Not fatal error if fetching the playback state fails
-    TRAP_IGNORE( state = iPlaybackUtility->StateL() );
-    
-    if( state != EPbStateNotInitialised &&
-        state != EPbStateInitialising )
-    	{
-    	// Playback is already ongoing. We aren't going to receive EMediaChanged
-    	// for the current song so we need manually update the media info   
-    	RequestMediaL();
-    	}
-    }
-
-// ---------------------------------------------------------------------------
-// CAiPlayerPluginEngine::NewL
-// ---------------------------------------------------------------------------
-//
-CAiPlayerPluginEngine* CAiPlayerPluginEngine::NewL( MAiPlayerPluginEngineObserver& aObserver )
-    {
-    MPX_DEBUG1("CAiPlayerPluginEngine::NewL");
-    CAiPlayerPluginEngine* self = new ( ELeave ) CAiPlayerPluginEngine( aObserver );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CAiPlayerPluginEngine::CAiPlayerPluginEngine
-// ---------------------------------------------------------------------------
-//
-CAiPlayerPluginEngine::CAiPlayerPluginEngine( MAiPlayerPluginEngineObserver& aObserver )
-    : iObserver( &aObserver ),
-      iPlaybackUtility(NULL),
-      iTitle(NULL),
-      iArtist(NULL),
-      iMaxVolume(KVolumeLevelMax),
-      iVolume(KErrNotFound),
-      iPosition(KErrNotFound),
-      iDuration(KErrNotFound)
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CAiPlayerPluginEngine::~CAiPlayerPluginEngine
-// ---------------------------------------------------------------------------
-//
-CAiPlayerPluginEngine::~CAiPlayerPluginEngine()
-    {
-    MPX_DEBUG1("CAiPlayerPluginEngine::~CAiPlayerPluginEngine");
-    if ( iPlaybackUtility )
-        {
-        iPlaybackUtility->Close();
-        }
-    delete iTitle;
-    delete iArtist;
-    }
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackObserver
-// Handle playback message.
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError )
-    {
-    if ( aError == KErrNone && aMessage )
-        {
-        TRAP_IGNORE( DoHandlePlaybackMessageL( *aMessage ) );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackCallback
-// Handle playback property.
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError )
-    {
-    DoHandlePropertyL( aProperty, aValue, aError );
-    }
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackCallback
-// Method is called continously until aComplete=ETrue, signifying that
-// it is done and there will be no more callbacks
-// Only new items are passed each time
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::HandleSubPlayerNamesL(
-    TUid /* aPlayer */,
-    const MDesCArray* /* aSubPlayers */,
-    TBool /* aComplete */,
-    TInt /* aError */ )
-    {
-    // do nothing
-    }
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackCallback
-// Handle media
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::HandleMediaL( const CMPXMedia& aMedia, TInt aError )
-    {
-    MPX_DEBUG1("CAiPlayerPluginEngine::HandleMediaL");
-    if ( KErrNone == aError )
-        {
-		delete iTitle;
-		iTitle = NULL;
-        if ( aMedia.IsSupported( KMPXMediaGeneralTitle ) )
-            {
-            iTitle = (aMedia.ValueText( KMPXMediaGeneralTitle )).AllocL();
-            }
-        else if ( aMedia.IsSupported( KMPXMediaGeneralUri ) )
-            {
-            TParsePtrC filePath( aMedia.ValueText( KMPXMediaGeneralUri ) );
-            iTitle = (filePath.Name()).AllocL();
-            }
-		delete iArtist;
-		iArtist = NULL;
-		iArtist = (aMedia.ValueText( KMPXMediaMusicArtist )).AllocL();
-
-        iObserver->TrackInfoChanged( *iTitle, *iArtist );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// From MMPXPlaybackCallback
-// Handle completion of a asynchronous command
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::HandlePlaybackCommandComplete( CMPXCommand* /*aCommandResult*/, TInt /*aError*/ )
-    {
-    // do nothing
-    }
-
-// ---------------------------------------------------------------------------
-// Get the current state of the active player
-// ---------------------------------------------------------------------------
-//
-TMPlayerState CAiPlayerPluginEngine::PlayerState()
-    {
-    MPX_DEBUG1("CAiPlayerPluginEngine::PlayerState");
-    TMPXPlaybackState state( EPbStateNotInitialised );
-    TRAP_IGNORE( state = iPlaybackUtility->StateL() );
-    return MapState( state );
-    }
-
-// ---------------------------------------------------------------------------
-// CAiPlayerPluginEngine::Title
-// ---------------------------------------------------------------------------
-//
-const TDesC& CAiPlayerPluginEngine::Title()
-    {
-    if ( iTitle )
-        {
-        return *iTitle;
-        }
-     else
-        {
-        return KNullDesC;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CAiPlayerPluginEngine::Artist
-// ---------------------------------------------------------------------------
-//
-const TDesC& CAiPlayerPluginEngine::Artist()
-    {
-    if ( iArtist )
-        {
-        return *iArtist;
-        }
-     else
-        {
-        return KNullDesC;
-        }
-    }
-
-// ----------------------------------------------------
-// CAiPlayerPluginEngine::Position
-// ----------------------------------------------------
-//
-TInt CAiPlayerPluginEngine::Position()
-    {
-    return iPosition;
-    }
-
-// ----------------------------------------------------
-// CAiPlayerPluginEngine::Duration
-// ----------------------------------------------------
-//
-TInt CAiPlayerPluginEngine::Duration()
-    {
-    return iDuration;
-    }
-
-// ----------------------------------------------------
-// CAiPlayerPluginEngine::Volume
-// ----------------------------------------------------
-//
-TInt CAiPlayerPluginEngine::Volume()
-    {
-    return iVolume;
-    }
-
-// ----------------------------------------------------
-// CAiPlayerPluginEngine::SetVolumeL
-// ----------------------------------------------------
-//
-void CAiPlayerPluginEngine::SetVolumeL( TInt aValue )
-    {
-	MPX_DEBUG2("CAiPlayerPluginEngine::SetVolumeL(%d)", aValue );
-    if ( aValue == iVolume )
-        {
-        return;
-        }
-    if ( aValue < KVolumeLevelMin || aValue > KVolumeLevelMax )
-        {
-        User::Leave(KErrArgument);
-        }
-    else
-        {
-       	// iVolume will be updated upon callback DoHandlePropertyL
-        iPlaybackUtility->SetL( EPbPropertyVolume, MapToMpxVolume(aValue) ) ;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Handle playback message.
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::DoHandlePlaybackMessageL( const CMPXMessage& aMessage )
-    {
-    MPX_DEBUG1("CAiPlayerPluginEngine::DoHandlePlaybackMessageL");
-
-    TMPXMessageId id( aMessage.ValueTObjectL<TMPXMessageId>( KMPXMessageGeneralId ) );
-    if ( KMPXMessageGeneral == id )
-        {
-        TInt event( aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralEvent ) );
-        MPX_DEBUG2("CAiPlayerPluginEngine::DoHandlePlaybackMessageL(%d)", event );
-        switch ( event )
-            {
-            case TMPXPlaybackMessage::EPropertyChanged:
-                {
-                TInt error( KErrNone );
-                DoHandlePropertyL(
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralType ),
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralData ),
-                    error );
-                break;
-                }
-            case TMPXPlaybackMessage::EStateChanged:
-                {
-				TMPXPlaybackState state( aMessage.ValueTObjectL<TMPXPlaybackState>( KMPXMessageGeneralType ));
-                MPX_DEBUG2("CAiPlayerPluginEngine::HandlePlaybackMessageL - EStateChanged(%d)", state);
-
-                DoHandleStateChangedL( state );
-                break;
-                }
-            case TMPXPlaybackMessage::EMediaChanged:
-            case TMPXPlaybackMessage::EPlaylistUpdated:
-                {
-                iPlaybackUtility->PropertyL( *this, EPbPropertyPosition );
-                iPlaybackUtility->PropertyL( *this, EPbPropertyDuration );
-                RequestMediaL();
-                break;
-                }
-            case TMPXPlaybackMessage::ECommandReceived:
-                {
-                MPX_DEBUG2("CAiPlayerPluginEngine::HandlePlaybackMessageL - ECommandReceived(%d)",
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralType ) );
-                break;
-                }
-            case TMPXPlaybackMessage::EActivePlayerChanged:
-                {
-                MPX_DEBUG3("CAiPlayerPluginEngine::HandlePlaybackMessageL - EActivePlayerChanged(%d, %d)",
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralType ), 
-                    aMessage.ValueTObjectL<TInt>( KMPXMessageGeneralData ) );
-                iPlaybackUtility->PropertyL( *this, EPbPropertyPosition );
-                iPlaybackUtility->PropertyL( *this, EPbPropertyDuration );
-                iPlaybackUtility->PropertyL( *this, EPbPropertyMaxVolume );
-                iPlaybackUtility->PropertyL( *this, EPbPropertyVolume );
-                DoHandleStateChangedL( iPlaybackUtility->StateL() );
-                // refresh media property
-                RequestMediaL();
-                break;
-                }
-            case TMPXPlaybackMessage::EDownloadStateChanged:
-                {
-                iPlaybackUtility->PropertyL( *this, EPbPropertyPosition );
-                iPlaybackUtility->PropertyL( *this, EPbPropertyDuration );
-                RequestMediaL();
-                break;
-                }
-            default:
-                {
-                break;
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Handle playback property.
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::DoHandlePropertyL( TInt aProperty, TInt aValue, TInt aError )
-    {
-    MPX_DEBUG4("CAiPlayerPluginEngine::DoHandlePropertyL - Property(%d); Value(%d); Error(%d)", aProperty, aValue, aError );
-    if ( KErrNone == aError )
-        {
-        switch ( aProperty	)
-            {
-            case EPbPropertyPosition:
-                {
-				iPosition = aValue / KMPXOneSecInMilliSecs;
-                iObserver->PlaybackPositionChanged( iPosition );
-                break;
-                }
-            case EPbPropertyDuration:
-                {
-				iDuration = aValue / KMPXOneSecInMilliSecs;
-                break;
-                }
-            case EPbPropertyMaxVolume:
-                {
-                iMaxVolume = aValue;
-                break;
-                }
-            case EPbPropertyVolume:
-                {
-                TInt volume = MapToAiVolume(aValue);
-				if ( iVolume != volume )
-					{
-					iVolume = volume;
-					iObserver->VolumeChanged( iVolume );
-					}
-
-                break;
-                }
-            default:
-                {
-                break;
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Handle playback state changed.
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::DoHandleStateChangedL( TMPXPlaybackState aState )
-    {
-    TMPlayerState state = MapState( aState );
-    MPX_DEBUG3("CAiPlayerPluginEngine::DoHandleStateChangedL - State mapped from (%d) to (%d)", aState, state );
-    iObserver->PlayerStateChanged(state);
-    }
-
-// ---------------------------------------------------------------------------
-// Displays error notes.
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::HandleErrorL( TInt aError )
-    {
-	MPX_DEBUG2("CAiPlayerPluginEngine::HandleErrorL(%d)", aError );
-    }
-
-// ---------------------------------------------------------------------------
-// Map states from TMPXPlaybackState to TMPlayerState
-// ---------------------------------------------------------------------------
-//
-TMPlayerState CAiPlayerPluginEngine::MapState( TMPXPlaybackState aState )
-    {
-	TMPlayerState state = EMPlayerStateOther;
-    switch ( aState )
-        {
-        case EPbStatePlaying:
-            state = EMPlayerStatePlaying;
-            break;
-        case EPbStatePaused:
-            state = EMPlayerStatePaused;
-            break;
-        case EPbStateSeekingForward:
-        case EPbStateSeekingBackward:
-            state = EMPlayerStateSeeking;
-            break;
-        default:
-            break;
-        }
-    return state;
-    }
-
-// ---------------------------------------------------------------------------
-// Maps volume from MPX player to AI volume.
-// ---------------------------------------------------------------------------
-//
-TInt CAiPlayerPluginEngine::MapToAiVolume( TInt aVolume )
-    {
-	TInt volume;
-	if ( iMaxVolume == KVolumeLevelMax )
-		{
-		// No need to translate
-		volume = aVolume;
-		}
-	else if ( aVolume == KVolumeLevelMin )
-		{
-		volume = KVolumeLevelMin;
-		}
-	else if ( aVolume == iMaxVolume )
-		{
-		volume = KVolumeLevelMax;
-		}
-	else
-		{
-		volume = (TInt) ((aVolume * KVolumeLevelMax) / iMaxVolume);
-		}
-	return volume;
-    }
-
-// ---------------------------------------------------------------------------
-// Maps volume from AI to MPX player volume.
-// ---------------------------------------------------------------------------
-//
-TInt CAiPlayerPluginEngine::MapToMpxVolume( TInt aVolume )
-    {
-	TInt volume;
-	if ( iMaxVolume == KVolumeLevelMax )
-		{
-		// No need to translate
-		volume = aVolume;
-		}
-	else if ( aVolume == KVolumeLevelMin )
-		{
-		volume = KVolumeLevelMin;
-		}
-	else if ( aVolume == KVolumeLevelMax )
-		{
-		volume = iMaxVolume;
-		}
-	else
-		{
-		volume = (TInt) ((aVolume * iMaxVolume) / KVolumeLevelMax);
-		}
-	return volume;
-    }
-
-// ---------------------------------------------------------------------------
-// Requests Media.
-// ---------------------------------------------------------------------------
-//
-void CAiPlayerPluginEngine::RequestMediaL()
-    {
-    MMPXSource* s = iPlaybackUtility->Source();
-    if ( s )
-        {
-        RArray<TMPXAttribute> attrs;
-        CleanupClosePushL(attrs);
-        attrs.Append( KMPXMediaGeneralUri );
-        attrs.Append( KMPXMediaGeneralTitle );
-        attrs.Append( KMPXMediaMusicArtist );
-        s->MediaL( attrs.Array(), *this );
-        CleanupStack::PopAndDestroy( &attrs );
-        }
-    }
-//  End of File