46 |
49 |
47 /*! |
50 /*! |
48 \internal |
51 \internal |
49 */ |
52 */ |
50 MpMpxPlaybackFrameworkWrapperPrivate::MpMpxPlaybackFrameworkWrapperPrivate( MpMpxPlaybackFrameworkWrapper *qq) |
53 MpMpxPlaybackFrameworkWrapperPrivate::MpMpxPlaybackFrameworkWrapperPrivate( MpMpxPlaybackFrameworkWrapper *qq) |
51 : q_ptr( qq ), |
54 : q_ptr(qq), |
52 iPlaybackUtility( 0 ), |
55 iPlaybackUtility(0), |
53 iMedia( 0 ), |
56 iPlaybackData(0), |
54 iPlaybackData( 0 ) |
57 iDetailsRequest(false) |
55 { |
58 { |
56 TX_LOG |
59 TX_LOG |
57 } |
60 } |
58 |
61 |
59 /*! |
62 /*! |
60 \internal |
63 \internal |
61 */ |
64 */ |
62 MpMpxPlaybackFrameworkWrapperPrivate::~MpMpxPlaybackFrameworkWrapperPrivate() |
65 MpMpxPlaybackFrameworkWrapperPrivate::~MpMpxPlaybackFrameworkWrapperPrivate() |
63 { |
66 { |
64 TX_ENTRY |
67 TX_ENTRY |
65 |
|
66 if ( iPlaybackUtility ) { |
68 if ( iPlaybackUtility ) { |
67 TRAP_IGNORE( ForceStopL() ); |
69 TRAP_IGNORE( ForceStopL() ); |
68 TRAP_IGNORE( iPlaybackUtility->RemoveObserverL(*this) ); |
70 TRAP_IGNORE( iPlaybackUtility->RemoveObserverL(*this) ); |
69 iPlaybackUtility->Close(); |
71 iPlaybackUtility->Close(); |
70 } |
72 } |
71 |
|
72 delete iMedia; |
|
73 delete iPlaybackData; |
73 delete iPlaybackData; |
74 |
74 TX_EXIT |
75 TX_EXIT |
75 } |
76 } |
76 |
77 |
77 /*! |
78 /*! |
78 \internal |
79 \internal |
79 */ |
80 */ |
80 void MpMpxPlaybackFrameworkWrapperPrivate::init( TUid hostUid, MpSongData *songData ) |
81 void MpMpxPlaybackFrameworkWrapperPrivate::init( TUid hostUid ) |
81 { |
82 { |
82 TX_ENTRY |
83 mHostUid = hostUid; |
83 iHostUid = hostUid; |
|
84 iSongData = songData; |
84 TRAPD(err, DoInitL()); |
85 TRAPD(err, DoInitL()); |
85 if ( err != KErrNone ) { |
86 if ( err != KErrNone ) { |
86 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
87 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
87 } |
88 } |
|
89 TX_EXIT |
88 } |
90 } |
89 |
91 |
90 /*! |
92 /*! |
91 \internal |
93 \internal |
92 */ |
94 */ |
278 } |
307 } |
279 |
308 |
280 /*! |
309 /*! |
281 \internal |
310 \internal |
282 */ |
311 */ |
|
312 void MpMpxPlaybackFrameworkWrapperPrivate::getMaxVolume() |
|
313 { |
|
314 TX_ENTRY |
|
315 TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyMaxVolume ) ); |
|
316 if ( err != KErrNone ) { |
|
317 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
318 } |
|
319 TX_EXIT |
|
320 } |
|
321 |
|
322 /*! |
|
323 \internal |
|
324 */ |
|
325 void MpMpxPlaybackFrameworkWrapperPrivate::getVolume() |
|
326 { |
|
327 TX_ENTRY |
|
328 TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyVolume ) ); |
|
329 if ( err != KErrNone ) { |
|
330 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
331 } |
|
332 TX_EXIT |
|
333 } |
|
334 |
|
335 /*! |
|
336 \internal |
|
337 */ |
|
338 void MpMpxPlaybackFrameworkWrapperPrivate::increaseVolume() |
|
339 { |
|
340 TX_ENTRY |
|
341 TRAPD( err, iPlaybackUtility->CommandL( EPbCmdIncreaseVolume ) ); |
|
342 if ( err != KErrNone ) { |
|
343 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
344 } |
|
345 TX_EXIT |
|
346 } |
|
347 |
|
348 /*! |
|
349 \internal |
|
350 */ |
|
351 void MpMpxPlaybackFrameworkWrapperPrivate::decreaseVolume() |
|
352 { |
|
353 TX_ENTRY |
|
354 TRAPD( err, iPlaybackUtility->CommandL( EPbCmdDecreaseVolume ) ); |
|
355 if ( err != KErrNone ) { |
|
356 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
357 } |
|
358 TX_EXIT |
|
359 } |
|
360 |
|
361 /*! |
|
362 \internal |
|
363 */ |
|
364 void MpMpxPlaybackFrameworkWrapperPrivate::setVolume( int value ) |
|
365 { |
|
366 TX_ENTRY |
|
367 TRAPD( err, iPlaybackUtility->CommandL( EPbCmdSetVolume, value ) ); |
|
368 if ( err != KErrNone ) { |
|
369 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
370 } |
|
371 TX_EXIT |
|
372 } |
|
373 |
|
374 /*! |
|
375 \internal |
|
376 */ |
|
377 void MpMpxPlaybackFrameworkWrapperPrivate::getMuteState() |
|
378 { |
|
379 TX_ENTRY |
|
380 TRAPD( err, iPlaybackUtility->PropertyL( *this, EPbPropertyMute ) ); |
|
381 if ( err != KErrNone ) { |
|
382 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
383 } |
|
384 TX_EXIT |
|
385 } |
|
386 |
|
387 /*! |
|
388 \internal |
|
389 */ |
|
390 void MpMpxPlaybackFrameworkWrapperPrivate::mute() |
|
391 { |
|
392 TX_ENTRY |
|
393 TRAPD( err, iPlaybackUtility->CommandL( EPbCmdMuteVolume ) ); |
|
394 if ( err != KErrNone ) { |
|
395 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
396 } |
|
397 TX_EXIT |
|
398 } |
|
399 |
|
400 /*! |
|
401 \internal |
|
402 */ |
|
403 void MpMpxPlaybackFrameworkWrapperPrivate::unmute() |
|
404 { |
|
405 TX_ENTRY |
|
406 TRAPD( err, iPlaybackUtility->CommandL( EPbCmdUnMuteVolume ) ); |
|
407 if ( err != KErrNone ) { |
|
408 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
409 } |
|
410 TX_EXIT |
|
411 } |
|
412 |
|
413 /*! |
|
414 \ Closes current playback source. |
|
415 */ |
|
416 void MpMpxPlaybackFrameworkWrapperPrivate::closeCurrentPlayback() |
|
417 { |
|
418 TX_ENTRY |
|
419 TRAPD( err, DoCloseCurrentPlaybackL() ); |
|
420 if ( err != KErrNone ) { |
|
421 TX_LOG_ARGS("Error: " << err << "; should never get here."); |
|
422 } |
|
423 TX_EXIT |
|
424 } |
|
425 |
|
426 /*! |
|
427 \internal |
|
428 */ |
283 MpPlaybackData *MpMpxPlaybackFrameworkWrapperPrivate::playbackData() |
429 MpPlaybackData *MpMpxPlaybackFrameworkWrapperPrivate::playbackData() |
284 { |
430 { |
285 return iPlaybackData; |
431 return iPlaybackData; |
|
432 } |
|
433 |
|
434 /*! |
|
435 \internal |
|
436 */ |
|
437 void MpMpxPlaybackFrameworkWrapperPrivate::retrieveSongDetails() |
|
438 { |
|
439 TX_ENTRY |
|
440 TRAPD( err, DoRetrieveSongDetailsL(true) ); |
|
441 if ( err == KErrNone ) { |
|
442 iDetailsRequest = true; |
|
443 } |
|
444 else { |
|
445 TX_LOG_ARGS( "Error: " << err << "; should never get here." ); |
|
446 } |
|
447 TX_EXIT |
286 } |
448 } |
287 |
449 |
288 /*! |
450 /*! |
289 \internal |
451 \internal |
290 */ |
452 */ |
341 |
515 |
342 /*! |
516 /*! |
343 \internal |
517 \internal |
344 */ |
518 */ |
345 void MpMpxPlaybackFrameworkWrapperPrivate::HandleMediaL( |
519 void MpMpxPlaybackFrameworkWrapperPrivate::HandleMediaL( |
346 const CMPXMedia& aProperties, |
520 const CMPXMedia& aMedia, |
347 TInt aError ) |
521 TInt aError ) |
348 { |
522 { |
349 TX_ENTRY_ARGS("aError=" << aError); |
523 TX_ENTRY |
350 if ( KErrNone != aError || !iPlaybackData ) { |
524 if ( KErrNone != aError ){ |
|
525 TX_LOG_ARGS( "Error: " << aError << "; should never get here." ); |
351 TX_EXIT |
526 TX_EXIT |
352 return; |
527 return; |
353 } |
528 } |
354 |
529 |
355 if ( iMedia ) { |
530 if ( iDetailsRequest ) { |
356 delete iMedia; |
531 iDetailsRequest = false; |
357 iMedia = NULL; |
532 iSongData->setMpxMedia( aMedia ); |
358 } |
|
359 iMedia = CMPXMedia::NewL( aProperties ); |
|
360 |
|
361 bool changed = false; |
|
362 if ( aProperties.IsSupported( KMPXMediaGeneralTitle ) ) { |
|
363 changed |= iPlaybackData->setTitle( |
|
364 QString::fromUtf16( |
|
365 aProperties.ValueText( KMPXMediaGeneralTitle ).Ptr(), |
|
366 aProperties.ValueText( KMPXMediaGeneralTitle ).Length() ) ); |
|
367 } |
533 } |
368 else { |
534 else { |
369 changed |= iPlaybackData->setTitle( |
535 bool changed = false; |
370 QString::fromUtf16( |
536 if ( aMedia.IsSupported( KMPXMediaGeneralTitle ) ) { |
371 aProperties.ValueText( KMPXMediaGeneralUri ).Ptr(), |
537 changed |= iPlaybackData->setTitle( |
372 aProperties.ValueText( KMPXMediaGeneralUri ).Length() ) ); |
538 QString::fromUtf16( |
373 } |
539 aMedia.ValueText( KMPXMediaGeneralTitle ).Ptr(), |
374 |
540 aMedia.ValueText( KMPXMediaGeneralTitle ).Length() ) ); |
375 if ( aProperties.IsSupported( KMPXMediaMusicArtist ) ) { |
541 } |
376 changed |= iPlaybackData->setArtist( |
542 else { |
377 QString::fromUtf16( |
543 changed |= iPlaybackData->setTitle( |
378 aProperties.ValueText( KMPXMediaMusicArtist ).Ptr(), |
544 QString::fromUtf16( |
379 aProperties.ValueText( KMPXMediaMusicArtist ).Length() ) ); |
545 aMedia.ValueText( KMPXMediaGeneralUri ).Ptr(), |
380 } |
546 aMedia.ValueText( KMPXMediaGeneralUri ).Length() ) ); |
381 else { |
547 } |
382 changed |= iPlaybackData->setArtist(QString()); |
548 |
383 } |
549 if ( aMedia.IsSupported( KMPXMediaMusicArtist ) ) { |
384 if ( aProperties.IsSupported( KMPXMediaMusicAlbum ) ) { |
550 changed |= iPlaybackData->setArtist( |
385 changed |= iPlaybackData->setAlbum( |
551 QString::fromUtf16( |
386 QString::fromUtf16( |
552 aMedia.ValueText( KMPXMediaMusicArtist ).Ptr(), |
387 aProperties.ValueText( KMPXMediaMusicAlbum ).Ptr(), |
553 aMedia.ValueText( KMPXMediaMusicArtist ).Length() ) ); |
388 aProperties.ValueText( KMPXMediaMusicAlbum ).Length() ) ); |
554 } |
389 } |
555 else { |
390 else { |
556 changed |= iPlaybackData->setArtist(QString()); |
391 changed |= iPlaybackData->setAlbum(QString()); |
557 } |
392 } |
558 if ( aMedia.IsSupported( KMPXMediaMusicAlbum ) ) { |
393 if (aProperties.IsSupported(TMPXAttribute(KMPXMediaGeneralMimeType))) { |
559 changed |= iPlaybackData->setAlbum( |
394 |
560 QString::fromUtf16( |
395 const TDesC& mimeType = aProperties.ValueText ( KMPXMediaGeneralMimeType ); |
561 aMedia.ValueText( KMPXMediaMusicAlbum ).Ptr(), |
396 |
562 aMedia.ValueText( KMPXMediaMusicAlbum ).Length() ) ); |
397 bool realAudioMode = |
563 } |
398 ( mimeType.Compare( KMPXPnRealAudioMimeType ) == 0 ) || |
564 else { |
399 ( mimeType.Compare( KMPXRealAudioMimeType ) == 0) || |
565 changed |= iPlaybackData->setAlbum(QString()); |
400 ( mimeType.Compare( KMPXRnRealAudioMimeType ) == 0 ); |
566 } |
401 |
567 if (aMedia.IsSupported(TMPXAttribute(KMPXMediaGeneralMimeType))) { |
402 changed |= iPlaybackData->setRealAudio( realAudioMode ); |
568 |
403 } |
569 const TDesC& mimeType = aMedia.ValueText ( KMPXMediaGeneralMimeType ); |
404 |
570 |
405 |
571 bool realAudioMode = |
406 if ( aProperties.IsSupported( KMPXMediaGeneralUri) ) { |
572 ( mimeType.Compare( KMPXPnRealAudioMimeType ) == 0 ) || |
407 iPlaybackData->setUri( |
573 ( mimeType.Compare( KMPXRealAudioMimeType ) == 0) || |
408 QString::fromUtf16( |
574 ( mimeType.Compare( KMPXRnRealAudioMimeType ) == 0 ); |
409 aProperties.ValueText( KMPXMediaGeneralUri ).Ptr(), |
575 |
410 aProperties.ValueText( KMPXMediaGeneralUri ).Length() ) ); |
576 changed |= iPlaybackData->setRealAudio( realAudioMode ); |
411 } |
577 } |
412 if (aProperties.IsSupported(TMPXAttribute(KMPXMediaMusicAlbumArtFileName))) { |
578 |
413 iPlaybackData->setAlbumArtUri( |
579 if ( aMedia.IsSupported( KMPXMediaGeneralUri) ) { |
414 QString::fromUtf16( |
580 iPlaybackData->setUri( |
415 aProperties.ValueText(KMPXMediaMusicAlbumArtFileName).Ptr(), |
581 QString::fromUtf16( |
416 aProperties.ValueText(KMPXMediaMusicAlbumArtFileName).Length())); |
582 aMedia.ValueText( KMPXMediaGeneralUri ).Ptr(), |
417 } |
583 aMedia.ValueText( KMPXMediaGeneralUri ).Length() ) ); |
418 else { |
584 } |
419 iPlaybackData->setAlbumArtUri( |
585 if (aMedia.IsSupported(TMPXAttribute(KMPXMediaMusicAlbumArtFileName))) { |
420 QString::fromUtf16( |
586 iPlaybackData->setAlbumArtUri( |
421 aProperties.ValueText( KMPXMediaGeneralUri ).Ptr(), |
587 QString::fromUtf16( |
422 aProperties.ValueText( KMPXMediaGeneralUri ).Length() ) ); |
588 aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Ptr(), |
423 } |
589 aMedia.ValueText(KMPXMediaMusicAlbumArtFileName).Length())); |
424 if ( aProperties.IsSupported( KMPXMediaMusicAlbumId) ) { |
590 } |
425 changed |= iPlaybackData->setAlbumId( |
591 else { |
426 aProperties.ValueTObjectL<TInt>( KMPXMediaMusicAlbumId ) ); |
592 iPlaybackData->setAlbumArtUri( |
427 } |
593 QString::fromUtf16( |
428 |
594 aMedia.ValueText( KMPXMediaGeneralUri ).Ptr(), |
429 if ( aProperties.IsSupported( KMPXMediaGeneralId) ) { |
595 aMedia.ValueText( KMPXMediaGeneralUri ).Length() ) ); |
430 changed |= iPlaybackData->setId( |
596 } |
431 aProperties.ValueTObjectL<TInt>( KMPXMediaGeneralId ) ); |
597 if ( aMedia.IsSupported( KMPXMediaMusicAlbumId) ) { |
432 } |
598 changed |= iPlaybackData->setAlbumId( |
433 |
599 aMedia.ValueTObjectL<TMPXItemId>( KMPXMediaMusicAlbumId ) ); |
434 if ( changed ) { |
600 } |
435 // This is required to propagate the playback info to UI at once. |
601 |
436 iPlaybackData->commitPlaybackInfo(); |
602 if ( aMedia.IsSupported( KMPXMediaGeneralId ) ) { |
|
603 changed |= iPlaybackData->setId( |
|
604 aMedia.ValueTObjectL<TInt>( KMPXMediaGeneralId ) ); |
|
605 } |
|
606 |
|
607 if ( changed ) { |
|
608 // This is required to propagate the playback info to UI at once. |
|
609 iPlaybackData->commitPlaybackInfo(); |
|
610 } |
437 } |
611 } |
438 TX_EXIT |
612 TX_EXIT |
439 } |
613 } |
440 |
614 |
441 /*! |
615 /*! |
442 \internal |
616 \internal |
443 */ |
617 */ |
444 void MpMpxPlaybackFrameworkWrapperPrivate::DoInitL() |
618 void MpMpxPlaybackFrameworkWrapperPrivate::DoInitL() |
445 { |
619 { |
446 TX_ENTRY |
620 TX_ENTRY |
447 iPlaybackUtility = MMPXPlaybackUtility::UtilityL( mHostUid ); |
621 iPlaybackUtility = MMPXPlaybackUtility::UtilityL( iHostUid ); |
448 iPlaybackUtility->AddObserverL( *this ); |
622 iPlaybackUtility->AddObserverL( *this ); |
449 iPlaybackData = new MpPlaybackData(); |
623 iPlaybackData = new MpPlaybackData(); |
450 |
624 |
451 UpdateStateL(); |
625 UpdateStateL(); |
452 if ( iPlaybackUtility->Source() ) { |
626 if ( iPlaybackUtility->Source() ) { |
453 RetrieveSongDetailsL(); |
627 DoRetrieveSongDetailsL(false); |
454 } |
628 } |
455 TX_EXIT |
629 TX_EXIT |
456 } |
630 } |
457 |
631 |
458 /*! |
632 /*! |
604 } |
779 } |
605 |
780 |
606 /*! |
781 /*! |
607 \internal |
782 \internal |
608 */ |
783 */ |
609 void MpMpxPlaybackFrameworkWrapperPrivate::RetrieveSongDetailsL() |
784 void MpMpxPlaybackFrameworkWrapperPrivate::DoRetrieveSongDetailsL( bool detailsRequest ) |
610 { |
785 { |
611 TX_ENTRY |
786 TX_ENTRY |
612 MMPXSource *mediaSrc = iPlaybackUtility->Source(); |
787 MMPXSource *mediaSrc = iPlaybackUtility->Source(); |
613 User::LeaveIfNull( mediaSrc ); |
788 User::LeaveIfNull( mediaSrc ); |
614 RArray<TMPXAttribute> requestedAttr; |
789 RArray<TMPXAttribute> requestedAttr; |
615 CleanupClosePushL( requestedAttr ); |
790 CleanupClosePushL( requestedAttr ); |
|
791 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralId ) ); |
616 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralTitle ) ); |
792 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralTitle ) ); |
617 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicArtist ) ); |
793 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicArtist ) ); |
618 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbum ) ); |
794 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbum ) ); |
|
795 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumId ) ); |
619 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralUri ) ); |
796 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralUri ) ); |
620 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumArtFileName ) ); |
797 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumArtFileName ) ); |
621 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumId ) ); |
798 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralMimeType ) ); |
622 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralMimeType ) ); |
799 if ( detailsRequest ) { |
623 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralId ) ); |
800 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumTrack ) ); |
624 |
801 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicComposer ) ); |
625 |
802 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicYear ) ); |
|
803 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicGenre ) ); |
|
804 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralDuration ) ); |
|
805 requestedAttr.AppendL( TMPXAttribute( KMPXMediaAudioBitrate ) ); |
|
806 requestedAttr.AppendL( TMPXAttribute( KMPXMediaAudioSamplerate ) ); |
|
807 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralCopyright ) ); |
|
808 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicURL ) ); |
|
809 requestedAttr.AppendL( TMPXAttribute( KMPXMediaDrmProtected ) ); |
|
810 } |
626 mediaSrc->MediaL( requestedAttr.Array(), *this ); |
811 mediaSrc->MediaL( requestedAttr.Array(), *this ); |
627 CleanupStack::PopAndDestroy( &requestedAttr ); |
812 CleanupStack::PopAndDestroy( &requestedAttr ); |
628 TX_EXIT |
813 TX_EXIT |
629 } |
814 } |
630 |
815 |
|
816 /*! |
|
817 \internal |
|
818 */ |
|
819 void MpMpxPlaybackFrameworkWrapperPrivate::DoCloseCurrentPlaybackL() |
|
820 { |
|
821 TX_ENTRY |
|
822 if( iPlaybackUtility->Source() ) { |
|
823 iPlaybackUtility->CommandL( EPbCmdClose ); |
|
824 } |
|
825 TX_EXIT |
|
826 } |
|
827 |