--- a/mpengine/src/mpengine.cpp Tue Jul 06 14:13:36 2010 +0300
+++ b/mpengine/src/mpengine.cpp Wed Aug 18 09:46:20 2010 +0300
@@ -22,13 +22,12 @@
#include "mpmpxharvesterframeworkwrapper.h"
#include "mpmpxcollectionframeworkwrapper.h"
#include "mpmpxplaybackframeworkwrapper.h"
-#include "mpmpxdetailsframeworkwrapper.h"
#include "mpaudioeffectsframeworkwrapper.h"
#include "mpequalizerframeworkwrapper.h"
-#include "mpmediakeyhandler.h"
#include "mptrace.h"
#include "mpsettingsmanager.h"
#include "mpsongscanner.h"
+#include "mpsongdata.h"
/*!
\class MpEngine
@@ -96,13 +95,6 @@
*/
-/*!
- \fn void libraryRefreshNeeded()
-
- This signal is emitted when usb in MassStorage mode is disconnected.
-
- */
-
/*!
-------------------------------------------------------------------------------
@@ -184,20 +176,34 @@
*/
/*!
+-------------------------------------------------------------------------------
+ Playback related signals
+-------------------------------------------------------------------------------
+*/
+
+/*!
+ \fn void volumePropertyChanged( MpCommon::MpVolumeProperty, int value );
+
+ This signal is emitted when framework receives a volume related property notification,
+ such as EPbPropertyVolume, EPbPropertyMaxVolume, EPbPropertyMute.
+ */
+
+
+/*!
Constructs music player engine.
*/
MpEngine::MpEngine()
: mMpxHarvesterWrapper(0),
mSongScanner(0),
- mMediaKeyHandler(0),
mMpxCollectionWrapper(0),
mMpxPlaybackWrapper(0),
- mMpxDetailsWrapper(0),
mAudioEffectsWrapper(0),
mEqualizerWrapper(0),
mCurrentPresetIndex(KEqualizerPresetNone),
+ mSongData(0),
mUsbBlockingState(USB_NotConnected),
- mPreviousUsbState(USB_NotConnected)
+ mPreviousUsbState(USB_NotConnected),
+ mHandleMediaCommands(true)
{
TX_LOG
}
@@ -208,14 +214,13 @@
MpEngine::~MpEngine()
{
TX_ENTRY
- delete mMediaKeyHandler;
delete mMpxPlaybackWrapper;
- delete mMpxDetailsWrapper;
delete mMpxHarvesterWrapper;
delete mMpxCollectionWrapper;
delete mAudioEffectsWrapper;
delete mEqualizerWrapper;
delete mSongScanner;
+ delete mSongData;
TX_EXIT
}
@@ -224,80 +229,125 @@
*/
void MpEngine::initialize( TUid hostUid, EngineMode mode )
{
- TX_ENTRY
+ TX_ENTRY_ARGS("hostUid=" << hostUid.iUid << ", mode=" << mode);
mHostUid = hostUid;
- if( mode == StandAlone || mode == Fetch ){
+ if ( StandAlone == mode ) {
+ mSongData = new MpSongData();
+
// Harvesting Wrapper
mMpxHarvesterWrapper = new MpMpxHarvesterFrameworkWrapper( mHostUid );
- connect( mMpxHarvesterWrapper, SIGNAL( scanStarted() ),
- this, SLOT( handleScanStarted() ), Qt::QueuedConnection );
- connect( mMpxHarvesterWrapper, SIGNAL( scanEnded(int, int) ),
- this, SLOT( handleScanEnded(int, int) ), Qt::QueuedConnection );
+ connect( mMpxHarvesterWrapper, SIGNAL( scanStarted() ),
+ this, SLOT( handleScanStarted() ),
+ Qt::QueuedConnection );
+ connect( mMpxHarvesterWrapper, SIGNAL( scanEnded(int, int) ),
+ this, SLOT( handleScanEnded(int, int) ),
+ Qt::QueuedConnection );
qRegisterMetaType<MpxDiskEvents>("MpxDiskEvents");
- connect( mMpxHarvesterWrapper, SIGNAL( diskEvent(MpxDiskEvents) ),
- this, SLOT( handleDiskEvent(MpxDiskEvents) ), Qt::QueuedConnection );
+ connect( mMpxHarvesterWrapper, SIGNAL( diskEvent(MpxDiskEvents) ),
+ this, SLOT( handleDiskEvent(MpxDiskEvents) ),
+ Qt::QueuedConnection );
qRegisterMetaType<MpxUsbEvents>("MpxUsbEvents");
- connect( mMpxHarvesterWrapper, SIGNAL( usbEvent(MpxUsbEvents) ),
- this, SLOT( handleUsbEvent(MpxUsbEvents) ), Qt::QueuedConnection );
- mMediaKeyHandler = new MpMediaKeyHandler();
- }
+ connect( mMpxHarvesterWrapper, SIGNAL( usbEvent(MpxUsbEvents) ),
+ this, SLOT( handleUsbEvent(MpxUsbEvents) ),
+ Qt::QueuedConnection );
- if ( mode == StandAlone || mode == Fetch || mode == MediaBrowsing) {
-
// Collection Wrapper
- mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mHostUid );
-
- //disabling these since fetch mode plays only one song at a time.
- mMpxCollectionWrapper->setRepeatFeatureEnabled( mode != Fetch );
- mMpxCollectionWrapper->setShuffleFeatureEnabled( mode != Fetch );
-
+ mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mHostUid, mSongData );
connect( mMpxCollectionWrapper, SIGNAL( collectionPlaylistOpened() ),
- this, SIGNAL( collectionPlaylistOpened() ),
- Qt::QueuedConnection );
- connect( mMpxCollectionWrapper, SIGNAL( aboutToAddSongs( int ) ),
- this, SIGNAL( aboutToAddSongs( int ) ) );
- connect( mMpxCollectionWrapper, SIGNAL( playlistSaved( bool ) ),
- this, SIGNAL( playlistSaved( bool ) ),
- Qt::QueuedConnection );
- connect( mMpxCollectionWrapper, SIGNAL( playlistsRenamed( bool ) ),
- this, SIGNAL( playlistsRenamed( bool ) ),
- Qt::QueuedConnection );
- connect( mMpxCollectionWrapper, SIGNAL( isolatedCollectionOpened( MpMpxCollectionData* ) ),
- this, SIGNAL( isolatedCollectionOpened( MpMpxCollectionData* ) ),
- Qt::QueuedConnection );
+ this, SIGNAL( collectionPlaylistOpened() ),
+ Qt::QueuedConnection );
+ connect( mMpxCollectionWrapper, SIGNAL( aboutToAddSongs(int) ),
+ this, SIGNAL( aboutToAddSongs(int) ) );
+ connect( mMpxCollectionWrapper, SIGNAL( playlistSaved(bool) ),
+ this, SIGNAL( playlistSaved(bool) ),
+ Qt::QueuedConnection );
+ connect( mMpxCollectionWrapper, SIGNAL( playlistsRenamed(bool) ),
+ this, SIGNAL( playlistsRenamed(bool) ),
+ Qt::QueuedConnection );
+ connect( mMpxCollectionWrapper, SIGNAL( isolatedCollectionOpened(MpMpxCollectionData*) ),
+ this, SIGNAL( isolatedCollectionOpened(MpMpxCollectionData*) ),
+ Qt::QueuedConnection );
connect( mMpxCollectionWrapper, SIGNAL( containerContentsChanged() ),
- this, SIGNAL( containerContentsChanged() ),
- Qt::QueuedConnection );
- connect( mMpxCollectionWrapper, SIGNAL( deleteStarted( TCollectionContext, int ) ),
- this, SLOT( handleDeleteStarted( TCollectionContext, int ) ) );
- connect( mMpxCollectionWrapper, SIGNAL( songsDeleted( bool ) ),
- this, SLOT( handleDeleteEnded( bool ) ),
- Qt::QueuedConnection );
+ this, SIGNAL( containerContentsChanged() ),
+ Qt::QueuedConnection );
+ connect( mMpxCollectionWrapper, SIGNAL( deleteStarted(TCollectionContext, int) ),
+ this, SLOT( handleDeleteStarted(TCollectionContext, int) ) );
+ connect( mMpxCollectionWrapper, SIGNAL( songsDeleted(bool) ),
+ this, SLOT( handleDeleteEnded(bool) ),
+ Qt::QueuedConnection );
connect( mMpxCollectionWrapper, SIGNAL( restorePathFailed() ),
- this, SIGNAL( restorePathFailed() ),
- Qt::QueuedConnection );
- }
+ this, SIGNAL( restorePathFailed() ),
+ Qt::QueuedConnection );
+ // 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 ){
- // 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( mHostUid, mSongData );
+ connect( this, SIGNAL( libraryUpdated() ),
+ mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
+ connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
+ this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
- if( mode == StandAlone ){
// AudioEffects wrapper
mAudioEffectsWrapper = new MpAudioEffectsFrameworkWrapper();
}
+ else if ( Fetch == mode ) {
+ // Harvesting Wrapper
+ mMpxHarvesterWrapper = new MpMpxHarvesterFrameworkWrapper( mHostUid );
+ connect( mMpxHarvesterWrapper, SIGNAL( scanStarted() ),
+ this, SLOT( handleScanStarted() ),
+ Qt::QueuedConnection );
+ connect( mMpxHarvesterWrapper, SIGNAL( scanEnded(int, int) ),
+ this, SLOT( handleScanEnded(int, int) ),
+ Qt::QueuedConnection );
+ qRegisterMetaType<MpxDiskEvents>("MpxDiskEvents");
+ connect( mMpxHarvesterWrapper, SIGNAL( diskEvent(MpxDiskEvents) ),
+ this, SLOT( handleDiskEvent(MpxDiskEvents) ),
+ Qt::QueuedConnection );
+ qRegisterMetaType<MpxUsbEvents>("MpxUsbEvents");
+ connect( mMpxHarvesterWrapper, SIGNAL( usbEvent(MpxUsbEvents) ),
+ this, SLOT( handleUsbEvent(MpxUsbEvents) ),
+ Qt::QueuedConnection );
+
+ // Collection Wrapper
+ mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mHostUid, 0 );
+ connect( mMpxCollectionWrapper, SIGNAL( collectionPlaylistOpened() ),
+ this, SIGNAL( collectionPlaylistOpened() ),
+ Qt::QueuedConnection );
+ // Disabling these since fetch mode plays only one song at a time.
+ mMpxCollectionWrapper->setRepeatFeatureEnabled( false );
+ mMpxCollectionWrapper->setShuffleFeatureEnabled( false );
+
+ // Playback Wrapper
+ mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, 0 );
+ connect( this, SIGNAL( libraryUpdated() ),
+ mMpxPlaybackWrapper, SLOT( closeCurrentPlayback() ) );
+ connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
+ this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
+
+ }
+ else if ( MediaBrowsing == mode ) {
+ // Collection Wrapper
+ mMpxCollectionWrapper = new MpMpxCollectionFrameworkWrapper( mHostUid, 0 );
+ connect( mMpxCollectionWrapper, SIGNAL( collectionPlaylistOpened() ),
+ this, SIGNAL( collectionPlaylistOpened() ),
+ Qt::QueuedConnection );
+ connect( mMpxCollectionWrapper, SIGNAL( containerContentsChanged() ),
+ this, SIGNAL( containerContentsChanged() ),
+ Qt::QueuedConnection );
+ }
+ else if ( Embedded == mode ) {
+ mSongData = new MpSongData();
+ // Playback Wrapper
+ mMpxPlaybackWrapper = new MpMpxPlaybackFrameworkWrapper( mHostUid, mSongData );
+ connect( mMpxPlaybackWrapper, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ),
+ this, SIGNAL( volumePropertyChanged( MpCommon::MpVolumeProperty, int ) ) );
+
+ }
TX_EXIT
}
@@ -367,7 +417,7 @@
*/
void MpEngine::handleScanStarted() {
TX_ENTRY
- mMediaKeyHandler->setEnabled(false);
+ mHandleMediaCommands = false;
TX_EXIT
}
@@ -378,7 +428,7 @@
TX_ENTRY
Q_UNUSED( count );
Q_UNUSED( error );
- mMediaKeyHandler->setEnabled(true);
+ mHandleMediaCommands = true;
emit libraryUpdated();
TX_EXIT
}
@@ -391,10 +441,10 @@
TX_ENTRY_ARGS("event=" << event);
switch ( event ) {
case DiskFormatStarted:
- mMediaKeyHandler->setEnabled(false);
+ mHandleMediaCommands = false;
break;
case DiskFormatEnded:
- mMediaKeyHandler->setEnabled(true);
+ mHandleMediaCommands = true;
break;
case DiskRemoved:
if ( mUsbBlockingState != USB_Synchronizing ) {
@@ -448,7 +498,7 @@
void MpEngine::handleUsbMassStorageStartEvent()
{
TX_ENTRY
- mMediaKeyHandler->setEnabled(false);
+ mHandleMediaCommands = false;
changeUsbBlockingState( USB_Synchronizing );
emit usbBlocked(true);
@@ -463,12 +513,12 @@
void MpEngine::handleUsbMassStorageEndEvent()
{
TX_ENTRY
- mMediaKeyHandler->setEnabled(true);
+ mHandleMediaCommands = true;
changeUsbBlockingState( USB_NotConnected );
emit usbBlocked(false);
emit usbSynchronizationFinished();
- emit libraryRefreshNeeded();
+ refreshLibrary();
TX_EXIT
}
@@ -479,7 +529,7 @@
void MpEngine::handleUsbMtpStartEvent()
{
TX_ENTRY
- mMediaKeyHandler->setEnabled(false);
+ mHandleMediaCommands = false;
changeUsbBlockingState( USB_Synchronizing );
emit usbBlocked(true);
@@ -498,7 +548,7 @@
void MpEngine::handleUsbMtpEndEvent()
{
TX_ENTRY
- mMediaKeyHandler->setEnabled(true);
+ mHandleMediaCommands = true;
changeUsbBlockingState( USB_NotConnected );
emit usbBlocked(false);
@@ -718,7 +768,7 @@
void MpEngine::handleDeleteStarted( TCollectionContext context, int count )
{
TX_ENTRY
- mMediaKeyHandler->setEnabled( false );
+ mHandleMediaCommands = false;
emit deleteStarted( context, count );
TX_EXIT
}
@@ -729,7 +779,7 @@
void MpEngine::handleDeleteEnded( bool success )
{
TX_ENTRY
- mMediaKeyHandler->setEnabled(true);
+ mHandleMediaCommands = true;
emit songsDeleted( success );
TX_EXIT
}
@@ -777,12 +827,36 @@
{
mMpxPlaybackWrapper->play( file );
}
+
+/*!
+ Slot to handle a play command
+ */
+
+void MpEngine::play()
+{
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->play();
+ }
+}
+
+/*!
+ Slot to handle a pause command.
+ */
+void MpEngine::pause()
+{
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->pause();
+ }
+}
+
/*!
Slot to handle a play pause.
*/
void MpEngine::playPause()
{
- mMpxPlaybackWrapper->playPause();
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->playPause();
+ }
}
/*!
@@ -790,7 +864,9 @@
*/
void MpEngine::stop()
{
- mMpxPlaybackWrapper->stop();
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->stop();
+ }
}
/*!
@@ -798,7 +874,9 @@
*/
void MpEngine::skipForward()
{
- mMpxPlaybackWrapper->skipForward();
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->skipForward();
+ }
}
/*!
@@ -806,7 +884,9 @@
*/
void MpEngine::startSeekForward()
{
- mMpxPlaybackWrapper->startSeekForward();
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->startSeekForward();
+ }
}
/*!
@@ -814,7 +894,9 @@
*/
void MpEngine::stopSeeking()
{
- mMpxPlaybackWrapper->stopSeeking();
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->stopSeeking();
+ }
}
/*!
@@ -822,7 +904,9 @@
*/
void MpEngine::skipBackward()
{
- mMpxPlaybackWrapper->skipBackward();
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->skipBackward();
+ }
}
/*!
@@ -830,7 +914,9 @@
*/
void MpEngine::startSeekBackward()
{
- mMpxPlaybackWrapper->startSeekBackward();
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->startSeekBackward();
+ }
}
/*!
Slot to handle a request to change \a position.
@@ -857,20 +943,103 @@
}
/*!
- Returns pointer to MpSongData, which is the song data for detail's view.
+ Slot to handle a request to get the volume level Max.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpEngine::getMaxVolume( )
+{
+ mMpxPlaybackWrapper->getMaxVolume();
+}
+
+/*!
+ Slot to handle a request to get the current volume level.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpEngine::getVolume( )
+{
+ mMpxPlaybackWrapper->getVolume();
+}
+
+/*!
+ Slot to handle a request to increase volume.
+ */
+void MpEngine::increaseVolume()
+{
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->increaseVolume();
+ }
+}
+
+/*!
+ Slot to handle a request to decrease volume.
+ */
+void MpEngine::decreaseVolume()
+{
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->decreaseVolume();
+ }
+}
+
+/*!
+ Slot to handle a request to set the volume level.
+ */
+void MpEngine::setVolume( int value )
+{
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->setVolume( value );
+ }
+}
+
+/*!
+ Slot to handle a request to get the current mute state.
+ Response will be asynchronously sent through volumePropertyChanged() signal.
+ */
+void MpEngine::getMuteState( )
+{
+ mMpxPlaybackWrapper->getMuteState();
+}
+
+/*!
+ Slot to handle a request to mute.
+ */
+void MpEngine::mute()
+{
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->mute();
+ }
+}
+
+/*!
+ Slot to handle a request to unmute.
+ */
+void MpEngine::unmute()
+{
+ if ( mHandleMediaCommands ) {
+ mMpxPlaybackWrapper->unmute();
+ }
+}
+
+/*!
+ Returns pointer to MpSongData, which is the song data for Details View.
*/
MpSongData *MpEngine::songData()
{
- return mMpxDetailsWrapper->songData();
+ return mSongData;
}
/*!
- Retrieve song informatioin
+ Retrieves song details for the specified \a index.
*/
-void MpEngine::retrieveSong()
+void MpEngine::retrieveSongDetails( int index )
{
TX_ENTRY
- mMpxDetailsWrapper->retrieveSong();
+ if ( index == -1 ) {
+ // Retrieve song details of currently playing song
+ mMpxPlaybackWrapper->retrieveSongDetails();
+ }
+ else {
+ mMpxCollectionWrapper->retrieveSongDetails(index);
+ }
TX_EXIT
}