diff -r 04837bf3a628 -r 21be958eb3ce radioapp/radiouiengine/src/radiomonitorservice.cpp --- a/radioapp/radiouiengine/src/radiomonitorservice.cpp Tue Oct 12 11:25:14 2010 +0300 +++ b/radioapp/radiouiengine/src/radiomonitorservice.cpp Fri Oct 15 16:26:27 2010 +0300 @@ -87,7 +87,9 @@ this, SLOT(notifyStationChange(RadioStation)) ); Radio::connect( stationModel, SIGNAL(radioTextReceived(RadioStation)), this, SLOT(notifyStationChange(RadioStation)) ); - + Radio::connect( stationModel, SIGNAL(dynamicPsChanged(RadioStation)), + this, SLOT(notifyStationChange(RadioStation)) ); + RadioUiEngine* uiEngine = &mUiEngine.api(); Radio::connect( uiEngine, SIGNAL(seekingStarted(int)), this, SLOT(notifyRadioStatus()) ); @@ -95,8 +97,8 @@ this, SLOT(notifyRadioStatus()) ); Radio::connect( uiEngine, SIGNAL(antennaStatusChanged(bool)), this, SLOT(notifyRadioStatus()) ); - Radio::connect( uiEngine, SIGNAL(powerOffRequested()), - this, SLOT(notifyRadioStatus()) ); +// Radio::connect( uiEngine, SIGNAL(powerOffRequested()), +// this, SLOT(notifyRadioStatus()) ); mUiEngine.wrapper().addObserver( this ); @@ -178,7 +180,8 @@ if ( radioStatus != mRadioStatus ) { if ( radioStatus == RadioStatus::Seeking ) { - if ( RadioScannerEngine* scannerEngine = mUiEngine.api().scannerEngine() ) { + RadioScannerEngine* scannerEngine = mUiEngine.api().scannerEngine(); + if ( scannerEngine ) { Radio::connect( scannerEngine, SIGNAL(destroyed()), this, SLOT(notifyRadioStatus()) ); } @@ -197,10 +200,7 @@ { const int favoriteCount = mUiEngine.api().stationModel().favoriteCount(); RUN_NOTIFY( FavoriteCount, favoriteCount ); - - if ( favoriteCount == 1 ) { - checkIfCurrentStationIsFavorite(); - } + checkIfCurrentStationIsFavorite(); } /*! @@ -248,7 +248,8 @@ list.append( notification ); } - notifyList( list ); + notify( list ); + } /*! @@ -257,8 +258,15 @@ */ void RadioMonitorService::sendNotifications() { - notifyList( mNotificationList ); - mNotificationList.clear(); + + if ( !mNotificationQueue.isEmpty() ) + { + notifyList( mNotificationQueue.dequeue() ); + } + if ( !mNotificationQueue.isEmpty() ) + { + mNotificationTimer->start(); + } } /*! @@ -268,6 +276,11 @@ { Q_UNUSED( reason ); if ( !mUiEngine.api().isScanning() ) { + + // frequency changed, cancel any pending notification as it has become invalid + mNotificationTimer->stop(); + mNotificationQueue.clear(); + RUN_NOTIFY( Frequency, RadioStation::parseFrequency( frequency ) ); RadioStation station; if ( mUiEngine.api().stationModel().findFrequency( frequency, station ) && !station.name().isEmpty() ) { @@ -275,9 +288,7 @@ } const int favoriteCount = mUiEngine.api().stationModel().favoriteCount(); - if ( favoriteCount == 1 ) { - checkIfCurrentStationIsFavorite(); - } + checkIfCurrentStationIsFavorite(); } } @@ -326,9 +337,21 @@ */ void RadioMonitorService::notify( const QVariant& notification ) { - mNotificationTimer->stop(); - mNotificationList.append( notification ); - mNotificationTimer->start(); + QVariantList list; + list.append( notification ); + notify( list ); +} + +/*! + * + */ +void RadioMonitorService::notify( const QVariantList& list ) +{ + mNotificationQueue.enqueue( list ); + if ( !mNotificationTimer->isActive() ) + { + mNotificationTimer->start(); + } } /*!