diff -r b95ddb5a0d10 -r eff9df3d9c98 utilities/mpnowplayingbanner/src/mpnowplayingbackend_p.cpp --- a/utilities/mpnowplayingbanner/src/mpnowplayingbackend_p.cpp Fri Jun 11 16:24:02 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,294 +0,0 @@ -/* -* Copyright (c) 2009 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 now playing widget backend - Private. -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "mpnowplayingbackend_p.h" -#include "mptrace.h" - -/*! - \internal - \class MpNowPlayingBackEndPrivate - \brief Wraps the playback utility and provides separation for QT and Symbian code. - - This class wraps the playback utility on the MPX Framework to provide a simple - interface and separation of QT and Symbian code. -*/ - - -/*! - \internal - Constructs the now playing back end private. - */ -MpNowPlayingBackEndPrivate::MpNowPlayingBackEndPrivate( long int playerId, MpNowPlayingBackEnd *qq ) - : q_ptr( qq ), - mPreviousState( NotPlaying ), - mPlaybackUtility(0) -{ - TX_ENTRY_ARGS( "Player ID =" << playerId << " Q pointer=" << ( void * )qq ) - if ( !playerId ) { - playerId = KPbModeDefault.iUid; - } - TRAPD( errCode, - mPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid( playerId ) ); - mPlaybackUtility->AddObserverL( *this ); - ); - - if( KErrNone != errCode && mPlaybackUtility ) { - mPlaybackUtility->Close(); - mPlaybackUtility = 0; - } - TX_EXIT -} - -/*! - \internal - Destructs the now playing back end private. - */ -MpNowPlayingBackEndPrivate::~MpNowPlayingBackEndPrivate() -{ - TX_ENTRY - if ( mPlaybackUtility ) { - TRAP_IGNORE( mPlaybackUtility->RemoveObserverL( *this ) ); - mPlaybackUtility->Close(); - } - TX_EXIT -} - -/*! - \internal - Updates the widget with the latest playback information. - */ -void MpNowPlayingBackEndPrivate::update() -{ - TX_ENTRY - TRAPD( errCode, UpdateStateL() ); - if ( KErrNone == errCode ) { - TRAP_IGNORE( RequestMediaL() ); - } - TX_EXIT -} - -/*! - \internal - Sends a play/pause command. - */ -void MpNowPlayingBackEndPrivate::playPause() -{ - TX_ENTRY - TRAPD(err, DoPlayPauseL()); - if ( err != KErrNone ) { - TX_LOG_ARGS("Error: " << err << "; should never get here."); - } - TX_EXIT -} - -/*! - \internal - Callback function from MMPXPlaybackObserver. - \sa DoHandlePlaybackMessageL() - */ -void MpNowPlayingBackEndPrivate::HandlePlaybackMessage( - CMPXMessage* aMessage, - TInt aError ) -{ - TX_ENTRY - if ( aError == KErrNone && aMessage ) { - TRAP_IGNORE( DoHandlePlaybackMessageL( *aMessage ) ); - } - TX_EXIT -} - -/*! - \internal - Callback function from MMPXPlaybackObserver. - */ -void MpNowPlayingBackEndPrivate::HandlePropertyL( TMPXPlaybackProperty aProperty, - TInt aValue, TInt aError) -{ - // Nothing to do. - Q_UNUSED(aProperty); - Q_UNUSED(aValue); - Q_UNUSED(aError); -} - -/*! - \internal - Callback function from MMPXPlaybackObserver. - */ -void MpNowPlayingBackEndPrivate::HandleSubPlayerNamesL( TUid aPlayer, - const MDesCArray* aSubPlayers, TBool aComplete, TInt aError ) -{ - // Nothing to do. - Q_UNUSED(aPlayer); - Q_UNUSED(aSubPlayers); - Q_UNUSED(aComplete); - Q_UNUSED(aError); -} - -/*! - \internal - Callback function from MMPXPlaybackCallback. - */ -void MpNowPlayingBackEndPrivate::HandleMediaL( - const CMPXMedia& aMedia, - TInt aError ) -{ - TX_ENTRY - if( KErrNone != aError || mPreviousState == NotPlaying ) { - TX_EXIT - return; - } - - if( aMedia.IsSupported( KMPXMediaGeneralTitle ) ) { - emit q_ptr->titleChanged( - QString::fromUtf16( aMedia.ValueText( KMPXMediaGeneralTitle ).Ptr(), - aMedia.ValueText( KMPXMediaGeneralTitle ).Length() ) ); - } - else if (aMedia.IsSupported( KMPXMediaGeneralUri )) { - TParsePtrC filePath( aMedia.ValueText( KMPXMediaGeneralUri ) ); - emit q_ptr->titleChanged( - QString::fromUtf16( filePath.Name().Ptr(), - filePath.Name().Length() ) ); - } - else { - emit q_ptr->titleChanged( QString() ); - } - - if( aMedia.IsSupported( KMPXMediaMusicArtist ) ) { - emit q_ptr->artistChanged( - QString::fromUtf16( aMedia.ValueText( KMPXMediaMusicArtist ).Ptr(), - aMedia.ValueText( KMPXMediaMusicArtist ).Length() ) ); - } - else { - emit q_ptr->artistChanged( QString() ); - } - TX_EXIT -} - -/*! - \internal - Leaving function to request Media. - \sa HandleMediaL() - */ -void MpNowPlayingBackEndPrivate::RequestMediaL() -{ - TX_ENTRY - MMPXSource* mediaSrc = mPlaybackUtility->Source(); - User::LeaveIfNull( mediaSrc ); - RArray requestedAttr; - CleanupClosePushL( requestedAttr ); - requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralTitle ) ); - requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicArtist ) ); - requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralUri ) ); - mediaSrc->MediaL( requestedAttr.Array(), *this ); - CleanupStack::PopAndDestroy( &requestedAttr ); - TX_EXIT -} - -/*! - \internal - Leaving function to update the playback state. - */ -void MpNowPlayingBackEndPrivate::UpdateStateL() -{ - TX_ENTRY - if ( !mPlaybackUtility->Source() ) { - TX_LOG_ARGS( "NotPlaying" ) - mPreviousState = NotPlaying; - emit q_ptr->stateUpdate( NotPlaying ); - - } - else { - TMPXPlaybackState state = mPlaybackUtility->StateL(); - switch ( state ) { - case EPbStatePlaying: - if ( mPreviousState != Playing ) { - TX_LOG_ARGS( "Playing" ) - emit q_ptr->stateUpdate( Playing ); - } - mPreviousState = Playing; - break; - case EPbStatePaused: - case EPbStateStopped: //reinterpreting stop as a pause - TX_LOG_ARGS("EPbStatePaused or PbStateStopped") - if (mPreviousState != Paused){ - TX_LOG_ARGS( "Paused" ) - emit q_ptr->stateUpdate( Paused ); - } - mPreviousState = Paused; - break; - default: - //Ignore other states. - break; - } - } - TX_EXIT -} - -/*! - \internal - Leaving function to send play/pause command. - */ -void MpNowPlayingBackEndPrivate::DoPlayPauseL() -{ - mPlaybackUtility->CommandL( EPbCmdPlayPause ); -} - -/*! - \internal - Leaving function to handle the playback /a message. - \sa HandlePlaybackMessageL() - */ -void MpNowPlayingBackEndPrivate::DoHandlePlaybackMessageL( - const CMPXMessage& message ) -{ - TX_ENTRY - TMPXMessageId id( message.ValueTObjectL( KMPXMessageGeneralId ) ); - if ( KMPXMessageGeneral == id ) { - switch ( message.ValueTObjectL( KMPXMessageGeneralEvent ) ) { - case TMPXPlaybackMessage::EStateChanged: - TX_LOG_ARGS( "EStateChanged" ) - UpdateStateL(); - break; - case TMPXPlaybackMessage::EMediaChanged: - TX_LOG_ARGS( "EMediaChanged or fall through from EPlaylistUpdated" ) - RequestMediaL(); - break; - case TMPXPlaybackMessage::EPlaylistUpdated: - TX_LOG_ARGS( "EPlaylistUpdated" ) - case TMPXPlaybackMessage::EActivePlayerChanged: - TX_LOG_ARGS( "EActivePlayerChanged or fall through from EPlaylistUpdated" ) - UpdateStateL(); - RequestMediaL(); - break; - default: - TX_LOG_ARGS( "unhandled case:" << message.ValueTObjectL( KMPXMessageGeneralEvent ) << "see TMPXPlaybackMessage" ) - break; - } - } - TX_EXIT -}