mpengine/src/mpengine.cpp
changeset 47 4cc1412daed0
parent 45 612c4815aebe
child 51 560ce2306a17
equal deleted inserted replaced
45:612c4815aebe 47:4cc1412daed0
    22 #include "mpmpxharvesterframeworkwrapper.h"
    22 #include "mpmpxharvesterframeworkwrapper.h"
    23 #include "mpmpxcollectionframeworkwrapper.h"
    23 #include "mpmpxcollectionframeworkwrapper.h"
    24 #include "mpmpxplaybackframeworkwrapper.h"
    24 #include "mpmpxplaybackframeworkwrapper.h"
    25 #include "mpaudioeffectsframeworkwrapper.h"
    25 #include "mpaudioeffectsframeworkwrapper.h"
    26 #include "mpequalizerframeworkwrapper.h"
    26 #include "mpequalizerframeworkwrapper.h"
    27 #include "mpmediakeyhandler.h"
       
    28 #include "mptrace.h"
    27 #include "mptrace.h"
    29 #include "mpsettingsmanager.h"
    28 #include "mpsettingsmanager.h"
    30 #include "mpsongscanner.h"
    29 #include "mpsongscanner.h"
    31 #include "mpsongdata.h"
    30 #include "mpsongdata.h"
    32 
    31 
   175     container.
   174     container.
   176 
   175 
   177  */
   176  */
   178 
   177 
   179 /*!
   178 /*!
       
   179 -------------------------------------------------------------------------------
       
   180     Playback related signals
       
   181 -------------------------------------------------------------------------------
       
   182 */
       
   183 
       
   184 /*!
       
   185     \fn void volumePropertyChanged( MpCommon::MpVolumeProperty, int value );
       
   186 
       
   187     This signal is emitted when framework receives a volume related property notification,
       
   188     such as EPbPropertyVolume, EPbPropertyMaxVolume, EPbPropertyMute.
       
   189  */
       
   190 
       
   191 
       
   192 /*!
   180  Constructs music player engine.
   193  Constructs music player engine.
   181  */
   194  */
   182 MpEngine::MpEngine()
   195 MpEngine::MpEngine()
   183     : mMpxHarvesterWrapper(0),
   196     : mMpxHarvesterWrapper(0),
   184       mSongScanner(0),
   197       mSongScanner(0),
   185       mMediaKeyHandler(0),
       
   186       mMpxCollectionWrapper(0),
   198       mMpxCollectionWrapper(0),
   187       mMpxPlaybackWrapper(0),
   199       mMpxPlaybackWrapper(0),
   188       mAudioEffectsWrapper(0),
   200       mAudioEffectsWrapper(0),
   189       mEqualizerWrapper(0),
   201       mEqualizerWrapper(0),
   190       mCurrentPresetIndex(KEqualizerPresetNone),
   202       mCurrentPresetIndex(KEqualizerPresetNone),
   191       mSongData(0),
   203       mSongData(0),
   192       mUsbBlockingState(USB_NotConnected),
   204       mUsbBlockingState(USB_NotConnected),
   193       mPreviousUsbState(USB_NotConnected)
   205       mPreviousUsbState(USB_NotConnected),
       
   206       mHandleMediaCommands(true)
   194 {
   207 {
   195     TX_LOG
   208     TX_LOG
   196 }
   209 }
   197 
   210 
   198 /*!
   211 /*!
   199  Destructs music player engine.
   212  Destructs music player engine.
   200  */
   213  */
   201 MpEngine::~MpEngine()
   214 MpEngine::~MpEngine()
   202 {
   215 {
   203     TX_ENTRY
   216     TX_ENTRY
   204     delete mMediaKeyHandler;
       
   205     delete mMpxPlaybackWrapper;
   217     delete mMpxPlaybackWrapper;
   206     delete mMpxHarvesterWrapper;
   218     delete mMpxHarvesterWrapper;
   207     delete mMpxCollectionWrapper;
   219     delete mMpxCollectionWrapper;
   208     delete mAudioEffectsWrapper;
   220     delete mAudioEffectsWrapper;
   209     delete mEqualizerWrapper;
   221     delete mEqualizerWrapper;
   217  */
   229  */
   218 void MpEngine::initialize( TUid hostUid, EngineMode mode )
   230 void MpEngine::initialize( TUid hostUid, EngineMode mode )
   219 {
   231 {
   220     TX_ENTRY_ARGS("hostUid=" << hostUid.iUid << ", mode=" << mode);
   232     TX_ENTRY_ARGS("hostUid=" << hostUid.iUid << ", mode=" << mode);
   221     mHostUid = hostUid;
   233     mHostUid = hostUid;
   222     mMediaKeyHandler = new MpMediaKeyHandler();
       
   223 
   234 
   224     if ( StandAlone == mode ) {
   235     if ( StandAlone == mode ) {
   225         mSongData = new MpSongData();
   236         mSongData = new MpSongData();
   226 
   237 
   227         // Harvesting Wrapper
   238         // Harvesting Wrapper
   274                  this, SLOT( handleEqualizerReady() ), 
   285                  this, SLOT( handleEqualizerReady() ), 
   275 				 Qt::QueuedConnection );
   286 				 Qt::QueuedConnection );
   276 
   287 
   277         // Playback Wrapper
   288         // Playback Wrapper
   278         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
   289         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
   279         connect( this, SIGNAL( libraryAboutToUpdate() ),
   290         connect( this, SIGNAL( libraryUpdated() ),
   280                  mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
   291                  mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
       
   292         connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
       
   293                  this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
   281 
   294 
   282         // AudioEffects wrapper
   295         // AudioEffects wrapper
   283         mAudioEffectsWrapper = new MpAudioEffectsFrameworkWrapper();
   296         mAudioEffectsWrapper = new MpAudioEffectsFrameworkWrapper();
   284     }
   297     }
   285     else if ( Fetch == mode ) {
   298     else if ( Fetch == mode ) {
   309         mMpxCollectionWrapper->setRepeatFeatureEnabled( false );
   322         mMpxCollectionWrapper->setRepeatFeatureEnabled( false );
   310         mMpxCollectionWrapper->setShuffleFeatureEnabled( false );
   323         mMpxCollectionWrapper->setShuffleFeatureEnabled( false );
   311 
   324 
   312         // Playback Wrapper
   325         // Playback Wrapper
   313         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, 0 );
   326         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, 0 );
   314         connect( this, SIGNAL( libraryAboutToUpdate() ),
   327         connect( this, SIGNAL( libraryUpdated() ),
   315                  mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
   328                  mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
       
   329         connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
       
   330                  this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
       
   331 
   316     }
   332     }
   317     else if ( MediaBrowsing == mode ) {
   333     else if ( MediaBrowsing == mode ) {
   318         // Collection Wrapper
   334         // Collection Wrapper
   319         mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mHostUid, 0 );
   335         mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mHostUid, 0 );
   320         connect( mMpxCollectionWrapper, SIGNAL( collectionPlaylistOpened() ),
   336         connect( mMpxCollectionWrapper, SIGNAL( collectionPlaylistOpened() ),
   326     }
   342     }
   327     else if ( Embedded == mode ) {
   343     else if ( Embedded == mode ) {
   328         mSongData = new MpSongData();
   344         mSongData = new MpSongData();
   329         // Playback Wrapper
   345         // Playback Wrapper
   330         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
   346         mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
       
   347         connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
       
   348                  this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
       
   349 
   331     }
   350     }
   332     TX_EXIT
   351     TX_EXIT
   333 }
   352 }
   334 
   353 
   335 /*!
   354 /*!
   396 /*!
   415 /*!
   397  Slot to be called when song scanning starts.
   416  Slot to be called when song scanning starts.
   398  */
   417  */
   399 void MpEngine::handleScanStarted() {
   418 void MpEngine::handleScanStarted() {
   400     TX_ENTRY
   419     TX_ENTRY
   401     mMediaKeyHandler->setEnabled(false);
   420     mHandleMediaCommands = false;
   402     TX_EXIT
   421     TX_EXIT
   403 }
   422 }
   404 
   423 
   405 /*!
   424 /*!
   406  Slot to be called when song scanning ends.
   425  Slot to be called when song scanning ends.
   407  */
   426  */
   408 void MpEngine::handleScanEnded( int count, int error ) {
   427 void MpEngine::handleScanEnded( int count, int error ) {
   409     TX_ENTRY
   428     TX_ENTRY
   410     Q_UNUSED( count );
   429     Q_UNUSED( count );
   411     Q_UNUSED( error );
   430     Q_UNUSED( error );
   412     mMediaKeyHandler->setEnabled(true);
   431     mHandleMediaCommands = true;
   413     emit libraryUpdated();
   432     emit libraryUpdated();
   414     TX_EXIT
   433     TX_EXIT
   415 }
   434 }
   416 
   435 
   417 /*!
   436 /*!
   420 void MpEngine::handleDiskEvent( MpxDiskEvents event )
   439 void MpEngine::handleDiskEvent( MpxDiskEvents event )
   421 {
   440 {
   422     TX_ENTRY_ARGS("event=" << event);
   441     TX_ENTRY_ARGS("event=" << event);
   423     switch ( event ) {
   442     switch ( event ) {
   424         case DiskFormatStarted:
   443         case DiskFormatStarted:
   425             mMediaKeyHandler->setEnabled(false);
   444             mHandleMediaCommands = false;
   426             break;
   445             break;
   427         case DiskFormatEnded:
   446         case DiskFormatEnded:
   428             mMediaKeyHandler->setEnabled(true);
   447             mHandleMediaCommands = true;
   429             break;
   448             break;
   430         case DiskRemoved:
   449         case DiskRemoved:
   431             if ( mUsbBlockingState != USB_Synchronizing ) {
   450             if ( mUsbBlockingState != USB_Synchronizing ) {
   432                 emit libraryUpdated();
   451                 emit libraryUpdated();
   433             }
   452             }
   477  To be called when EMcMsgUSBMassStorageStart event is received.
   496  To be called when EMcMsgUSBMassStorageStart event is received.
   478  */
   497  */
   479 void MpEngine::handleUsbMassStorageStartEvent()
   498 void MpEngine::handleUsbMassStorageStartEvent()
   480 {
   499 {
   481     TX_ENTRY
   500     TX_ENTRY
   482     mMediaKeyHandler->setEnabled(false);
   501     mHandleMediaCommands = false;
   483 
   502 
   484     changeUsbBlockingState( USB_Synchronizing );
   503     changeUsbBlockingState( USB_Synchronizing );
   485     emit usbBlocked(true);
   504     emit usbBlocked(true);
   486     emit usbSynchronizationStarted();
   505     emit usbSynchronizationStarted();
   487 
   506 
   492  To be called when EMcMsgUSBMassStorageEnd event is received.
   511  To be called when EMcMsgUSBMassStorageEnd event is received.
   493  */
   512  */
   494 void MpEngine::handleUsbMassStorageEndEvent()
   513 void MpEngine::handleUsbMassStorageEndEvent()
   495 {
   514 {
   496     TX_ENTRY
   515     TX_ENTRY
   497     mMediaKeyHandler->setEnabled(true);
   516     mHandleMediaCommands = true;
   498 
   517 
   499     changeUsbBlockingState( USB_NotConnected );
   518     changeUsbBlockingState( USB_NotConnected );
   500     emit usbBlocked(false);
   519     emit usbBlocked(false);
   501     emit usbSynchronizationFinished();
   520     emit usbSynchronizationFinished();
   502     refreshLibrary();
   521     refreshLibrary();
   508  To be called when EMcMsgUSBMTPStart event is received.
   527  To be called when EMcMsgUSBMTPStart event is received.
   509  */
   528  */
   510 void MpEngine::handleUsbMtpStartEvent()
   529 void MpEngine::handleUsbMtpStartEvent()
   511 {
   530 {
   512     TX_ENTRY
   531     TX_ENTRY
   513     mMediaKeyHandler->setEnabled(false);
   532     mHandleMediaCommands = false;
   514     
   533     
   515     changeUsbBlockingState( USB_Synchronizing );
   534     changeUsbBlockingState( USB_Synchronizing );
   516     emit usbBlocked(true);
   535     emit usbBlocked(true);
   517     
   536     
   518     //Cancel any ongoing operation.
   537     //Cancel any ongoing operation.
   527  To be called when EMcMsgUSBMTPEnd event is received.
   546  To be called when EMcMsgUSBMTPEnd event is received.
   528  */
   547  */
   529 void MpEngine::handleUsbMtpEndEvent()
   548 void MpEngine::handleUsbMtpEndEvent()
   530 {
   549 {
   531     TX_ENTRY
   550     TX_ENTRY
   532     mMediaKeyHandler->setEnabled(true);
   551     mHandleMediaCommands = true;
   533 
   552 
   534     changeUsbBlockingState( USB_NotConnected );
   553     changeUsbBlockingState( USB_NotConnected );
   535     emit usbBlocked(false);
   554     emit usbBlocked(false);
   536 
   555 
   537     if ( mPreviousUsbState == USB_Synchronizing ) {
   556     if ( mPreviousUsbState == USB_Synchronizing ) {
   747  Slot to be called when song deleting starts.
   766  Slot to be called when song deleting starts.
   748  */
   767  */
   749 void MpEngine::handleDeleteStarted( TCollectionContext context, int count )
   768 void MpEngine::handleDeleteStarted( TCollectionContext context, int count )
   750 {
   769 {
   751     TX_ENTRY
   770     TX_ENTRY
   752     mMediaKeyHandler->setEnabled( false );
   771     mHandleMediaCommands = false;
   753     emit deleteStarted( context, count );
   772     emit deleteStarted( context, count );
   754     TX_EXIT
   773     TX_EXIT
   755 }
   774 }
   756 
   775 
   757 /*!
   776 /*!
   758  Slot to be called when song deleting ends.
   777  Slot to be called when song deleting ends.
   759  */
   778  */
   760 void MpEngine::handleDeleteEnded( bool success )
   779 void MpEngine::handleDeleteEnded( bool success )
   761 {
   780 {
   762     TX_ENTRY
   781     TX_ENTRY
   763     mMediaKeyHandler->setEnabled(true);
   782     mHandleMediaCommands = true;
   764     emit songsDeleted( success );
   783     emit songsDeleted( success );
   765     TX_EXIT
   784     TX_EXIT
   766 }
   785 }
   767 
   786 
   768 /*!
   787 /*!
   806 
   825 
   807 void MpEngine::playEmbedded(const XQSharableFile& file )
   826 void MpEngine::playEmbedded(const XQSharableFile& file )
   808 {
   827 {
   809     mMpxPlaybackWrapper->play( file );
   828     mMpxPlaybackWrapper->play( file );
   810 }
   829 }
       
   830 
       
   831 /*!
       
   832  Slot to handle a play command
       
   833  */
       
   834 
       
   835 void MpEngine::play()
       
   836 {
       
   837     if ( mHandleMediaCommands ) {
       
   838         mMpxPlaybackWrapper->play();
       
   839     }
       
   840 }
       
   841 
       
   842 /*!
       
   843  Slot to handle a pause command.
       
   844  */
       
   845 void MpEngine::pause()
       
   846 {
       
   847     if ( mHandleMediaCommands ) {
       
   848         mMpxPlaybackWrapper->pause();
       
   849     }
       
   850 }
       
   851 
   811 /*!
   852 /*!
   812  Slot to handle a play pause.
   853  Slot to handle a play pause.
   813  */
   854  */
   814 void MpEngine::playPause()
   855 void MpEngine::playPause()
   815 {
   856 {
   816     mMpxPlaybackWrapper->playPause();
   857     if ( mHandleMediaCommands ) {
       
   858         mMpxPlaybackWrapper->playPause();
       
   859     }
   817 }
   860 }
   818 
   861 
   819 /*!
   862 /*!
   820  Slot to handle a stop.
   863  Slot to handle a stop.
   821  */
   864  */
   822 void MpEngine::stop()
   865 void MpEngine::stop()
   823 {
   866 {
   824     mMpxPlaybackWrapper->stop();
   867     if ( mHandleMediaCommands ) {
       
   868         mMpxPlaybackWrapper->stop();
       
   869     }
   825 }
   870 }
   826 
   871 
   827 /*!
   872 /*!
   828  Slot to handle a skip forward.
   873  Slot to handle a skip forward.
   829  */
   874  */
   830 void MpEngine::skipForward()
   875 void MpEngine::skipForward()
   831 {
   876 {
   832     mMpxPlaybackWrapper->skipForward();
   877     if ( mHandleMediaCommands ) {
       
   878         mMpxPlaybackWrapper->skipForward();
       
   879     }
   833 }
   880 }
   834 
   881 
   835 /*!
   882 /*!
   836  Slot to handle  seek forward.
   883  Slot to handle  seek forward.
   837  */
   884  */
   838 void MpEngine::startSeekForward()
   885 void MpEngine::startSeekForward()
   839 {
   886 {
   840     mMpxPlaybackWrapper->startSeekForward();
   887     if ( mHandleMediaCommands ) {
       
   888         mMpxPlaybackWrapper->startSeekForward();
       
   889     }
   841 }
   890 }
   842 
   891 
   843 /*!
   892 /*!
   844  Slot to handle stop seeking.
   893  Slot to handle stop seeking.
   845  */
   894  */
   846 void MpEngine::stopSeeking()
   895 void MpEngine::stopSeeking()
   847 {
   896 {
   848     mMpxPlaybackWrapper->stopSeeking();
   897     if ( mHandleMediaCommands ) {
       
   898         mMpxPlaybackWrapper->stopSeeking();
       
   899     }
   849 }
   900 }
   850 
   901 
   851 /*!
   902 /*!
   852  Slot to handle a skip backwards.
   903  Slot to handle a skip backwards.
   853  */
   904  */
   854 void MpEngine::skipBackward()
   905 void MpEngine::skipBackward()
   855 {
   906 {
   856     mMpxPlaybackWrapper->skipBackward();
   907     if ( mHandleMediaCommands ) {
       
   908         mMpxPlaybackWrapper->skipBackward();
       
   909     }
   857 }
   910 }
   858 
   911 
   859 /*!
   912 /*!
   860  Slot to handle seek backwards.
   913  Slot to handle seek backwards.
   861  */
   914  */
   862 void MpEngine::startSeekBackward()
   915 void MpEngine::startSeekBackward()
   863 {
   916 {
   864     mMpxPlaybackWrapper->startSeekBackward();
   917     if ( mHandleMediaCommands ) {
       
   918         mMpxPlaybackWrapper->startSeekBackward();
       
   919     }
   865 }
   920 }
   866 /*!
   921 /*!
   867  Slot to handle a request to change \a position.
   922  Slot to handle a request to change \a position.
   868  */
   923  */
   869 void MpEngine::setPosition( int position )
   924 void MpEngine::setPosition( int position )
   883  Slot to handle a request to change repeat \a mode.
   938  Slot to handle a request to change repeat \a mode.
   884  */
   939  */
   885 void MpEngine::setRepeat( bool mode )
   940 void MpEngine::setRepeat( bool mode )
   886 {
   941 {
   887     mMpxPlaybackWrapper->setRepeat( mode );
   942     mMpxPlaybackWrapper->setRepeat( mode );
       
   943 }
       
   944 
       
   945 /*!
       
   946  Slot to handle a request to get the volume level Max.
       
   947  Response will be asynchronously sent through volumePropertyChanged() signal.
       
   948  */
       
   949 void MpEngine::getMaxVolume( )
       
   950 {
       
   951     mMpxPlaybackWrapper->getMaxVolume();
       
   952 }
       
   953 
       
   954 /*!
       
   955  Slot to handle a request to get the current volume level.
       
   956  Response will be asynchronously sent through volumePropertyChanged() signal.
       
   957  */
       
   958 void MpEngine::getVolume( )
       
   959 {
       
   960     mMpxPlaybackWrapper->getVolume();
       
   961 }
       
   962 
       
   963 /*!
       
   964  Slot to handle a request to increase volume.
       
   965  */
       
   966 void MpEngine::increaseVolume()
       
   967 {
       
   968     if ( mHandleMediaCommands ) {
       
   969         mMpxPlaybackWrapper->increaseVolume();
       
   970     }
       
   971 }
       
   972 
       
   973 /*!
       
   974  Slot to handle a request to decrease volume.
       
   975  */
       
   976 void MpEngine::decreaseVolume()
       
   977 {
       
   978     if ( mHandleMediaCommands ) {
       
   979         mMpxPlaybackWrapper->decreaseVolume();
       
   980     }
       
   981 }
       
   982 
       
   983 /*!
       
   984  Slot to handle a request to set the volume level.
       
   985  */
       
   986 void MpEngine::setVolume( int value )
       
   987 {
       
   988     if ( mHandleMediaCommands ) {
       
   989         mMpxPlaybackWrapper->setVolume( value );
       
   990     }
       
   991 }
       
   992 
       
   993 /*!
       
   994  Slot to handle a request to get the current mute state.
       
   995  Response will be asynchronously sent through volumePropertyChanged() signal.
       
   996  */
       
   997 void MpEngine::getMuteState( )
       
   998 {
       
   999     mMpxPlaybackWrapper->getMuteState();
       
  1000 }
       
  1001 
       
  1002 /*!
       
  1003  Slot to handle a request to mute.
       
  1004  */
       
  1005 void MpEngine::mute()
       
  1006 {
       
  1007     if ( mHandleMediaCommands ) {
       
  1008         mMpxPlaybackWrapper->mute();
       
  1009     }
       
  1010 }
       
  1011 
       
  1012 /*!
       
  1013  Slot to handle a request to unmute.
       
  1014  */
       
  1015 void MpEngine::unmute()
       
  1016 {
       
  1017     if ( mHandleMediaCommands ) {
       
  1018         mMpxPlaybackWrapper->unmute();
       
  1019     }
   888 }
  1020 }
   889 
  1021 
   890 /*!
  1022 /*!
   891  Returns pointer to MpSongData, which is the song data for Details View.
  1023  Returns pointer to MpSongData, which is the song data for Details View.
   892  */
  1024  */