hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp
changeset 16 f54ebcfc1b80
parent 14 63aabac4416d
child 19 afea38384506
--- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp	Mon May 03 12:31:41 2010 +0300
@@ -21,14 +21,17 @@
 // User includes
 #include "fmradiohswidgetradioserviceclient.h"
 #include "fmradiohswidget.h"
+#include "radioservicedef.h"
+#include "radionotificationdata.h"
 
 /*!
  Constructor
  */
 FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) :
     QObject(parent),
-    mRadioInformationServiceRequest(0),
-    mRadioControlServiceRequest(0)
+    mRadioInformationServiceRequest( 0 ),
+    mRadioControlServiceRequest(0),
+    mDataInitialized( false )
 {
 }
 
@@ -41,15 +44,25 @@
 }
 
 /*!
+ * Initialize all data
+ */
+void FmRadioHsWidgetRadioServiceClient::init()
+{
+    const bool radioIsRunning = false; //TODO: Find out if radio is running. Use P&S key for now
+    if ( radioIsRunning ) {
+        startMonitoring();
+    }
+}
+
+
+/*!
  Starting of FM Radio.
- 
- /param startupState 
+
+ /param startupState
  */
 void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();
-    }
+    createControlServiceRequest();
 
     int commandId = 0;
 
@@ -81,9 +94,7 @@
  */
 void FmRadioHsWidgetRadioServiceClient::doBringFmRadioToForeground(bool toForeground)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();
-    }
+    createControlServiceRequest();
     QVariant commandArgument;
     if (toForeground) {
         // TODO: Include header and remove comment.
@@ -144,9 +155,7 @@
     /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation,
         false);*/
     
-    if (!mRadioInformationServiceRequest) {
-        createMonitorServiceRequest();
-    }
+    createMonitorServiceRequest();
     bool res = mRadioInformationServiceRequest->send();
 
     /*if (req) {*/
@@ -196,8 +205,7 @@
 void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel(
     FmRadioChannelChangeCommand command)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();    }
+    createControlServiceRequest();
     int commandId;
     
     switch (command) {
@@ -238,8 +246,7 @@
 void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio(
     FmRadioAudioControlCommand command)
 {
-    if (!mRadioControlServiceRequest) {
-        createControlServiceRequest();    }
+    createControlServiceRequest();
 
     int commandId;
 
@@ -282,20 +289,18 @@
  */
 void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value)
 {
+    if ( !mDataInitialized ) {
+        mRadioInformationServiceRequest->setMessage( KRadioServiceMonitorOperation );
+        mDataInitialized = true;
+    }
+
     startMonitoring();
-    if (value.isValid() && value.canConvert(QVariant::String)) {
-        QString str = value.toString();
-        // Extract the number from the beginning of the string.
-        int i = str.indexOf(" ");
-        QString notificationIdStr = str.left(i);
-        bool conversionOk;
-        int notificationId = notificationIdStr.toInt(&conversionOk);
-        // Rest is the actual string.
-        QString msg = str.mid(i);
-        
-        // If the type was converted ok
-        if (conversionOk) {
-            emit radioInformationChanged(notificationId, msg);
+    if ( value.isValid() && value.canConvert( QVariant::List ) ) {
+        QVariantList notificationList = value.toList();
+        foreach ( const QVariant& variant, notificationList ) {
+            RadioNotificationData notification = variant.value<RadioNotificationData>();
+            const int notificationId = notification.mType;
+            emit radioInformationChanged( notificationId, notification.mData );
         }
     }
 }
@@ -450,6 +455,7 @@
         QString fullServiceName = KRadioServiceName + "." + KRadioServiceControlInterfaceName;
         mRadioControlServiceRequest = new XQServiceRequest(fullServiceName,
             KRadioServiceControlOperation, false);
+
         bool a = connect(mRadioControlServiceRequest, SIGNAL(requestCompleted(QVariant)), this,
             SLOT(requestCompleted(QVariant)));
         bool b = connect(mRadioControlServiceRequest, SIGNAL(requestError(int)), this,
@@ -463,13 +469,13 @@
 void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest()
 {
     if (!mRadioInformationServiceRequest) {
+        QString operation = mDataInitialized ? KRadioServiceMonitorOperation : KRadioServiceRefreshOperation;
         QString fullServiceName = KRadioServiceName + "." + KRadioServiceMonitorInterfaceName;
-        mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName,
-            KRadioServiceMonitorOperation, false);
-        bool a = connect(mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)), this,
-            SLOT(handleFmRadioInformationChange(QVariant)));
-        bool b = connect(mRadioInformationServiceRequest, SIGNAL(requestError(int)), this,
-            SLOT(handleRequestError(int)));
+        mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName, operation, false);
+        bool a = connect( mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)),
+                          this,                            SLOT(handleFmRadioInformationChange(QVariant)));
+        bool b = connect( mRadioInformationServiceRequest, SIGNAL(requestError(int)),
+                         this,                             SLOT(handleRequestError(int)));
     }
 }
 
@@ -478,9 +484,7 @@
  */
 void FmRadioHsWidgetRadioServiceClient::startMonitoring()
 {
-    if (!mRadioInformationServiceRequest) {
-        createMonitorServiceRequest();
-    }
+    createMonitorServiceRequest();
     doGetFmRadioInformation();
 }
 
@@ -489,12 +493,6 @@
  */
 void FmRadioHsWidgetRadioServiceClient::stopMonitoring()
 {
-    if (mRadioInformationServiceRequest) {
-        delete mRadioInformationServiceRequest;
-        mRadioInformationServiceRequest = NULL;
-    }
-    if (mRadioControlServiceRequest) {
-        delete mRadioControlServiceRequest;
-        mRadioControlServiceRequest = NULL;
-    }
+    delete mRadioInformationServiceRequest;
+    delete mRadioControlServiceRequest;
 }