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 // ---------------------------------------------------------------------------- |