radioapp/radiouiengine/src/radiomonitorservice.cpp
changeset 57 21be958eb3ce
parent 51 bbebb0235466
--- 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();
+    }
 }
 
 /*!