diff -r 79c49924ae23 -r af3740e3753f mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp --- a/mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp Tue Jul 06 14:13:36 2010 +0300 +++ b/mpengine/src/mpmpxplaybackframeworkwrapper_p.cpp Wed Aug 18 09:46:20 2010 +0300 @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include #include @@ -33,6 +35,7 @@ #include "mpcommondefs.h" #include "mptrace.h" #include "mpxaudioeffectengine.h" +#include "mpsongdata.h" _LIT(KMPXPnRealAudioMimeType, "audio/x-pn-realaudio"); _LIT(KMPXRealAudioMimeType, "audio/x-realaudio"); @@ -48,10 +51,10 @@ \internal */ MpMpxPlaybackFrameworkWrapperPrivate::MpMpxPlaybackFrameworkWrapperPrivate( MpMpxPlaybackFrameworkWrapper *qq) - : q_ptr( qq ), - iPlaybackUtility( 0 ), - iMedia( 0 ), - iPlaybackData( 0 ) + : q_ptr(qq), + iPlaybackUtility(0), + iPlaybackData(0), + iDetailsRequest(false) { TX_LOG } @@ -62,29 +65,28 @@ MpMpxPlaybackFrameworkWrapperPrivate::~MpMpxPlaybackFrameworkWrapperPrivate() { TX_ENTRY - if ( iPlaybackUtility ) { TRAP_IGNORE( ForceStopL() ); TRAP_IGNORE( iPlaybackUtility->RemoveObserverL(*this) ); iPlaybackUtility->Close(); } - - delete iMedia; delete iPlaybackData; - TX_EXIT } /*! \internal */ -void MpMpxPlaybackFrameworkWrapperPrivate::init( TUid hostUid ) +void MpMpxPlaybackFrameworkWrapperPrivate::init( TUid hostUid, MpSongData *songData ) { - mHostUid = hostUid; + TX_ENTRY + iHostUid = hostUid; + iSongData = songData; TRAPD(err, DoInitL()); if ( err != KErrNone ) { TX_LOG_ARGS("Error: " << err << "; should never get here."); } + TX_EXIT } /*! @@ -108,6 +110,33 @@ TX_LOG_ARGS( "Error: " << err << "; should never get here." ); } } + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::play() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->CommandL(EPbCmdPlay) ); + if ( err != KErrNone ) { + TX_LOG_ARGS( "Error: " << err << "; should never get here." ); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::pause() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->CommandL(EPbCmdPause) ); + if ( err != KErrNone ) { + TX_LOG_ARGS( "Error: " << err << "; should never get here." ); + } + TX_EXIT +} + /*! \internal */ @@ -280,6 +309,123 @@ /*! \internal */ +void MpMpxPlaybackFrameworkWrapperPrivate::getMaxVolume() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyMaxVolume ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::getVolume() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyVolume ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::increaseVolume() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->CommandL( EPbCmdIncreaseVolume ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::decreaseVolume() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->CommandL( EPbCmdDecreaseVolume ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::setVolume( int value ) +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->CommandL( EPbCmdSetVolume, value ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::getMuteState() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyMute ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::mute() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->CommandL( EPbCmdMuteVolume ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::unmute() +{ + TX_ENTRY + TRAPD( err, iPlaybackUtility->CommandL( EPbCmdUnMuteVolume ) ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \ Closes current playback source. + */ +void MpMpxPlaybackFrameworkWrapperPrivate::closeCurrentPlayback() +{ + TX_ENTRY + TRAPD( err, DoCloseCurrentPlaybackL() ); + if ( err != KErrNone ) { + TX_LOG_ARGS("Error: " << err << "; should never get here."); + } + TX_EXIT +} + +/*! + \internal + */ MpPlaybackData *MpMpxPlaybackFrameworkWrapperPrivate::playbackData() { return iPlaybackData; @@ -288,6 +434,22 @@ /*! \internal */ +void MpMpxPlaybackFrameworkWrapperPrivate::retrieveSongDetails() +{ + TX_ENTRY + TRAPD( err, DoRetrieveSongDetailsL(true) ); + if ( err == KErrNone ) { + iDetailsRequest = true; + } + else { + TX_LOG_ARGS( "Error: " << err << "; should never get here." ); + } + TX_EXIT +} + +/*! + \internal + */ void MpMpxPlaybackFrameworkWrapperPrivate::HandlePlaybackMessage( CMPXMessage *aMessage, TInt aError ) { TX_ENTRY_ARGS("aError=" << aError); @@ -316,6 +478,18 @@ TX_LOG_ARGS("EPbPropertyDuration") iPlaybackData->setDuration(aValue); break; + case EPbPropertyVolume: + TX_LOG_ARGS("EPbPropertyVolume") + q_ptr->emit volumePropertyChanged( MpCommon::Volume, aValue ); + break; + case EPbPropertyMaxVolume: + TX_LOG_ARGS("EPbPropertyMaxVolume") + q_ptr->emit volumePropertyChanged( MpCommon::MaxVolume, aValue ); + break; + case EPbPropertyMute: + TX_LOG_ARGS("EPbPropertyMute") + q_ptr->emit volumePropertyChanged( MpCommon::MuteState, aValue ); + break; default: break; } @@ -343,97 +517,97 @@ \internal */ void MpMpxPlaybackFrameworkWrapperPrivate::HandleMediaL( - const CMPXMedia& aProperties, + const CMPXMedia& aMedia, TInt aError ) { - TX_ENTRY_ARGS("aError=" << aError); - if ( KErrNone != aError || !iPlaybackData ) { + TX_ENTRY + if ( KErrNone != aError ){ + TX_LOG_ARGS( "Error: " << aError << "; should never get here." ); TX_EXIT return; } - if ( iMedia ) { - delete iMedia; - iMedia = NULL; - } - iMedia = CMPXMedia::NewL( aProperties ); - - bool changed = false; - if ( aProperties.IsSupported( KMPXMediaGeneralTitle ) ) { - changed |= iPlaybackData->setTitle( - QString::fromUtf16( - aProperties.ValueText( KMPXMediaGeneralTitle ).Ptr(), - aProperties.ValueText( KMPXMediaGeneralTitle ).Length() ) ); - } - else { - changed |= iPlaybackData->setTitle( - QString::fromUtf16( - aProperties.ValueText( KMPXMediaGeneralUri ).Ptr(), - aProperties.ValueText( KMPXMediaGeneralUri ).Length() ) ); - } - - if ( aProperties.IsSupported( KMPXMediaMusicArtist ) ) { - changed |= iPlaybackData->setArtist( - QString::fromUtf16( - aProperties.ValueText( KMPXMediaMusicArtist ).Ptr(), - aProperties.ValueText( KMPXMediaMusicArtist ).Length() ) ); - } - else { - changed |= iPlaybackData->setArtist(QString()); - } - if ( aProperties.IsSupported( KMPXMediaMusicAlbum ) ) { - changed |= iPlaybackData->setAlbum( - QString::fromUtf16( - aProperties.ValueText( KMPXMediaMusicAlbum ).Ptr(), - aProperties.ValueText( KMPXMediaMusicAlbum ).Length() ) ); + if ( iDetailsRequest ) { + iDetailsRequest = false; + iSongData->setMpxMedia( aMedia ); } else { - changed |= iPlaybackData->setAlbum(QString()); - } - if (aProperties.IsSupported(TMPXAttribute(KMPXMediaGeneralMimeType))) { - - const TDesC& mimeType = aProperties.ValueText ( KMPXMediaGeneralMimeType ); - - bool realAudioMode = - ( mimeType.Compare( KMPXPnRealAudioMimeType ) == 0 ) || - ( mimeType.Compare( KMPXRealAudioMimeType ) == 0) || - ( mimeType.Compare( KMPXRnRealAudioMimeType ) == 0 ); - - changed |= iPlaybackData->setRealAudio( realAudioMode ); - } + bool changed = false; + if ( aMedia.IsSupported( KMPXMediaGeneralTitle ) ) { + changed |= iPlaybackData->setTitle( + QString::fromUtf16( + aMedia.ValueText( KMPXMediaGeneralTitle ).Ptr(), + aMedia.ValueText( KMPXMediaGeneralTitle ).Length() ) ); + } + else { + changed |= iPlaybackData->setTitle( + QString::fromUtf16( + aMedia.ValueText( KMPXMediaGeneralUri ).Ptr(), + aMedia.ValueText( KMPXMediaGeneralUri ).Length() ) ); + } + if ( aMedia.IsSupported( KMPXMediaMusicArtist ) ) { + changed |= iPlaybackData->setArtist( + QString::fromUtf16( + aMedia.ValueText( KMPXMediaMusicArtist ).Ptr(), + aMedia.ValueText( KMPXMediaMusicArtist ).Length() ) ); + } + else { + changed |= iPlaybackData->setArtist(QString()); + } + if ( aMedia.IsSupported( KMPXMediaMusicAlbum ) ) { + changed |= iPlaybackData->setAlbum( + QString::fromUtf16( + aMedia.ValueText( KMPXMediaMusicAlbum ).Ptr(), + aMedia.ValueText( KMPXMediaMusicAlbum ).Length() ) ); + } + else { + changed |= iPlaybackData->setAlbum(QString()); + } + if (aMedia.IsSupported(TMPXAttribute(KMPXMediaGeneralMimeType))) { + + const TDesC& mimeType = aMedia.ValueText ( KMPXMediaGeneralMimeType ); - if ( aProperties.IsSupported( KMPXMediaGeneralUri) ) { - iPlaybackData->setUri( - QString::fromUtf16( - aProperties.ValueText( KMPXMediaGeneralUri ).Ptr(), - aProperties.ValueText( KMPXMediaGeneralUri ).Length() ) ); - } - if (aProperties.IsSupported(TMPXAttribute(KMPXMediaMusicAlbumArtFileName))) { - iPlaybackData->setAlbumArtUri( - QString::fromUtf16( - aProperties.ValueText(KMPXMediaMusicAlbumArtFileName).Ptr(), - aProperties.ValueText(KMPXMediaMusicAlbumArtFileName).Length())); - } - else { - iPlaybackData->setAlbumArtUri( - QString::fromUtf16( - aProperties.ValueText( KMPXMediaGeneralUri ).Ptr(), - aProperties.ValueText( KMPXMediaGeneralUri ).Length() ) ); - } - if ( aProperties.IsSupported( KMPXMediaMusicAlbumId) ) { - changed |= iPlaybackData->setAlbumId( - aProperties.ValueTObjectL( KMPXMediaMusicAlbumId ) ); - } - - if ( aProperties.IsSupported( KMPXMediaGeneralId) ) { - changed |= iPlaybackData->setId( - aProperties.ValueTObjectL( KMPXMediaGeneralId ) ); - } - - if ( changed ) { - // This is required to propagate the playback info to UI at once. - iPlaybackData->commitPlaybackInfo(); + bool realAudioMode = + ( mimeType.Compare( KMPXPnRealAudioMimeType ) == 0 ) || + ( mimeType.Compare( KMPXRealAudioMimeType ) == 0) || + ( mimeType.Compare( KMPXRnRealAudioMimeType ) == 0 ); + + changed |= iPlaybackData->setRealAudio( realAudioMode ); + } + + if ( aMedia.IsSupported( KMPXMediaGeneralUri) ) { + iPlaybackData->setUri( + QString::fromUtf16( + aMedia.ValueText( KMPXMediaGeneralUri ).Ptr(), + aMedia.ValueText( KMPXMediaGeneralUri ).Length() ) ); + } + if (aMedia.IsSupported(TMPXAttribute(KMPXMediaMusicAlbumArtFileName))) { + iPlaybackData->setAlbumArtUri( + QString::fromUtf16( + aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Ptr(), + aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Length())); + } + else { + iPlaybackData->setAlbumArtUri( + QString::fromUtf16( + aMedia.ValueText( KMPXMediaGeneralUri ).Ptr(), + aMedia.ValueText( KMPXMediaGeneralUri ).Length() ) ); + } + if ( aMedia.IsSupported( KMPXMediaMusicAlbumId) ) { + changed |= iPlaybackData->setAlbumId( + aMedia.ValueTObjectL( KMPXMediaMusicAlbumId ) ); + } + + if ( aMedia.IsSupported( KMPXMediaGeneralId ) ) { + changed |= iPlaybackData->setId( + aMedia.ValueTObjectL( KMPXMediaGeneralId ) ); + } + + if ( changed ) { + // This is required to propagate the playback info to UI at once. + iPlaybackData->commitPlaybackInfo(); + } } TX_EXIT } @@ -444,13 +618,13 @@ void MpMpxPlaybackFrameworkWrapperPrivate::DoInitL() { TX_ENTRY - iPlaybackUtility = MMPXPlaybackUtility::UtilityL( mHostUid ); + iPlaybackUtility = MMPXPlaybackUtility::UtilityL( iHostUid ); iPlaybackUtility->AddObserverL( *this ); iPlaybackData = new MpPlaybackData(); UpdateStateL(); if ( iPlaybackUtility->Source() ) { - RetrieveSongDetailsL(); + DoRetrieveSongDetailsL(false); } TX_EXIT } @@ -474,7 +648,7 @@ void MpMpxPlaybackFrameworkWrapperPrivate::DoPlayL( const XQSharableFile& file ) { TX_ENTRY - + RFile xqfile; bool ok = file.getHandle( xqfile ); if ( ok ) { @@ -532,14 +706,15 @@ break; case TMPXPlaybackMessage::EMediaChanged: TX_LOG_ARGS("TMPXPlaybackMessage::EMediaChanged") - RetrieveSongDetailsL(); + DoRetrieveSongDetailsL(false); break; case TMPXPlaybackMessage::EPlaylistUpdated: TX_LOG_ARGS( "EPlaylistUpdated" ) + // coverity[fallthrough] case TMPXPlaybackMessage::EActivePlayerChanged: TX_LOG_ARGS( "EActivePlayerChanged or fall through from EPlaylistUpdated" ) UpdateStateL(); - RetrieveSongDetailsL(); + DoRetrieveSongDetailsL(false); break; default: break; @@ -606,25 +781,47 @@ /*! \internal */ -void MpMpxPlaybackFrameworkWrapperPrivate::RetrieveSongDetailsL() +void MpMpxPlaybackFrameworkWrapperPrivate::DoRetrieveSongDetailsL( bool detailsRequest ) { TX_ENTRY MMPXSource *mediaSrc = iPlaybackUtility->Source(); User::LeaveIfNull( mediaSrc ); RArray requestedAttr; CleanupClosePushL( requestedAttr ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralId ) ); requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralTitle ) ); requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicArtist ) ); requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbum ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumId ) ); requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralUri ) ); requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumArtFileName ) ); - requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumId ) ); - requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralMimeType ) ); - requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralId ) ); - - + requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralMimeType ) ); + if ( detailsRequest ) { + requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumTrack ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicComposer ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicYear ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicGenre ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralDuration ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaAudioBitrate ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaAudioSamplerate ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralCopyright ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicURL ) ); + requestedAttr.AppendL( TMPXAttribute( KMPXMediaDrmProtected ) ); + } mediaSrc->MediaL( requestedAttr.Array(), *this ); CleanupStack::PopAndDestroy( &requestedAttr ); TX_EXIT } +/*! + \internal + */ +void MpMpxPlaybackFrameworkWrapperPrivate::DoCloseCurrentPlaybackL() +{ + TX_ENTRY + if( iPlaybackUtility->Source() ) { + iPlaybackUtility->CommandL( EPbCmdClose ); + } + TX_EXIT +} +