diff -r f54ebcfc1b80 -r afea38384506 radioapp/radiouiengine/src/radiouiengine_p.cpp --- a/radioapp/radiouiengine/src/radiouiengine_p.cpp Mon May 03 12:31:41 2010 +0300 +++ b/radioapp/radiouiengine/src/radiouiengine_p.cpp Fri May 14 15:52:32 2010 +0300 @@ -18,7 +18,7 @@ // System includes #include #include -#include +#include #ifndef BUILD_WIN32 # include # include @@ -31,6 +31,8 @@ #include "radioenginewrapper.h" #include "radiostationmodel.h" #include "radiostationmodel_p.h" +#include "radiohistorymodel.h" +#include "radiocarouselmodel.h" #include "radiopresetstorage.h" #include "radiosettings.h" #include "radiostation.h" @@ -49,12 +51,7 @@ * */ RadioUiEnginePrivate::RadioUiEnginePrivate( RadioUiEngine* engine ) : - q_ptr( engine ), - mEngineWrapper( 0 ), - mStationModel( 0 ), - mHistoryModel( 0 ), - mControlService( 0 ), - mMonitorService( 0 ) + q_ptr( engine ) { } @@ -67,7 +64,8 @@ XQSettingsManager settingsManager; XQPublishAndSubscribeUtils utils( settingsManager ); XQPublishAndSubscribeSettingsKey radioStartupKey( KRadioPSUid, KRadioStartupKey ); - utils.deleteProperty( radioStartupKey ); + bool deleted = utils.deleteProperty( radioStartupKey ); + LOG_ASSERT( deleted, LOG( "RadioUiEnginePrivate::~RadioUiEnginePrivate(). Failed to delete P&S key" ) ); #endif } @@ -83,27 +81,32 @@ /*! * */ -bool RadioUiEnginePrivate::startRadio() +bool RadioUiEnginePrivate::init() { #ifndef BUILD_WIN32 - mControlService = new RadioControlService( *q_ptr ); + mControlService.reset( new RadioControlService( *q_ptr ) ); #endif - mMonitorService = new RadioMonitorService( *q_ptr ); - mStationModel = new RadioStationModel( *this ); + mMonitorService.reset( new RadioMonitorService( *this ) ); + mStationModel.reset( new RadioStationModel( *this ) ); mEngineWrapper.reset( new RadioEngineWrapper( mStationModel->stationHandlerIf() ) ); mEngineWrapper->addObserver( this ); mPresetStorage.reset( new RadioPresetStorage() ); mStationModel->initialize( mPresetStorage.data(), mEngineWrapper.data() ); + mHistoryModel.reset( new RadioHistoryModel( *q_ptr ) ); #ifndef BUILD_WIN32 // Write the startup timestamp to P&S key for the homescreen widget XQSettingsManager settingsManager; XQPublishAndSubscribeUtils utils( settingsManager ); XQPublishAndSubscribeSettingsKey radioStartupKey( KRadioPSUid, KRadioStartupKey ); - utils.defineProperty( radioStartupKey, XQSettingsManager::TypeVariant ); - settingsManager.writeItemValue( radioStartupKey, QVariant( QTime::currentTime() ) ); + bool defined = utils.defineProperty( radioStartupKey, XQSettingsManager::TypeInt ); + if ( defined ) { + settingsManager.writeItemValue( radioStartupKey, (int)QDateTime::currentDateTime().toTime_t() ); + } #endif + mMonitorService->init(); + return mEngineWrapper->isEngineConstructed(); } @@ -113,7 +116,6 @@ void RadioUiEnginePrivate::cancelSeeking() { mEngineWrapper->cancelSeeking(); - mMonitorService->notifyRadioStatus( mEngineWrapper->isMuted() ? RadioStatus::Muted : RadioStatus::Playing ); } /*! @@ -131,7 +133,6 @@ { Q_Q( RadioUiEngine ); q->emitTunedToFrequency( frequency, reason ); - mMonitorService->notifyRadioStatus( RadioStatus::Playing ); } /*! @@ -195,7 +196,6 @@ { Q_Q( RadioUiEngine ); q->emitMuteChanged( muted ); - mMonitorService->notifyRadioStatus( muted ? RadioStatus::Muted : RadioStatus::Playing ); } /*! @@ -214,7 +214,6 @@ { Q_Q( RadioUiEngine ); q->emitAntennaStatusChanged( connected ); - mMonitorService->notifyAntennaStatus( connected ); } /*! @@ -222,7 +221,7 @@ */ void RadioUiEnginePrivate::skipPrevious() { - skip( Previous ); + skip( StationSkip::PreviousFavorite ); } /*! @@ -230,55 +229,23 @@ */ void RadioUiEnginePrivate::skipNext() { - skip( Next ); + skip( StationSkip::NextFavorite ); } /*! - * Tunes to next or previous favorite preset + * Tunes to next or previous station */ -void RadioUiEnginePrivate::skip( RadioUiEnginePrivate::TuneDirection direction ) +uint RadioUiEnginePrivate::skip( StationSkip::Mode mode, uint startFrequency ) { - LOG_FORMAT( "RadioUiEnginePrivate::skip: direction: %d", direction ); - - //TODO: Refactor to go through RadioStationModel - QList favorites; - const uint currentFreq = mStationModel->currentStation().frequency(); - - // Find all favorites - foreach( const RadioStation& station, mStationModel->list() ) { - if ( station.isFavorite() && station.frequency() != currentFreq ) { - favorites.append( station.frequency() ); - } - } - - const int favoriteCount = favorites.count(); - if ( favoriteCount == 0 ) { - return; + LOG_FORMAT( "RadioUiEnginePrivate::skip: mode: %d", mode ); + if ( startFrequency == 0 ) { + startFrequency = mEngineWrapper->currentFrequency(); } - // Find the previous and next favorite from current frequency - uint previous = 0; - uint next = 0; - foreach( uint favorite, favorites ) { - if ( favorite > currentFreq ) { - next = favorite; - break; - } - previous = favorite; - } + const uint newFrequency = mStationModel->findClosest( startFrequency, mode ).frequency(); - if ( direction == RadioUiEnginePrivate::Previous ) { - if ( previous == 0 ) { - previous = favorites.last(); - } - LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", currentFreq, previous ); - mEngineWrapper->tuneFrequency( previous, TuneReason::Unspecified ); - } else { - if ( next == 0 ) { - next = favorites.first(); - } - LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", currentFreq, next ); - mEngineWrapper->tuneFrequency( next, TuneReason::Unspecified ); - } + LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", startFrequency, newFrequency ); + mEngineWrapper->tuneFrequency( newFrequency, TuneReason::Skip ); + return newFrequency; }