mpx/playbackframework/playbackengine/src/mpxplaybackmediahelper.cpp
branchRCL_3
changeset 56 63223d4fd956
parent 55 6c1dfe4da5dd
--- 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();
     }