mpx/playbackframework/playbackengine/src/mpxplaybackmediahelper.cpp
branchRCL_3
changeset 56 63223d4fd956
parent 55 6c1dfe4da5dd
equal deleted inserted replaced
55:6c1dfe4da5dd 56:63223d4fd956
   241     const CMPXMedia& aMedia,
   241     const CMPXMedia& aMedia,
   242     TInt aError )
   242     TInt aError )
   243     {
   243     {
   244     MPX_FUNC_EX("CMPXPlaybackMediaHelper::HandleCollectionMediaL");
   244     MPX_FUNC_EX("CMPXPlaybackMediaHelper::HandleCollectionMediaL");
   245     MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL(): error %d", aError);
   245     MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL(): error %d", aError);
   246     MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task %d",
   246 
   247                iTaskQueue->Task());
   247     // First check if media attributes supported, if not, need to retrieve
   248                
   248     // from playback plugin
   249     if ( iTaskQueue->Param() )
   249     TBool mediaOk( ETrue );
   250         {
   250     // Note: The following block is for uPnP remote playlist which does not contain
   251         // Broadcast
   251     // metadata in the remote playlist. However, uPnP update to gurantee that titles
   252         CMPXMessage* msg( CMPXMessage::NewL() );
   252     // are available in the collection plugin. If KMPXMediaColDetailMediaNotAvailable
   253         CleanupStack::PushL( msg );
   253     // returned, UI can at least update title anyway anyway.
   254         msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId,
   254     //
   255                                               KMPXMessagePbMediaChanged );
   255     // We could not call MediaFromPluginL before the plugin initiliazed. uPnP made
   256         msg->SetCObjectValueL<CMPXMedia>( KMPXMessagePbMedia,
   256     // changes so that it will call back media after the new track is initialized.
   257                                           const_cast<CMPXMedia*>( &aMedia ));
   257     // So we don't need call plugin API MediaL.
   258         CMPXClientList* clientList(
   258     /*if ( KErrNone == aError )
   259             static_cast<CMPXClientList*>( iTaskQueue->Callback() ));
   259         { // media object is ok
   260         clientList->SendMsg(msg, KErrNone);
   260         if ( aMedia.IsSupported( KMPXMediaColDetailMediaNotAvailable ))
   261         CleanupStack::PopAndDestroy( msg );
   261             {
   262         }
   262             TBool mediaNotSupported(
   263     else
   263                     aMedia.ValueTObjectL<TBool>( KMPXMediaColDetailMediaNotAvailable ));
   264         {
   264             MPX_DEBUG2("HandleCollectionMediaL media not inCollection %d",
   265         // Callback
   265                         mediaNotSupported);
   266         MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task cb 0x%08x",
   266             if ( mediaNotSupported)
   267                    iTaskQueue->Callback());
   267                 { // It must be uPnP remote playlist, media request can only be
   268         MMPXPlaybackEngineObserver* callback(
   268                   // sent to plugin at initialising, playing & pause state
   269             static_cast<MMPXPlaybackEngineObserver*>( iTaskQueue->Callback() ));
   269                 mediaOk = EFalse;
   270         callback->HandleMedia( aMedia, aError );
   270                 // need to create a copy of buf since that will be delete when
   271         }
   271                 // this task is completed
   272         
   272                 const TDesC8& data( iTaskQueue->BufData() );
       
   273                 CBufBase* buf( MPXUser::CreateBufferLC( data.Size() ));
       
   274                 buf->Write( 0, data );
       
   275                 iEngine.MediaFromPluginL(
       
   276                          static_cast<MMPXPlaybackEngineObserver*>(
       
   277                                                     iTaskQueue->Callback() ),
       
   278                          buf );
       
   279                 CleanupStack::Pop( buf );
       
   280                 } //otherwise, just send uri to clients.
       
   281             }
       
   282         }*/
       
   283 
       
   284     if ( mediaOk || aError )
       
   285         {
       
   286         MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task %d",
       
   287                    iTaskQueue->Task());
       
   288 
       
   289         if ( iTaskQueue->Param() )
       
   290             {
       
   291             // Broadcast
       
   292             CMPXMessage* msg( CMPXMessage::NewL() );
       
   293             CleanupStack::PushL( msg );
       
   294             msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId,
       
   295                                                   KMPXMessagePbMediaChanged );
       
   296             msg->SetCObjectValueL<CMPXMedia>( KMPXMessagePbMedia,
       
   297                                               const_cast<CMPXMedia*>( &aMedia ));
       
   298             CMPXClientList* clientList(
       
   299                 static_cast<CMPXClientList*>( iTaskQueue->Callback() ));
       
   300             clientList->SendMsg(msg, KErrNone);
       
   301             CleanupStack::PopAndDestroy( msg );
       
   302             }
       
   303         else
       
   304             {
       
   305             // Callback
       
   306             MPX_DEBUG2("CMPXPlaybackMediaHelper::HandleCollectionMediaL task cb 0x%08x",
       
   307                        iTaskQueue->Callback());
       
   308             MMPXPlaybackEngineObserver* callback(
       
   309                 static_cast<MMPXPlaybackEngineObserver*>( iTaskQueue->Callback() ));
       
   310             callback->HandleMedia( aMedia, aError );
       
   311             }
       
   312         }
   273     MPX_DEBUG1("CMPXPlaybackMediaHelper::HandleCollectionMediaL complete task");
   313     MPX_DEBUG1("CMPXPlaybackMediaHelper::HandleCollectionMediaL complete task");
   274     iTaskQueue->CompleteTask();
   314     iTaskQueue->CompleteTask();
   275     }
   315     }
   276 
   316 
   277 // ----------------------------------------------------------------------------
   317 // ----------------------------------------------------------------------------