radioapp/radiouiengine/src/radiouiengine.cpp
changeset 33 11b6825f0862
parent 32 189d20c34778
child 37 451b2e1545b2
child 41 3a6b55c6390c
--- a/radioapp/radiouiengine/src/radiouiengine.cpp	Wed Jun 23 18:12:57 2010 +0300
+++ b/radioapp/radiouiengine/src/radiouiengine.cpp	Tue Jul 06 14:16:27 2010 +0300
@@ -42,35 +42,43 @@
 #include "radiologger.h"
 
 // Constants
-const uint DEFAULT_MIN_FREQUENCY = 87500000;
 const uint RADIO_CENREP_UID = 0x2002FF52;
 const uint RADIO_CENREP_FREQUENCY_KEY = 0x207;
+const uint RADIO_CENREP_HEADSET_VOLUME = 0x200;
 
+const QLatin1String OVI_STORE_URL( "http://www.music.nokia.co.uk/Touch/Search.aspx?artistsearch=#artist#&titlesearch=#title#" );
 const QLatin1String OTHER_STORE_URL( "http://www.amazon.com/gp/search/ref=sr_adv_m_digital/?search-alias=digital-music&field-author=#artist#&field-title=#title#" );
 const QLatin1String OTHER_STORE_ARTIST_TAG( "#artist#" );
 const QLatin1String OTHER_STORE_TITLE_TAG( "#title#" );
 const char WHITESPACE = ' ';
 const char WHITESPACE_REPLACEMENT = '+';
 
+// Constants used when launching radio server
+const QLatin1String RADIO_SERVER_NAME( "radioserver.exe" );
+const QLatin1String RADIO_RANGE_USEURO( "useuro" );
+const QLatin1String RADIO_RANGE_JAPAN( "japan" );
+
+// ====== STATIC FUNCTIONS ========
+
 /*!
- *
+ * Gets the last tuned frequency from central repository
  */
-uint RadioUiEngine::lastTunedFrequency()
+uint RadioUiEngine::lastTunedFrequency( uint defaultFrequency )
 {
-    uint frequency = DEFAULT_MIN_FREQUENCY;
+    uint frequency = defaultFrequency;
 
 #ifdef BUILD_WIN32
     QScopedPointer<QSettings> settings( new QSettings( "Nokia", "QtFmRadio" ) );
     frequency = settings->value( "CurrentFreq", DEFAULT_MIN_FREQUENCY ).toUInt();
     if ( frequency == 0 ) {
-        frequency = DEFAULT_MIN_FREQUENCY;
+        frequency = defaultFrequency;
     }
 #else
     QScopedPointer<XQSettingsManager> settings( new XQSettingsManager() );
     XQSettingsKey key( XQSettingsKey::TargetCentralRepository, RADIO_CENREP_UID, RADIO_CENREP_FREQUENCY_KEY );
     frequency = settings->readItemValue( key, XQSettingsManager::TypeInt ).toUInt();
     if ( frequency == 0 ) {
-        frequency = DEFAULT_MIN_FREQUENCY;
+        frequency = defaultFrequency;
     }
 #endif
 
@@ -78,6 +86,42 @@
 }
 
 /*!
+ * Gets the last used volume level
+ */
+int RadioUiEngine::lastVolume()
+{
+    int volume = DEFAULT_VOLUME_LEVEL;
+
+#ifndef BUILD_WIN32
+    QScopedPointer<XQSettingsManager> settings( new XQSettingsManager() );
+    XQSettingsKey key( XQSettingsKey::TargetCentralRepository, RADIO_CENREP_UID, RADIO_CENREP_HEADSET_VOLUME );
+    volume = settings->readItemValue( key, XQSettingsManager::TypeInt ).toInt();
+    if ( volume == 0 ) {
+        volume = DEFAULT_VOLUME_LEVEL;
+    }
+#endif
+
+    return volume;
+}
+
+/*!
+ * Launches the radio server process
+ */
+void RadioUiEngine::launchRadioServer()
+{
+    QStringList args;
+    args << RADIO_RANGE_USEURO; //TODO: Determine current region
+    args << QString::number( lastTunedFrequency( 0 ) );
+    args << QString::number( lastVolume() );
+
+    QProcess serverProcess;
+    bool success = serverProcess.startDetached( RADIO_SERVER_NAME, args );
+    LOG_ASSERT( success, LOG( "Failed to start radio server!" ) );
+}
+
+// ====== MEMBER FUNCTIONS ========
+
+/*!
  *
  */
 RadioUiEngine::RadioUiEngine( QObject* parent ) :
@@ -210,10 +254,14 @@
 RadioScannerEnginePtr RadioUiEngine::createScannerEngine()
 {
     Q_D( RadioUiEngine );
-    if ( !d->mScannerEngine ) {
-        d->mScannerEngine = RadioScannerEnginePtr( new RadioScannerEngine( *d ) );
-    }
-    return d->mScannerEngine;
+#if defined BUILD_WIN32 || defined __WINS__
+    Q_ASSERT_X( !d->mScannerEngine, "RadioUiEngine::createScannerEngine", "Previous scanner instance not freed" );
+#endif
+
+    RadioScannerEnginePtr enginePtr( new RadioScannerEngine( *d ) );
+    d->mScannerEngine = enginePtr;
+
+    return enginePtr;
 }
 
 /*!
@@ -376,20 +424,16 @@
  */
 void RadioUiEngine::openMusicStore( const RadioHistoryItem& item, MusicStore store )
 {
-    if ( store == OviStore ) {
-        //TODO: Integrate to music store
-    } else if ( store == OtherStore ) {
-        QString artist = item.artist();
-        artist.replace( WHITESPACE, WHITESPACE_REPLACEMENT );
-        QString title = item.title();
-        title.replace( WHITESPACE, WHITESPACE_REPLACEMENT );
+    QString artist = item.artist();
+    artist.replace( WHITESPACE, WHITESPACE_REPLACEMENT );
+    QString title = item.title();
+    title.replace( WHITESPACE, WHITESPACE_REPLACEMENT );
 
-        QString url( OTHER_STORE_URL );
-        url.replace( OTHER_STORE_ARTIST_TAG, artist );
-        url.replace( OTHER_STORE_TITLE_TAG, title );
+    QString url = store == OviStore ? OVI_STORE_URL : OTHER_STORE_URL;
+    url.replace( OTHER_STORE_ARTIST_TAG, artist );
+    url.replace( OTHER_STORE_TITLE_TAG, title );
 
-        launchBrowser( url );
-    }
+    launchBrowser( url );
 }
 
 /*!