--- a/mpx/playbackframework/playbackengine/src/mpxplaybackmediahelper.cpp Tue Aug 31 15:41:40 2010 +0300
+++ b/mpx/playbackframework/playbackengine/src/mpxplaybackmediahelper.cpp Wed Sep 01 12:23:05 2010 +0100
@@ -243,33 +243,73 @@
{
MPX_FUNC_EX("CMPXPlaybackMediaHelper::HandleCollectionMediaL");
MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL(): error %d", aError);
- MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task %d",
- iTaskQueue->Task());
-
- if ( iTaskQueue->Param() )
+
+ // First check if media attributes supported, if not, need to retrieve
+ // from playback plugin
+ TBool mediaOk( ETrue );
+ // Note: The following block is for uPnP remote playlist which does not contain
+ // metadata in the remote playlist. However, uPnP update to gurantee that titles
+ // are available in the collection plugin. If KMPXMediaColDetailMediaNotAvailable
+ // returned, UI can at least update title anyway anyway.
+ //
+ // We could not call MediaFromPluginL before the plugin initiliazed. uPnP made
+ // changes so that it will call back media after the new track is initialized.
+ // So we don't need call plugin API MediaL.
+ /*if ( KErrNone == aError )
+ { // media object is ok
+ if ( aMedia.IsSupported( KMPXMediaColDetailMediaNotAvailable ))
+ {
+ TBool mediaNotSupported(
+ aMedia.ValueTObjectL<TBool>( KMPXMediaColDetailMediaNotAvailable ));
+ MPX_DEBUG2("HandleCollectionMediaL media not inCollection %d",
+ mediaNotSupported);
+ if ( mediaNotSupported)
+ { // It must be uPnP remote playlist, media request can only be
+ // sent to plugin at initialising, playing & pause state
+ mediaOk = EFalse;
+ // need to create a copy of buf since that will be delete when
+ // this task is completed
+ const TDesC8& data( iTaskQueue->BufData() );
+ CBufBase* buf( MPXUser::CreateBufferLC( data.Size() ));
+ buf->Write( 0, data );
+ iEngine.MediaFromPluginL(
+ static_cast<MMPXPlaybackEngineObserver*>(
+ iTaskQueue->Callback() ),
+ buf );
+ CleanupStack::Pop( buf );
+ } //otherwise, just send uri to clients.
+ }
+ }*/
+
+ if ( mediaOk || aError )
{
- // Broadcast
- CMPXMessage* msg( CMPXMessage::NewL() );
- CleanupStack::PushL( msg );
- msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId,
- KMPXMessagePbMediaChanged );
- msg->SetCObjectValueL<CMPXMedia>( KMPXMessagePbMedia,
- const_cast<CMPXMedia*>( &aMedia ));
- CMPXClientList* clientList(
- static_cast<CMPXClientList*>( iTaskQueue->Callback() ));
- clientList->SendMsg(msg, KErrNone);
- CleanupStack::PopAndDestroy( msg );
+ MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task %d",
+ iTaskQueue->Task());
+
+ if ( iTaskQueue->Param() )
+ {
+ // Broadcast
+ CMPXMessage* msg( CMPXMessage::NewL() );
+ CleanupStack::PushL( msg );
+ msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId,
+ KMPXMessagePbMediaChanged );
+ msg->SetCObjectValueL<CMPXMedia>( KMPXMessagePbMedia,
+ const_cast<CMPXMedia*>( &aMedia ));
+ CMPXClientList* clientList(
+ static_cast<CMPXClientList*>( iTaskQueue->Callback() ));
+ clientList->SendMsg(msg, KErrNone);
+ CleanupStack::PopAndDestroy( msg );
+ }
+ else
+ {
+ // Callback
+ MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task cb 0x%08x",
+ iTaskQueue->Callback());
+ MMPXPlaybackEngineObserver* callback(
+ static_cast<MMPXPlaybackEngineObserver*>( iTaskQueue->Callback() ));
+ callback->HandleMedia( aMedia, aError );
+ }
}
- else
- {
- // Callback
- MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task cb 0x%08x",
- iTaskQueue->Callback());
- MMPXPlaybackEngineObserver* callback(
- static_cast<MMPXPlaybackEngineObserver*>( iTaskQueue->Callback() ));
- callback->HandleMedia( aMedia, aError );
- }
-
MPX_DEBUG1("CMPXPlaybackMediaHelper::HandleCollectionMediaL complete task");
iTaskQueue->CompleteTask();
}