radioapp/radiouiengine/src/radiouiengine.cpp
changeset 19 afea38384506
parent 16 f54ebcfc1b80
child 37 451b2e1545b2
equal deleted inserted replaced
16:f54ebcfc1b80 19:afea38384506
    22 
    22 
    23 #ifdef BUILD_WIN32
    23 #ifdef BUILD_WIN32
    24 #   include <QSettings>
    24 #   include <QSettings>
    25 #else
    25 #else
    26 #   include <qsysteminfo.h>
    26 #   include <qsysteminfo.h>
       
    27 #   include <XQSettingsManager>
    27 using namespace QtMobility;
    28 using namespace QtMobility;
    28 #endif // WIN32_BUILD
    29 #endif // WIN32_BUILD
    29 
    30 
    30 // User includes
    31 // User includes
    31 #include "radiouiengine.h"
    32 #include "radiouiengine.h"
    32 #include "radiouiengine_p.h"
    33 #include "radiouiengine_p.h"
    33 #include "radiologger.h"
    34 #include "radiologger.h"
    34 #include "radioenginewrapper.h"
    35 #include "radioenginewrapper.h"
    35 #include "radiostationmodel.h"
    36 #include "radiostationmodel.h"
    36 #include "radiohistorymodel.h"
    37 #include "radiohistorymodel.h"
       
    38 #include "radiocarouselmodel.h"
       
    39 #include "radiohistoryitem.h"
    37 #include "radiosettings.h"
    40 #include "radiosettings.h"
    38 #include "radiostationfiltermodel.h"
    41 #include "radiostationfiltermodel.h"
    39 #include "radioscannerengine.h"
    42 #include "radioscannerengine.h"
    40 #ifdef BUILD_WIN32
       
    41 #   include "radiomonitorservice_win32.h"
       
    42 #else
       
    43 #   include "radiomonitorservice.h"
       
    44 #endif
       
    45 
    43 
    46 // Constants
    44 // Constants
    47 const QString KPathFormatter = "%1:%2%3";
    45 const QString KPathFormatter = "%1:%2%3";
    48 const QString KApplicationDir = "\\sys\\bin\\";
    46 const QString KApplicationDir = "\\sys\\bin\\";
    49 const QString KSongRecognitionApp = "Shazam_0x200265B3.exe";
    47 const QString KSongRecognitionApp = "Shazam_0x200265B3.exe";
    50 const QString KSongRecognitionAppParams = "-listen";
    48 const QString KSongRecognitionAppParams = "-listen";
    51 
    49 
       
    50 const uint DEFAULT_MIN_FREQUENCY = 87500000;
       
    51 const uint RADIO_CENREP_UID = 0x101FF976;
       
    52 const uint RADIO_CENREP_FREQUENCY_KEY = 0x00000107;
       
    53 
    52 struct GenreStruct
    54 struct GenreStruct
    53     {
    55 {
    54     int mGenreCode;
    56     int mGenreCode;
    55     const char* mInCarousel;
    57     const char* mInCarousel;
    56     const char* mInStationsList;
    58     const char* mInStationsList;
    57     const char* mInHomeScreen;
    59     const char* mInHomeScreen;
    58     };
    60 };
    59 
    61 
    60 const GenreStruct EuropeanGenres[] =
    62 const GenreStruct EuropeanGenres[] =
    61     {
    63 {
    62      { GenreEurope::RdsNone, "", "", "" }
    64      { GenreEurope::RdsNone, "", "", "" }
    63     ,{ GenreEurope::RdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" }
    65     ,{ GenreEurope::RdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" }
    64     ,{ GenreEurope::RdsCurrentAffairs, "txt_rad_info_current_affairs", "txt_rad_dblist_l1_mhz_val_current_affairs", "txt_rad_info_current_affairs_hs" }
    66     ,{ GenreEurope::RdsCurrentAffairs, "txt_rad_info_current_affairs", "txt_rad_dblist_l1_mhz_val_current_affairs", "txt_rad_info_current_affairs_hs" }
    65     ,{ GenreEurope::RdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" }
    67     ,{ GenreEurope::RdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" }
    66     ,{ GenreEurope::RdsSport, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" }
    68     ,{ GenreEurope::RdsSport, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" }
    89     ,{ GenreEurope::RdsOldiesMusic, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" }
    91     ,{ GenreEurope::RdsOldiesMusic, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" }
    90     ,{ GenreEurope::RdsFolkMusic, "txt_rad_info_folk_music", "txt_rad_dblist_l1_mhz_val_folk_music", "txt_rad_info_folk_music_hs" }
    92     ,{ GenreEurope::RdsFolkMusic, "txt_rad_info_folk_music", "txt_rad_dblist_l1_mhz_val_folk_music", "txt_rad_info_folk_music_hs" }
    91     ,{ GenreEurope::RdsDocumentary, "txt_rad_info_documentary", "txt_rad_dblist_l1_mhz_val_documentary", "txt_rad_info_documentary_hs" }
    93     ,{ GenreEurope::RdsDocumentary, "txt_rad_info_documentary", "txt_rad_dblist_l1_mhz_val_documentary", "txt_rad_info_documentary_hs" }
    92     ,{ GenreEurope::RdsAlarmTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }
    94     ,{ GenreEurope::RdsAlarmTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }
    93     ,{ GenreEurope::RdsAlarm, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }
    95     ,{ GenreEurope::RdsAlarm, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }
    94     };
    96 };
    95 const int EuropeanGenresCount = sizeof( EuropeanGenres ) / sizeof ( EuropeanGenres[0] );
    97 const int EuropeanGenresCount = sizeof( EuropeanGenres ) / sizeof ( EuropeanGenres[0] );
    96 
    98 
    97 const GenreStruct AmericanGenres[] =
    99 const GenreStruct AmericanGenres[] =
    98     {
   100 {
    99      { GenreAmerica::RbdsNone, "", "", "" }
   101      { GenreAmerica::RbdsNone, "", "", "" }
   100     ,{ GenreAmerica::RbdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" }
   102     ,{ GenreAmerica::RbdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" }
   101     ,{ GenreAmerica::RbdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" }
   103     ,{ GenreAmerica::RbdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" }
   102     ,{ GenreAmerica::RbdsSports, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" }
   104     ,{ GenreAmerica::RbdsSports, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" }
   103     ,{ GenreAmerica::RbdsTalk, "txt_rad_info_talk", "txt_rad_dblist_l1_mhz_val_talk", "txt_rad_info_talk_hs" }
   105     ,{ GenreAmerica::RbdsTalk, "txt_rad_info_talk", "txt_rad_dblist_l1_mhz_val_talk", "txt_rad_info_talk_hs" }
   126     ,{ GenreAmerica::RbdsUnassigned4, "", "", "" }
   128     ,{ GenreAmerica::RbdsUnassigned4, "", "", "" }
   127     ,{ GenreAmerica::RbdsUnassigned5, "", "", "" }
   129     ,{ GenreAmerica::RbdsUnassigned5, "", "", "" }
   128     ,{ GenreAmerica::RbdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" }//TODO: Check
   130     ,{ GenreAmerica::RbdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" }//TODO: Check
   129     ,{ GenreAmerica::RbdsEmergencyTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }//TODO: Check
   131     ,{ GenreAmerica::RbdsEmergencyTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }//TODO: Check
   130     ,{ GenreAmerica::RbdsEmergency, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }//TODO: Check
   132     ,{ GenreAmerica::RbdsEmergency, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }//TODO: Check
   131     };
   133 };
   132 const int AmericanGenresCount = sizeof( AmericanGenres ) / sizeof ( AmericanGenres[0] );
   134 const int AmericanGenresCount = sizeof( AmericanGenres ) / sizeof ( AmericanGenres[0] );
   133 
   135 
   134 /*!
   136 /*!
   135  *
   137  *
   136  */
   138  */
   152 }
   154 }
   153 
   155 
   154 /*!
   156 /*!
   155  *
   157  *
   156  */
   158  */
       
   159 uint RadioUiEngine::lastTunedFrequency()
       
   160 {
       
   161     uint frequency = DEFAULT_MIN_FREQUENCY;
       
   162 
       
   163 #ifdef BUILD_WIN32
       
   164     QScopedPointer<QSettings> settings( new QSettings( "Nokia", "QtFmRadio" ) );
       
   165     frequency = settings->value( "CurrentFreq", DEFAULT_MIN_FREQUENCY ).toUInt();
       
   166     if ( frequency == 0 ) {
       
   167         frequency = DEFAULT_MIN_FREQUENCY;
       
   168     }
       
   169 #else
       
   170     QScopedPointer<XQSettingsManager> settings( new XQSettingsManager() );
       
   171     XQSettingsKey key( XQSettingsKey::TargetCentralRepository, RADIO_CENREP_UID, RADIO_CENREP_FREQUENCY_KEY );
       
   172     frequency = settings->readItemValue( key, XQSettingsManager::TypeInt ).toUInt();
       
   173 #endif
       
   174 
       
   175     return frequency;
       
   176 }
       
   177 
       
   178 /*!
       
   179  *
       
   180  */
   157 RadioUiEngine::RadioUiEngine( QObject* parent ) :
   181 RadioUiEngine::RadioUiEngine( QObject* parent ) :
   158     QObject( parent ),
   182     QObject( parent ),
   159     d_ptr( new RadioUiEnginePrivate( this ) )
   183     d_ptr( new RadioUiEnginePrivate( this ) )
   160 {
   184 {
   161 }
   185 }
   169 }
   193 }
   170 
   194 
   171 /*!
   195 /*!
   172  *
   196  *
   173  */
   197  */
   174 bool RadioUiEngine::startRadio()
   198 bool RadioUiEngine::isInitialized() const
   175 {
   199 {
   176     Q_D( RadioUiEngine );
   200     Q_D( const RadioUiEngine );
   177     return d->startRadio();
   201     return !d->mEngineWrapper.isNull();
       
   202 }
       
   203 
       
   204 /*!
       
   205  *
       
   206  */
       
   207 bool RadioUiEngine::init()
       
   208 {
       
   209     Q_D( RadioUiEngine );
       
   210     return d->init();
   178 }
   211 }
   179 
   212 
   180 /*!
   213 /*!
   181  *
   214  *
   182  */
   215  */
   187 }
   220 }
   188 
   221 
   189 /*!
   222 /*!
   190  * Returns the settings handler owned by the engine
   223  * Returns the settings handler owned by the engine
   191  */
   224  */
   192 RadioSettings& RadioUiEngine::settings()
   225 RadioSettingsIf& RadioUiEngine::settings()
   193 {
   226 {
   194     Q_D( RadioUiEngine );
   227     Q_D( RadioUiEngine );
   195     return d->mEngineWrapper->settings();
   228     return d->mEngineWrapper->settings();
   196 }
   229 }
   197 
   230 
   198 /*!
   231 /*!
   199  * Returns the station model
   232  * Returns the station model
   200  */
   233  */
   201 RadioStationModel& RadioUiEngine::model()
   234 RadioStationModel& RadioUiEngine::stationModel()
   202 {
   235 {
   203     Q_D( RadioUiEngine );
   236     Q_D( RadioUiEngine );
   204     return *d->mStationModel;
   237     return *d->mStationModel;
   205 }
   238 }
   206 
   239 
   208  * Returns the history model
   241  * Returns the history model
   209  */
   242  */
   210 RadioHistoryModel& RadioUiEngine::historyModel()
   243 RadioHistoryModel& RadioUiEngine::historyModel()
   211 {
   244 {
   212     Q_D( RadioUiEngine );
   245     Q_D( RadioUiEngine );
   213     if ( !d->mHistoryModel ) {
       
   214         d->mHistoryModel = new RadioHistoryModel( *this );
       
   215     }
       
   216 
       
   217     return *d->mHistoryModel;
   246     return *d->mHistoryModel;
   218 }
   247 }
   219 
   248 
   220 /*!
   249 /*!
   221  * Returns the stations list
   250  * Creates a new filter model
   222  */
   251  */
   223 RadioStationFilterModel* RadioUiEngine::createNewFilterModel( QObject* parent )
   252 RadioStationFilterModel* RadioUiEngine::createNewFilterModel( QObject* parent )
   224 {
   253 {
   225     return new RadioStationFilterModel( *this, parent );
   254     return new RadioStationFilterModel( *this, parent );
   226 }
   255 }
   227 
   256 
   228 /*!
   257 /*!
   229  *
   258  * Creates a new carousel model
   230  */
   259  */
   231 RadioScannerEngine* RadioUiEngine::createScannerEngine()
   260 RadioCarouselModel* RadioUiEngine::carouselModel()
   232 {
   261 {
   233     Q_D( RadioUiEngine );
   262     Q_D( RadioUiEngine );
   234     if ( d->mScannerEngine.isNull() ) {
   263     if ( !d->mCarouselModel ) {
       
   264         d->mCarouselModel.reset( new RadioCarouselModel( *this, *d->mStationModel ) );
       
   265     }
       
   266 
       
   267     return d->mCarouselModel.data();
       
   268 }
       
   269 
       
   270 /*!
       
   271  *
       
   272  */
       
   273 RadioScannerEngine* RadioUiEngine::scannerEngine()
       
   274 {
       
   275     Q_D( RadioUiEngine );
       
   276     if ( !d->mScannerEngine ) {
   235         d->mScannerEngine = new RadioScannerEngine( *d );
   277         d->mScannerEngine = new RadioScannerEngine( *d );
   236     }
   278     }
   237     return d->mScannerEngine;
   279     return d->mScannerEngine;
   238 }
   280 }
   239 
   281 
   240 /*!
   282 /*!
   241  * Returns the stations list
       
   242  */
       
   243 RadioMonitorService& RadioUiEngine::monitor()
       
   244 {
       
   245     Q_D( const RadioUiEngine );
       
   246     return *d->mMonitorService;
       
   247 }
       
   248 
       
   249 /*!
       
   250  *
   283  *
   251  */
   284  */
   252 bool RadioUiEngine::isRadioOn() const
   285 bool RadioUiEngine::isRadioOn() const
   253 {
   286 {
   254     Q_D( const RadioUiEngine );
   287     Q_D( const RadioUiEngine );
   259  *
   292  *
   260  */
   293  */
   261 bool RadioUiEngine::isScanning() const
   294 bool RadioUiEngine::isScanning() const
   262 {
   295 {
   263     Q_D( const RadioUiEngine );
   296     Q_D( const RadioUiEngine );
   264     return d->mScannerEngine != 0;
   297     if ( d->mScannerEngine ) {
       
   298         return d->mScannerEngine->isScanning();
       
   299     }
       
   300     return false;
   265 }
   301 }
   266 
   302 
   267 /*!
   303 /*!
   268  *
   304  *
   269  */
   305  */
   332  */
   368  */
   333 uint RadioUiEngine::frequencyStepSize() const
   369 uint RadioUiEngine::frequencyStepSize() const
   334 {
   370 {
   335     Q_D( const RadioUiEngine );
   371     Q_D( const RadioUiEngine );
   336     return d->mEngineWrapper->frequencyStepSize();
   372     return d->mEngineWrapper->frequencyStepSize();
       
   373 }
       
   374 
       
   375 /*!
       
   376  * Sets the mute status
       
   377  */
       
   378 void RadioUiEngine::setMute( bool muted )
       
   379 {
       
   380     Q_D( RadioUiEngine );
       
   381     d->mEngineWrapper->setMute( muted );
   337 }
   382 }
   338 
   383 
   339 /*!
   384 /*!
   340  *
   385  *
   341  */
   386  */
   407     Q_D( RadioUiEngine );
   452     Q_D( RadioUiEngine );
   408     d->mHistoryModel->addItem( artist, title, station );
   453     d->mHistoryModel->addItem( artist, title, station );
   409 }
   454 }
   410 
   455 
   411 /*!
   456 /*!
       
   457  *
       
   458  */
       
   459 uint RadioUiEngine::skipStation( StationSkip::Mode mode, uint startFrequency )
       
   460 {
       
   461     Q_D( RadioUiEngine );
       
   462     return d->skip( mode, startFrequency );
       
   463 }
       
   464 
       
   465 /*!
       
   466  *
       
   467  */
       
   468 void RadioUiEngine::openMusicStore( const RadioHistoryItem& item, MusicStore store )
       
   469 {
       
   470     Q_UNUSED( item );
       
   471     Q_UNUSED( store );
       
   472     //TODO: Integrate to music store
       
   473 }
       
   474 
       
   475 /*!
   412  * Public slot
   476  * Public slot
   413  * Tunes to the given frequency
   477  * Tunes to the given frequency
   414  */
   478  */
   415 void RadioUiEngine::tuneFrequency( uint frequency, const int sender )
   479 void RadioUiEngine::tuneFrequency( uint frequency, const int reason )
   416 {
   480 {
   417     Q_D( RadioUiEngine );
   481     Q_D( RadioUiEngine );
   418     if ( frequency != d->mStationModel->currentStation().frequency() && d->mEngineWrapper->isFrequencyValid( frequency ) ) {
   482     if ( frequency != d->mStationModel->currentStation().frequency() && d->mEngineWrapper->isFrequencyValid( frequency ) ) {
   419         LOG_FORMAT( "RadioUiEngine::tuneFrequency, frequency: %d", frequency );
   483         LOG_FORMAT( "RadioUiEngine::tuneFrequency, frequency: %d", frequency );
   420         d->cancelSeeking();
   484         d->cancelSeeking();
   421         d->mEngineWrapper->tuneFrequency( frequency, sender );
   485         d->mEngineWrapper->tuneFrequency( frequency, reason );
   422     }
   486     }
   423 }
   487 }
   424 
   488 
   425 /*!
   489 /*!
   426  * Public slot
   490  * Public slot
   427  * Tunes to the given frequency after a delay
   491  * Tunes to the given frequency after a delay
   428  */
   492  */
   429 void RadioUiEngine::tuneWithDelay( uint frequency, const int sender )
   493 void RadioUiEngine::tuneWithDelay( uint frequency, const int reason )
   430 {
   494 {
   431     Q_D( RadioUiEngine );
   495     Q_D( RadioUiEngine );
   432     if ( frequency != d->mStationModel->currentStation().frequency() &&  d->mEngineWrapper->isFrequencyValid( frequency ) ) {
   496     if ( frequency != d->mStationModel->currentStation().frequency() &&  d->mEngineWrapper->isFrequencyValid( frequency ) ) {
   433         LOG_FORMAT( "RadioEngineWrapperPrivate::tuneWithDelay, frequency: %d", frequency );
   497         LOG_FORMAT( "RadioEngineWrapperPrivate::tuneWithDelay, frequency: %d", frequency );
   434         d->cancelSeeking();
   498         d->cancelSeeking();
   435         d->mEngineWrapper->tuneWithDelay( frequency, sender );
   499         d->mEngineWrapper->tuneWithDelay( frequency, reason );
   436     }
   500     }
   437 }
   501 }
   438 
   502 
   439 /*!
   503 /*!
   440  * Public slot
   504  * Public slot
   469  *
   533  *
   470  */
   534  */
   471 void RadioUiEngine::toggleMute()
   535 void RadioUiEngine::toggleMute()
   472 {
   536 {
   473     Q_D( RadioUiEngine );
   537     Q_D( RadioUiEngine );
   474     d->mEngineWrapper->toggleMute();
   538     if ( !isScanning() ) {
       
   539         d->mEngineWrapper->setMute( !d->mEngineWrapper->isMuted() );
       
   540     }
   475 }
   541 }
   476 
   542 
   477 /*!
   543 /*!
   478  * Public slot
   544  * Public slot
   479  *
   545  *
   486 
   552 
   487 /*!
   553 /*!
   488  * Public slot
   554  * Public slot
   489  *
   555  *
   490  */
   556  */
   491 void RadioUiEngine::skipPrevious()
   557 void RadioUiEngine::seekStation( int seekDirection )
   492 {
       
   493     Q_D( RadioUiEngine );    
       
   494     d->skip( RadioUiEnginePrivate::Previous );
       
   495 }
       
   496 
       
   497 /*!
       
   498  * Public slot
       
   499  *
       
   500  */
       
   501 void RadioUiEngine::skipNext()
       
   502 {
       
   503     Q_D( RadioUiEngine );
       
   504     d->skip( RadioUiEnginePrivate::Next );
       
   505 }
       
   506 
       
   507 /*!
       
   508  * Public slot
       
   509  *
       
   510  */
       
   511 void RadioUiEngine::seekUp()
       
   512 {
   558 {
   513     if ( isAntennaAttached() ) {
   559     if ( isAntennaAttached() ) {
   514         Q_D( RadioUiEngine );
   560         Q_D( RadioUiEngine );
   515         emitSeekingStarted( Seeking::Up );
   561         Seeking::Direction direction = static_cast<Seeking::Direction>( seekDirection );
   516         d->mEngineWrapper->startSeeking( Seeking::Up, TuneReason::Seek );
   562         emitSeekingStarted( direction );
   517     }
   563         d->mEngineWrapper->startSeeking( direction, TuneReason::Seek );
   518 }
       
   519 
       
   520 /*!
       
   521  * Public slot
       
   522  *
       
   523  */
       
   524 void RadioUiEngine::seekDown()
       
   525 {
       
   526     if ( isAntennaAttached() ) {
       
   527         Q_D( RadioUiEngine );
       
   528         emitSeekingStarted( Seeking::Down );
       
   529         d->mEngineWrapper->startSeeking( Seeking::Down, TuneReason::Seek );
       
   530     }
   564     }
   531 }
   565 }
   532 
   566 
   533 /*!
   567 /*!
   534  * Public slot
   568  * Public slot
   540 
   574 
   541     QStringList arguments;
   575     QStringList arguments;
   542     arguments << KSongRecognitionAppParams;
   576     arguments << KSongRecognitionAppParams;
   543 
   577 
   544     bool started = QProcess::startDetached( KSongRecognitionApp, arguments );
   578     bool started = QProcess::startDetached( KSongRecognitionApp, arguments );
       
   579     Q_UNUSED( started );
   545     LOG_ASSERT( started, LOG_FORMAT("RadioUiEngine::launchSongRecognition() failed to start %s", GETSTRING( KSongRecognitionApp ) ) );
   580     LOG_ASSERT( started, LOG_FORMAT("RadioUiEngine::launchSongRecognition() failed to start %s", GETSTRING( KSongRecognitionApp ) ) );
   546 }
   581 }
   547 
   582 
   548 /*!
   583 /*!
   549  * Function used by the private implementation to emit a tunedToFrequency signal
   584  * Function used by the private implementation to emit a tunedToFrequency signal
   557  * Function used by the private implementation to emit a seekingStarted signal
   592  * Function used by the private implementation to emit a seekingStarted signal
   558  */
   593  */
   559 void RadioUiEngine::emitSeekingStarted( Seeking::Direction direction )
   594 void RadioUiEngine::emitSeekingStarted( Seeking::Direction direction )
   560 {
   595 {
   561     emit seekingStarted( direction );
   596     emit seekingStarted( direction );
   562     Q_D( RadioUiEngine );
       
   563     d->mMonitorService->notifyRadioStatus( RadioStatus::Seeking );
       
   564 }
   597 }
   565 
   598 
   566 /*!
   599 /*!
   567  * Function used by the private implementation to emit a radioStatusChanged signal
   600  * Function used by the private implementation to emit a radioStatusChanged signal
   568  */
   601  */