diff -r 3ec52facab4d -r 8192e5b5c935 mpengine/src/mpengine.cpp --- a/mpengine/src/mpengine.cpp Fri May 14 15:49:53 2010 +0300 +++ b/mpengine/src/mpengine.cpp Thu May 27 12:49:57 2010 +0300 @@ -22,14 +22,19 @@ #include #include #include +#include #include "mpengine.h" #include "mpmpxharvesterframeworkwrapper.h" #include "mpmpxcollectionframeworkwrapper.h" #include "mpmpxplaybackframeworkwrapper.h" -#include "mpsongscanner.h" +#include "mpmpxdetailsframeworkwrapper.h" +#include "mpaudioeffectsframeworkwrapper.h" +#include "mpequalizerframeworkwrapper.h" #include "mpmediakeyhandler.h" #include "mptrace.h" +#include "mpsettingsmanager.h" +#include "mpprogressdialoghandler.h" /*! \class MpEngine @@ -177,19 +182,30 @@ */ /*! + \fn void containerContentsChanged() + + This signal is emitted when items are removed or inserted on the current + container. + + */ + +/*! Constructs music player engine. */ MpEngine::MpEngine() : mMpxHarvesterWrapper(0), - mSongScanner(0), mMediaKeyHandler(0), mUsbOutstandingNote(0), mMpxCollectionWrapper(0), mMpxPlaybackWrapper(0), + mMpxDetailsWrapper(0), + mAudioEffectsWrapper(0), + mEqualizerWrapper(0), + mCurrentPresetIndex(KEqualizerPresetNone), mMpTranslator(0), mUsbBlockingState(USB_NotConnected), mPreviousUsbState(USB_NotConnected), - mViewMode(MpCommon::DefaultView) + mProgressDialogHandler(0) { TX_LOG } @@ -200,25 +216,25 @@ MpEngine::~MpEngine() { TX_ENTRY + delete mMpTranslator; + delete mMediaKeyHandler; + delete mUsbOutstandingNote; + delete mMpxPlaybackWrapper; + delete mMpxDetailsWrapper; + delete mMpxHarvesterWrapper; + delete mMpxCollectionWrapper; + delete mAudioEffectsWrapper; + delete mEqualizerWrapper; + delete mProgressDialogHandler; TX_EXIT } /*! - Returns the singleton instance of music player engine. - */ -MpEngine * MpEngine::instance() -{ - static MpEngine instance; - return &instance; -} - -/*! Initialize engine */ -void MpEngine::initialize( MpCommon::MpViewMode viewMode, TUid hostUid ) +void MpEngine::initialize( TUid hostUid, EngineMode mode ) { TX_ENTRY - mViewMode = viewMode; mHostUid = hostUid; //Load musicplayer translator @@ -232,10 +248,10 @@ if ( translatorLoaded ) { qApp->installTranslator( mMpTranslator ); } - - if( mViewMode == MpCommon::DefaultView || mViewMode == MpCommon::FetchView ){ + + if( mode == StandAlone || mode == Fetch ){ // Harvesting Wrapper - mMpxHarvesterWrapper = new MpMpxHarvesterFrameworkWrapper( mViewMode, mHostUid ); + mMpxHarvesterWrapper = new MpMpxHarvesterFrameworkWrapper( mHostUid ); connect( mMpxHarvesterWrapper, SIGNAL( scanStarted() ), this, SLOT( handleScanStarted() ), Qt::QueuedConnection ); connect( mMpxHarvesterWrapper, SIGNAL( scanEnded(int, int) ), @@ -245,12 +261,19 @@ this, SLOT( handleDiskEvent(MpxDiskEvents) ), Qt::QueuedConnection ); qRegisterMetaType("MpxUsbEvents"); connect( mMpxHarvesterWrapper, SIGNAL( usbEvent(MpxUsbEvents) ), - this, SLOT( handleUsbEvent(MpxUsbEvents) ), Qt::QueuedConnection ); - mSongScanner = new MpSongScanner( mMpxHarvesterWrapper ); + this, SLOT( handleUsbEvent(MpxUsbEvents) ), Qt::QueuedConnection ); mMediaKeyHandler = new MpMediaKeyHandler(); + } + + if ( mode == StandAlone || mode == Fetch || mode == MediaBrowsing) { // Collection Wrapper - mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mViewMode, mHostUid ); + mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mHostUid ); + + //disabling these since fetch mode plays only one song at a time. + mMpxCollectionWrapper->setRepeatFeatureEnabled( mode != Fetch ); + mMpxCollectionWrapper->setShuffleFeatureEnabled( mode != Fetch ); + connect( mMpxCollectionWrapper, SIGNAL( collectionPlaylistOpened() ), this, SIGNAL( collectionPlaylistOpened() ), Qt::QueuedConnection ); @@ -266,33 +289,40 @@ connect( mMpxCollectionWrapper, SIGNAL( isolatedCollectionOpened( MpMpxCollectionData* ) ), this, SIGNAL( isolatedCollectionOpened( MpMpxCollectionData* ) ), Qt::QueuedConnection ); + connect( mMpxCollectionWrapper, SIGNAL( containerContentsChanged() ), + this, SIGNAL( containerContentsChanged() ), + Qt::QueuedConnection ); + connect( mProgressDialogHandler, SIGNAL( deleteStarted() ), + this, SLOT( handleDeleteStarted() ), + Qt::QueuedConnection ); + connect( mProgressDialogHandler, SIGNAL( songsDeleted( bool ) ), + this, SLOT( handleDeleteEnded( bool ) ), + Qt::QueuedConnection ); + } + + if( mode == StandAlone ){ + // Equalizer wrapper , this needs to be created before playback wrapper. + mEqualizerWrapper = new MpEqualizerFrameworkWrapper(); + connect( mEqualizerWrapper, SIGNAL( equalizerReady() ), + this, SLOT( handleEqualizerReady() ), Qt::QueuedConnection ); + } + + if ( mode == StandAlone || mode == Fetch || mode == Embedded ) { + // Playback Wrapper + mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid ); + + // Details Wrapper + mMpxDetailsWrapper = new MpMpxDetailsFrameworkWrapper( mHostUid ); } - // Playback Wrapper - mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mViewMode, mHostUid ); - - TX_EXIT -} - -/*! - Deinitialize wrappers - */ -void MpEngine::close( ) -{ - delete mMpTranslator; - mMpTranslator = 0; - delete mSongScanner; - mSongScanner = 0; - delete mMediaKeyHandler; - mMediaKeyHandler = 0; - delete mUsbOutstandingNote; - mUsbOutstandingNote = 0; - delete mMpxPlaybackWrapper; - mMpxPlaybackWrapper = 0; - delete mMpxHarvesterWrapper; - mMpxHarvesterWrapper = 0; - delete mMpxCollectionWrapper; - mMpxCollectionWrapper = 0; + if( mode == StandAlone ){ + // AudioEffects wrapper + mAudioEffectsWrapper = new MpAudioEffectsFrameworkWrapper(); + } + if (mMpxHarvesterWrapper && mMpxCollectionWrapper){ + mProgressDialogHandler = new MpProgressDialogHandler(mMpxCollectionWrapper, mMpxHarvesterWrapper); + } + TX_EXIT } /*! @@ -344,7 +374,7 @@ TX_ENTRY if ( !verifyUsbBlocking( true ) ) { emit libraryAboutToUpdate(); - mSongScanner->scan(); + mProgressDialogHandler->scan(); } TX_EXIT } @@ -687,7 +717,7 @@ void MpEngine::deleteSongs( QList &selection ) { if ( !verifyUsbBlocking( true ) ) { - mMpxCollectionWrapper->deleteSongs( selection ); + mProgressDialogHandler->deleteSongs( selection ); } } @@ -722,6 +752,22 @@ } /*! + Finds all songs beloging to the album specified by the \a index. + */ +void MpEngine::findAlbumSongs( int index ) +{ + mMpxCollectionWrapper->findAlbumSongs(index); +} + +/*! + Plays album with \a albumIndex starting with the songs with \a songIndex. + */ +void MpEngine::playAlbumSongs( int albumIndex, int songIndex, MpMpxCollectionData* collectionData ) +{ + mMpxCollectionWrapper->playAlbumSongs(albumIndex, songIndex, collectionData); +} + +/*! Returns pointer to MpMpxCollectionData, which is the collection data. */ MpMpxCollectionData *MpEngine::collectionData() @@ -790,7 +836,7 @@ } /*! - Slot to handle a skeep forward. + Slot to handle a skip forward. */ void MpEngine::skipForward() { @@ -798,7 +844,23 @@ } /*! - Slot to handle a skeep backwards. + Slot to handle seek forward. + */ +void MpEngine::startSeekForward() +{ + mMpxPlaybackWrapper->startSeekForward(); +} + +/*! + Slot to handle stop seeking. + */ +void MpEngine::stopSeeking() +{ + mMpxPlaybackWrapper->stopSeeking(); +} + +/*! + Slot to handle a skip backwards. */ void MpEngine::skipBackward() { @@ -806,6 +868,13 @@ } /*! + Slot to handle seek backwards. + */ +void MpEngine::startSeekBackward() +{ + mMpxPlaybackWrapper->startSeekBackward(); +} +/*! Slot to handle a request to change \a position. */ void MpEngine::setPosition( int position ) @@ -829,3 +898,161 @@ mMpxPlaybackWrapper->setRepeat( mode ); } +/*! + Returns pointer to MpSongData, which is the song data for detail's view. + */ +MpSongData *MpEngine::songData() +{ + return mMpxDetailsWrapper->songData(); +} + +/*! + Retrieve song informatioin + */ +void MpEngine::retrieveSong() +{ + TX_ENTRY + mMpxDetailsWrapper->retrieveSong(); + TX_EXIT +} + +/*! + Retrieve balance informatioin from audio effects + */ +int MpEngine::balance() +{ + return mAudioEffectsWrapper->balance(); +} + +/*! + Retrieve loudness informatioin from audio effects + */ +bool MpEngine::loudness() +{ + return mAudioEffectsWrapper->loudness(); +} + +/*! + Slot to handle a request to change \a balance in audio effects. + */ +void MpEngine::setBalance( int balance ) +{ + TX_ENTRY + + if ( mAudioEffectsWrapper->balance() != balance ) { + mAudioEffectsWrapper->setBalance( balance ); + mMpxPlaybackWrapper->setBalance( balance ); + } + + TX_EXIT +} + +/*! + Slot to handle a request to change loudness \a mode in audio effects. + */ +void MpEngine::setLoudness( bool mode ) +{ + TX_ENTRY + + if( mAudioEffectsWrapper->loudness() != mode ) { //do not set same value twice + mAudioEffectsWrapper->setLoudness( mode ); + mMpxPlaybackWrapper->applyAudioEffects(); + } + + TX_EXIT +} + +/*! + Apply the preset by giving \a presetIndex. The index is subtracted by 1 because + index 0 represent "Off" at UI level. + */ +void MpEngine::applyPreset( int presetIndex ) +{ + TX_ENTRY_ARGS( "presetIndex=" << presetIndex ); + + TInt presetKey = mEqualizerWrapper->getPresetNameKey( presetIndex - 1 ); + + if ( presetKey != KEqualizerPresetNone ) { + TX_LOG_ARGS( "Preset key in engine =" << presetKey ); + // Store in CenRep file + MpSettingsManager::setPreset( presetKey ); + // Notify playback framework of the change. + mMpxPlaybackWrapper->applyEqualizer(); + mCurrentPresetIndex = presetIndex; + } + else { + TX_LOG_ARGS("getPresetNameKey Error = " << KEqualizerPresetNone); + } + + TX_EXIT +} + +/*! + Disabling equalizer by setting the preset to -1 and apply it to + disable current preset. + */ +void MpEngine::disableEqualizer() +{ + TX_ENTRY + + mCurrentPresetIndex = KEqualizerPresetNone; + // Store in CenRep file + MpSettingsManager::setPreset( mCurrentPresetIndex ); + // Notify playback framework of the change. + mMpxPlaybackWrapper->applyEqualizer(); + + TX_EXIT +} + +/*! + Return current preset index (UI) + */ +int MpEngine::activePreset() +{ + TX_LOG_ARGS("mCurrentPresetIndex = " << mCurrentPresetIndex ); + + return mCurrentPresetIndex; +} + +/*! + Retrieve list of preset names from equalizer wrapper + */ +QStringList MpEngine::presetNames() +{ + return mEqualizerWrapper->presetNames(); +} + +/*! + Slot to handle equalizer ready signal from equalizer wrapper. + */ +void MpEngine::handleEqualizerReady() +{ + TX_ENTRY + + // Get preset id from cenrep + TInt presetKey( MpSettingsManager::preset() ); + + mCurrentPresetIndex = mEqualizerWrapper->getPresetIndex( presetKey ); + emit equalizerReady(); + + TX_EXIT +} + +/*! + Slot to be called when song deleting starts. + */ +void MpEngine::handleDeleteStarted() { + TX_ENTRY + mMediaKeyHandler->setEnabled(false); + TX_EXIT +} + +/*! + Slot to be called when song deleting ends. + */ +void MpEngine::handleDeleteEnded() { + TX_ENTRY + mMediaKeyHandler->setEnabled(true); + TX_EXIT +} +