diff -r 63aabac4416d -r f54ebcfc1b80 radioapp/radiouiengine/src/radiouiengine.cpp --- a/radioapp/radiouiengine/src/radiouiengine.cpp Fri Apr 16 14:58:55 2010 +0300 +++ b/radioapp/radiouiengine/src/radiouiengine.cpp Mon May 03 12:31:41 2010 +0300 @@ -33,10 +33,15 @@ #include "radiologger.h" #include "radioenginewrapper.h" #include "radiostationmodel.h" -#include "radioplaylogmodel.h" +#include "radiohistorymodel.h" #include "radiosettings.h" #include "radiostationfiltermodel.h" -#include "radiolocalization.h" +#include "radioscannerengine.h" +#ifdef BUILD_WIN32 +# include "radiomonitorservice_win32.h" +#else +# include "radiomonitorservice.h" +#endif // Constants const QString KPathFormatter = "%1:%2%3"; @@ -44,6 +49,88 @@ const QString KSongRecognitionApp = "Shazam_0x200265B3.exe"; const QString KSongRecognitionAppParams = "-listen"; +struct GenreStruct + { + int mGenreCode; + const char* mInCarousel; + const char* mInStationsList; + const char* mInHomeScreen; + }; + +const GenreStruct EuropeanGenres[] = + { + { GenreEurope::RdsNone, "", "", "" } + ,{ GenreEurope::RdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" } + ,{ GenreEurope::RdsCurrentAffairs, "txt_rad_info_current_affairs", "txt_rad_dblist_l1_mhz_val_current_affairs", "txt_rad_info_current_affairs_hs" } + ,{ GenreEurope::RdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" } + ,{ GenreEurope::RdsSport, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" } + ,{ GenreEurope::RdsEducation, "txt_rad_info_education", "txt_rad_dblist_l1_mhz_val_education", "txt_rad_info_education_hs" } + ,{ GenreEurope::RdsDrama, "txt_rad_info_drama", "txt_rad_dblist_l1_mhz_val_drama", "txt_rad_info_drama_hs" } + ,{ GenreEurope::RdsCulture, "txt_rad_info_culture", "txt_rad_dblist_l1_mhz_val_culture", "txt_rad_info_culture_hs" } + ,{ GenreEurope::RdsScience, "txt_rad_info_science", "txt_rad_dblist_l1_mhz_val_science", "txt_rad_info_science_hs" } + ,{ GenreEurope::RdsVariedSpeech, "txt_rad_info_varied", "txt_rad_dblist_l1_mhz_val_varied", "txt_rad_info_varied_hs" } + ,{ GenreEurope::RdsPopMusic, "txt_rad_info_pop_music", "txt_rad_dblist_l1_mhz_val_pop_music", "txt_rad_info_pop_music_hs" } + ,{ GenreEurope::RdsRockMusic, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" } + ,{ GenreEurope::RdsEasyListening, "txt_rad_info_easy_listening", "txt_rad_dblist_l1_mhz_val_easy_listening", "txt_rad_info_easy_listening_hs" } + ,{ GenreEurope::RdsLightClassical, "txt_rad_info_light_classical", "txt_rad_dblist_l1_mhz_val_light_classical", "txt_rad_info_light_classical_hs" } + ,{ GenreEurope::RdsSeriousClassical, "txt_rad_info_serious_classical", "txt_rad_dblist_l1_mhz_val_serious_classical", "txt_rad_info_serious_classical_hs" } + ,{ GenreEurope::RdsOtherMusic, "txt_rad_info_other_music", "txt_rad_dblist_l1_mhz_val_other_music", "txt_rad_info_other_music_hs" } + ,{ GenreEurope::RdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" } + ,{ GenreEurope::RdsFinance, "txt_rad_info_finance", "txt_rad_dblist_l1_mhz_val_finance", "txt_rad_info_finance_hs" } + ,{ GenreEurope::RdsChildrensProgrammes, "txt_rad_info_childrens_programmes", "txt_rad_dblist_l1_mhz_val_childrens_programmes", "txt_rad_info_childrens_programmes_hs" } + ,{ GenreEurope::RdsSocialAffairs, "txt_rad_info_social_affairs", "txt_rad_dblist_l1_mhz_val_social_affairs", "txt_rad_info_social_affairs_hs" } + ,{ GenreEurope::RdsReligion, "txt_rad_info_religion", "txt_rad_dblist_l1_mhz_val_religion", "txt_rad_info_religion_hs" } + ,{ GenreEurope::RdsPhoneIn, "txt_rad_info_phone_in", "txt_rad_dblist_l1_mhz_val_phone_in", "txt_rad_info_phone_in_hs" } + ,{ GenreEurope::RdsTravel, "txt_rad_info_travel", "txt_rad_dblist_l1_mhz_val_travel", "txt_rad_info_travel_hs" } + ,{ GenreEurope::RdsLeisure, "txt_rad_info_leisure", "txt_rad_dblist_l1_mhz_val_leisure", "txt_rad_info_leisure_hs" } + ,{ GenreEurope::RdsJazzMusic, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" } + ,{ GenreEurope::RdsCountryMusic, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" } + ,{ GenreEurope::RdsNationalMusic, "txt_rad_info_national_music", "txt_rad_dblist_l1_mhz_val_national_music", "txt_rad_info_national_music_hs" } + ,{ GenreEurope::RdsOldiesMusic, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" } + ,{ GenreEurope::RdsFolkMusic, "txt_rad_info_folk_music", "txt_rad_dblist_l1_mhz_val_folk_music", "txt_rad_info_folk_music_hs" } + ,{ GenreEurope::RdsDocumentary, "txt_rad_info_documentary", "txt_rad_dblist_l1_mhz_val_documentary", "txt_rad_info_documentary_hs" } + ,{ GenreEurope::RdsAlarmTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" } + ,{ GenreEurope::RdsAlarm, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" } + }; +const int EuropeanGenresCount = sizeof( EuropeanGenres ) / sizeof ( EuropeanGenres[0] ); + +const GenreStruct AmericanGenres[] = + { + { GenreAmerica::RbdsNone, "", "", "" } + ,{ GenreAmerica::RbdsNews, "txt_rad_info_news", "txt_rad_dblist_l1_mhz_val_news", "txt_rad_info_news_hs" } + ,{ GenreAmerica::RbdsInformation, "txt_rad_info_information", "txt_rad_dblist_l1_mhz_val_information", "txt_rad_info_information_hs" } + ,{ GenreAmerica::RbdsSports, "txt_rad_info_sport", "txt_rad_dblist_l1_mhz_val_sport", "txt_rad_info_sport_hs" } + ,{ GenreAmerica::RbdsTalk, "txt_rad_info_talk", "txt_rad_dblist_l1_mhz_val_talk", "txt_rad_info_talk_hs" } + ,{ GenreAmerica::RbdsRock, "txt_rad_info_rock_music", "txt_rad_dblist_l1_mhz_val_rock_music", "txt_rad_info_rock_music_hs" } //TODO: Check + ,{ GenreAmerica::RbdsClassicRock, "txt_rad_info_classic_rock", "txt_rad_dblist_l1_mhz_val_classic_rock", "txt_rad_info_classic_rock_hs" } + ,{ GenreAmerica::RbdsAdultHits, "txt_rad_info_adult_hits", "txt_rad_dblist_l1_mhz_val_adult_hits", "txt_rad_info_adult_hits_hs" } + ,{ GenreAmerica::RbdsSoftRock, "txt_rad_info_soft_rock", "txt_rad_dblist_l1_mhz_val_soft_rock", "txt_rad_info_soft_rock_hs" } + ,{ GenreAmerica::RbdsTop40, "txt_rad_info_top_40", "txt_rad_dblist_l1_mhz_val_top_40", "txt_rad_info_top_40_hs" } + ,{ GenreAmerica::RbdsCountry, "txt_rad_info_country_music", "txt_rad_dblist_l1_mhz_val_country_music", "txt_rad_info_country_music_hs" } //TODO: Check + ,{ GenreAmerica::RbdsOldies, "txt_rad_info_oldies_music", "txt_rad_dblist_l1_mhz_val_oldies_music", "txt_rad_info_oldies_music_hs" } //TODO: Check + ,{ GenreAmerica::RbdsSoft, "txt_rad_info_soft", "txt_rad_dblist_l1_mhz_val_soft", "txt_rad_info_soft_hs" } + ,{ GenreAmerica::RbdsNostalgia, "txt_rad_info_nostalgia", "txt_rad_dblist_l1_mhz_val_nostalgia", "txt_rad_info_nostalgia_hs" } + ,{ GenreAmerica::RbdsJazz, "txt_rad_info_jazz_music", "txt_rad_dblist_l1_mhz_val_jazz_music", "txt_rad_info_jazz_music_hs" } //TODO: Check + ,{ GenreAmerica::RbdsClassical, "txt_rad_info_classical", "txt_rad_dblist_l1_mhz_val_classical", "txt_rad_info_classical_hs" } + ,{ GenreAmerica::RbdsRhythmAndBlues, "txt_rad_info_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_rhythm_and_blues", "txt_rad_info_rhythm_and_blues_hs" } + ,{ GenreAmerica::RbdsSoftRhythmAndBlues, "txt_rad_info_soft_rhythm_and_blues", "txt_rad_dblist_l1_mhz_val_soft_rhythm_and_blues", "txt_rad_info_soft_rhythm_and_blues_hs" } + ,{ GenreAmerica::RbdsLanguage, "txt_rad_info_language", "txt_rad_dblist_l1_mhz_val_language", "txt_rad_info_language_hs" } + ,{ GenreAmerica::RbdsReligiousMusic, "txt_rad_info_religious_music", "txt_rad_dblist_l1_mhz_val_religious_music", "txt_rad_info_religious_music_hs" } + ,{ GenreAmerica::RbdsReligiousTalk, "txt_rad_info_religious_talk", "txt_rad_dblist_l1_mhz_val_religious_talk", "txt_rad_info_religious_talk_hs" } + ,{ GenreAmerica::RbdsPersonality, "txt_rad_info_personality", "txt_rad_dblist_l1_mhz_val_personality", "txt_rad_info_personality_hs" } + ,{ GenreAmerica::RbdsPublic, "txt_rad_info_public", "txt_rad_dblist_l1_mhz_val_public", "txt_rad_info_public_hs" } + ,{ GenreAmerica::RbdsCollege, "txt_rad_info_college", "txt_rad_dblist_l1_mhz_val_college", "txt_rad_info_college_hs" } + ,{ GenreAmerica::RbdsUnassigned1, "", "", "" } + ,{ GenreAmerica::RbdsUnassigned2, "", "", "" } + ,{ GenreAmerica::RbdsUnassigned3, "", "", "" } + ,{ GenreAmerica::RbdsUnassigned4, "", "", "" } + ,{ GenreAmerica::RbdsUnassigned5, "", "", "" } + ,{ GenreAmerica::RbdsWeather, "txt_rad_info_weather", "txt_rad_dblist_l1_mhz_val_weather", "txt_rad_info_weather_hs" }//TODO: Check + ,{ GenreAmerica::RbdsEmergencyTest, "txt_rad_info_alarm_test", "txt_rad_dblist_l1_mhz_val_alarm_test", "txt_rad_info_alarm_test_hs" }//TODO: Check + ,{ GenreAmerica::RbdsEmergency, "txt_rad_info_alarm", "txt_rad_dblist_l1_mhz_val_alarm", "txt_rad_info_alarm_hs" }//TODO: Check + }; +const int AmericanGenresCount = sizeof( AmericanGenres ) / sizeof ( AmericanGenres[0] ); + /*! * */ @@ -67,37 +154,6 @@ /*! * */ -QString RadioUiEngine::parseFrequency( uint frequency ) -{ - return QTRANSLATE( KFrequencyMhz ).arg( RadioStation::parseFrequency( frequency ) ); -} - -/*! - * - */ -QString RadioUiEngine::nameOrFrequency( const RadioStation& station, uint frequency ) -{ - if ( frequency == 0 ) - { - frequency = station.frequency(); - } - - QString text = ""; - if ( station.isValid() && !station.name().isEmpty() ) - { - text = station.name(); - } - else - { - text = parseFrequency( frequency ); - } - - return text; -} - -/*! - * - */ RadioUiEngine::RadioUiEngine( QObject* parent ) : QObject( parent ), d_ptr( new RadioUiEnginePrivate( this ) ) @@ -109,6 +165,7 @@ */ RadioUiEngine::~RadioUiEngine() { + delete d_ptr; } /*! @@ -148,16 +205,16 @@ } /*! - * Returns the play log model + * Returns the history model */ -RadioPlayLogModel& RadioUiEngine::playLogModel() +RadioHistoryModel& RadioUiEngine::historyModel() { Q_D( RadioUiEngine ); - if ( !d->mPlayLogModel ) { - d->mPlayLogModel = new RadioPlayLogModel( *this ); + if ( !d->mHistoryModel ) { + d->mHistoryModel = new RadioHistoryModel( *this ); } - return *d->mPlayLogModel; + return *d->mHistoryModel; } /*! @@ -169,6 +226,18 @@ } /*! + * + */ +RadioScannerEngine* RadioUiEngine::createScannerEngine() +{ + Q_D( RadioUiEngine ); + if ( d->mScannerEngine.isNull() ) { + d->mScannerEngine = new RadioScannerEngine( *d ); + } + return d->mScannerEngine; +} + +/*! * Returns the stations list */ RadioMonitorService& RadioUiEngine::monitor() @@ -192,7 +261,7 @@ bool RadioUiEngine::isScanning() const { Q_D( const RadioUiEngine ); - return d->mEngineWrapper->isScanning(); + return d->mScannerEngine != 0; } /*! @@ -270,24 +339,6 @@ /*! * */ -void RadioUiEngine::scanFrequencyBand() -{ - Q_D( RadioUiEngine ); - d->mEngineWrapper->scanFrequencyBand(); -} - -/*! - * - */ -void RadioUiEngine::cancelScanFrequencyBand() -{ - Q_D( RadioUiEngine ); - d->mEngineWrapper->cancelScanFrequencyBand(); -} - -/*! - * - */ QList RadioUiEngine::stationsInRange( uint minFrequency, uint maxFrequency ) { Q_D( RadioUiEngine ); @@ -297,7 +348,7 @@ /*! * */ -QString RadioUiEngine::genreToString( int genre ) +QString RadioUiEngine::genreToString( int genre, GenreTarget::Target target ) { RadioRegion::Region currentRegion = region(); @@ -306,10 +357,13 @@ for( int i = 0; i < genreCount; ++i ) { if ( genreArray[i].mGenreCode == genre ) { - return TRANSLATE( genreArray[i].mTranslation ); -// return qApp->translate( GenreContext, -// genreArray[i].mTranslation.source, -// genreArray[i].mTranslation.comment ); + if ( target == GenreTarget::Carousel ) { + return qtTrId( genreArray[i].mInCarousel ); + } else if ( target == GenreTarget::StationsList ) { + return qtTrId( genreArray[i].mInStationsList ); + } else if ( target == GenreTarget::HomeScreen ) { + return qtTrId( genreArray[i].mInHomeScreen ); + } } } @@ -351,7 +405,7 @@ void RadioUiEngine::addRecognizedSong( const QString& artist, const QString& title, const RadioStation& station ) { Q_D( RadioUiEngine ); - d->mPlayLogModel->addItem( artist, title, station ); + d->mHistoryModel->addItem( artist, title, station ); } /*! @@ -363,6 +417,7 @@ Q_D( RadioUiEngine ); if ( frequency != d->mStationModel->currentStation().frequency() && d->mEngineWrapper->isFrequencyValid( frequency ) ) { LOG_FORMAT( "RadioUiEngine::tuneFrequency, frequency: %d", frequency ); + d->cancelSeeking(); d->mEngineWrapper->tuneFrequency( frequency, sender ); } } @@ -376,6 +431,7 @@ Q_D( RadioUiEngine ); if ( frequency != d->mStationModel->currentStation().frequency() && d->mEngineWrapper->isFrequencyValid( frequency ) ) { LOG_FORMAT( "RadioEngineWrapperPrivate::tuneWithDelay, frequency: %d", frequency ); + d->cancelSeeking(); d->mEngineWrapper->tuneWithDelay( frequency, sender ); } } @@ -393,7 +449,7 @@ d->mEngineWrapper->isFrequencyValid( station.frequency() ) ) { LOG_FORMAT( "RadioEngineWrapperPrivate::tunePreset, presetIndexPosition: %d", presetIndex ); - d->mEngineWrapper->tuneFrequency( station.frequency(), CommandSender::Unspecified ); + d->mEngineWrapper->tuneFrequency( station.frequency(), TuneReason::Unspecified ); } } } @@ -454,8 +510,11 @@ */ void RadioUiEngine::seekUp() { - Q_D( RadioUiEngine ); - d->mEngineWrapper->startSeeking( Seeking::Up ); + if ( isAntennaAttached() ) { + Q_D( RadioUiEngine ); + emitSeekingStarted( Seeking::Up ); + d->mEngineWrapper->startSeeking( Seeking::Up, TuneReason::Seek ); + } } /*! @@ -464,8 +523,11 @@ */ void RadioUiEngine::seekDown() { - Q_D( RadioUiEngine ); - d->mEngineWrapper->startSeeking( Seeking::Down ); + if ( isAntennaAttached() ) { + Q_D( RadioUiEngine ); + emitSeekingStarted( Seeking::Down ); + d->mEngineWrapper->startSeeking( Seeking::Down, TuneReason::Seek ); + } } /*! @@ -496,9 +558,9 @@ */ void RadioUiEngine::emitSeekingStarted( Seeking::Direction direction ) { - if ( isAntennaAttached() ) { - emit seekingStarted( direction ); - } + emit seekingStarted( direction ); + Q_D( RadioUiEngine ); + d->mMonitorService->notifyRadioStatus( RadioStatus::Seeking ); } /*! @@ -542,17 +604,10 @@ } /*! - * Function used by the private implementation to emit a scanAndSaveFinished signal + * Function used by the private implementation to emit a antennaStatusChanged signal */ -void RadioUiEngine::emitScanAndSaveFinished() +void RadioUiEngine::emitAntennaStatusChanged( bool connected ) { - emit scanAndSaveFinished(); -} -/*! - * Function used by the private implementation to emit a headsetStatusChanged signal - */ -void RadioUiEngine::emitheadsetStatusChanged( bool connected ) -{ - emit headsetStatusChanged( connected ); + emit antennaStatusChanged( connected ); }