hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp
changeset 16 f54ebcfc1b80
parent 14 63aabac4416d
child 19 afea38384506
equal deleted inserted replaced
14:63aabac4416d 16:f54ebcfc1b80
    19 #include <xqserviceglobal.h>
    19 #include <xqserviceglobal.h>
    20 
    20 
    21 // User includes
    21 // User includes
    22 #include "fmradiohswidgetradioserviceclient.h"
    22 #include "fmradiohswidgetradioserviceclient.h"
    23 #include "fmradiohswidget.h"
    23 #include "fmradiohswidget.h"
       
    24 #include "radioservicedef.h"
       
    25 #include "radionotificationdata.h"
    24 
    26 
    25 /*!
    27 /*!
    26  Constructor
    28  Constructor
    27  */
    29  */
    28 FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) :
    30 FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) :
    29     QObject(parent),
    31     QObject(parent),
    30     mRadioInformationServiceRequest(0),
    32     mRadioInformationServiceRequest( 0 ),
    31     mRadioControlServiceRequest(0)
    33     mRadioControlServiceRequest(0),
       
    34     mDataInitialized( false )
    32 {
    35 {
    33 }
    36 }
    34 
    37 
    35 /*!
    38 /*!
    36  Destructor 
    39  Destructor 
    39 {
    42 {
    40     stopMonitoring();
    43     stopMonitoring();
    41 }
    44 }
    42 
    45 
    43 /*!
    46 /*!
       
    47  * Initialize all data
       
    48  */
       
    49 void FmRadioHsWidgetRadioServiceClient::init()
       
    50 {
       
    51     const bool radioIsRunning = false; //TODO: Find out if radio is running. Use P&S key for now
       
    52     if ( radioIsRunning ) {
       
    53         startMonitoring();
       
    54     }
       
    55 }
       
    56 
       
    57 
       
    58 /*!
    44  Starting of FM Radio.
    59  Starting of FM Radio.
    45  
    60 
    46  /param startupState 
    61  /param startupState
    47  */
    62  */
    48 void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState)
    63 void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState)
    49 {
    64 {
    50     if (!mRadioControlServiceRequest) {
    65     createControlServiceRequest();
    51         createControlServiceRequest();
       
    52     }
       
    53 
    66 
    54     int commandId = 0;
    67     int commandId = 0;
    55 
    68 
    56     switch (startupState) {
    69     switch (startupState) {
    57     case StartForeground:
    70     case StartForeground:
    79  Bring FM Radio to foreground.
    92  Bring FM Radio to foreground.
    80  
    93  
    81  */
    94  */
    82 void FmRadioHsWidgetRadioServiceClient::doBringFmRadioToForeground(bool toForeground)
    95 void FmRadioHsWidgetRadioServiceClient::doBringFmRadioToForeground(bool toForeground)
    83 {
    96 {
    84     if (!mRadioControlServiceRequest) {
    97     createControlServiceRequest();
    85         createControlServiceRequest();
       
    86     }
       
    87     QVariant commandArgument;
    98     QVariant commandArgument;
    88     if (toForeground) {
    99     if (toForeground) {
    89         // TODO: Include header and remove comment.
   100         // TODO: Include header and remove comment.
    90         commandArgument.setValue(/*RadioServiceCommand::Foreground*/ 6);
   101         commandArgument.setValue(/*RadioServiceCommand::Foreground*/ 6);
    91     } else {
   102     } else {
   142     //req = mApplicationManager.create(uri, false);
   153     //req = mApplicationManager.create(uri, false);
   143 
   154 
   144     /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation,
   155     /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation,
   145         false);*/
   156         false);*/
   146     
   157     
   147     if (!mRadioInformationServiceRequest) {
   158     createMonitorServiceRequest();
   148         createMonitorServiceRequest();
       
   149     }
       
   150     bool res = mRadioInformationServiceRequest->send();
   159     bool res = mRadioInformationServiceRequest->send();
   151 
   160 
   152     /*if (req) {*/
   161     /*if (req) {*/
   153 /*
   162 /*
   154         // Connect signals once
   163         // Connect signals once
   194  /param command Command to execute.
   203  /param command Command to execute.
   195  */
   204  */
   196 void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel(
   205 void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel(
   197     FmRadioChannelChangeCommand command)
   206     FmRadioChannelChangeCommand command)
   198 {
   207 {
   199     if (!mRadioControlServiceRequest) {
   208     createControlServiceRequest();
   200         createControlServiceRequest();    }
       
   201     int commandId;
   209     int commandId;
   202     
   210     
   203     switch (command) {
   211     switch (command) {
   204     case PreviousFavouriteChannel:
   212     case PreviousFavouriteChannel:
   205         // TODO: Include header and remove comment.
   213         // TODO: Include header and remove comment.
   236  /param command Command to execute.
   244  /param command Command to execute.
   237  */
   245  */
   238 void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio(
   246 void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio(
   239     FmRadioAudioControlCommand command)
   247     FmRadioAudioControlCommand command)
   240 {
   248 {
   241     if (!mRadioControlServiceRequest) {
   249     createControlServiceRequest();
   242         createControlServiceRequest();    }
       
   243 
   250 
   244     int commandId;
   251     int commandId;
   245 
   252 
   246     switch (command) {
   253     switch (command) {
   247     case Mute:
   254     case Mute:
   280  
   287  
   281  /param value
   288  /param value
   282  */
   289  */
   283 void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value)
   290 void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value)
   284 {
   291 {
       
   292     if ( !mDataInitialized ) {
       
   293         mRadioInformationServiceRequest->setMessage( KRadioServiceMonitorOperation );
       
   294         mDataInitialized = true;
       
   295     }
       
   296 
   285     startMonitoring();
   297     startMonitoring();
   286     if (value.isValid() && value.canConvert(QVariant::String)) {
   298     if ( value.isValid() && value.canConvert( QVariant::List ) ) {
   287         QString str = value.toString();
   299         QVariantList notificationList = value.toList();
   288         // Extract the number from the beginning of the string.
   300         foreach ( const QVariant& variant, notificationList ) {
   289         int i = str.indexOf(" ");
   301             RadioNotificationData notification = variant.value<RadioNotificationData>();
   290         QString notificationIdStr = str.left(i);
   302             const int notificationId = notification.mType;
   291         bool conversionOk;
   303             emit radioInformationChanged( notificationId, notification.mData );
   292         int notificationId = notificationIdStr.toInt(&conversionOk);
       
   293         // Rest is the actual string.
       
   294         QString msg = str.mid(i);
       
   295         
       
   296         // If the type was converted ok
       
   297         if (conversionOk) {
       
   298             emit radioInformationChanged(notificationId, msg);
       
   299         }
   304         }
   300     }
   305     }
   301 }
   306 }
   302 
   307 
   303 /*!
   308 /*!
   448 {
   453 {
   449     if (!mRadioControlServiceRequest) {
   454     if (!mRadioControlServiceRequest) {
   450         QString fullServiceName = KRadioServiceName + "." + KRadioServiceControlInterfaceName;
   455         QString fullServiceName = KRadioServiceName + "." + KRadioServiceControlInterfaceName;
   451         mRadioControlServiceRequest = new XQServiceRequest(fullServiceName,
   456         mRadioControlServiceRequest = new XQServiceRequest(fullServiceName,
   452             KRadioServiceControlOperation, false);
   457             KRadioServiceControlOperation, false);
       
   458 
   453         bool a = connect(mRadioControlServiceRequest, SIGNAL(requestCompleted(QVariant)), this,
   459         bool a = connect(mRadioControlServiceRequest, SIGNAL(requestCompleted(QVariant)), this,
   454             SLOT(requestCompleted(QVariant)));
   460             SLOT(requestCompleted(QVariant)));
   455         bool b = connect(mRadioControlServiceRequest, SIGNAL(requestError(int)), this,
   461         bool b = connect(mRadioControlServiceRequest, SIGNAL(requestError(int)), this,
   456             SLOT(handleRequestError2(int)));
   462             SLOT(handleRequestError2(int)));
   457     }
   463     }
   461  Creates monitor service request object.
   467  Creates monitor service request object.
   462  */
   468  */
   463 void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest()
   469 void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest()
   464 {
   470 {
   465     if (!mRadioInformationServiceRequest) {
   471     if (!mRadioInformationServiceRequest) {
       
   472         QString operation = mDataInitialized ? KRadioServiceMonitorOperation : KRadioServiceRefreshOperation;
   466         QString fullServiceName = KRadioServiceName + "." + KRadioServiceMonitorInterfaceName;
   473         QString fullServiceName = KRadioServiceName + "." + KRadioServiceMonitorInterfaceName;
   467         mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName,
   474         mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName, operation, false);
   468             KRadioServiceMonitorOperation, false);
   475         bool a = connect( mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)),
   469         bool a = connect(mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)), this,
   476                           this,                            SLOT(handleFmRadioInformationChange(QVariant)));
   470             SLOT(handleFmRadioInformationChange(QVariant)));
   477         bool b = connect( mRadioInformationServiceRequest, SIGNAL(requestError(int)),
   471         bool b = connect(mRadioInformationServiceRequest, SIGNAL(requestError(int)), this,
   478                          this,                             SLOT(handleRequestError(int)));
   472             SLOT(handleRequestError(int)));
       
   473     }
   479     }
   474 }
   480 }
   475 
   481 
   476 /*!
   482 /*!
   477  Start radio monitoring.
   483  Start radio monitoring.
   478  */
   484  */
   479 void FmRadioHsWidgetRadioServiceClient::startMonitoring()
   485 void FmRadioHsWidgetRadioServiceClient::startMonitoring()
   480 {
   486 {
   481     if (!mRadioInformationServiceRequest) {
   487     createMonitorServiceRequest();
   482         createMonitorServiceRequest();
       
   483     }
       
   484     doGetFmRadioInformation();
   488     doGetFmRadioInformation();
   485 }
   489 }
   486 
   490 
   487 /*!
   491 /*!
   488  Stops radio monitoring.
   492  Stops radio monitoring.
   489  */
   493  */
   490 void FmRadioHsWidgetRadioServiceClient::stopMonitoring()
   494 void FmRadioHsWidgetRadioServiceClient::stopMonitoring()
   491 {
   495 {
   492     if (mRadioInformationServiceRequest) {
   496     delete mRadioInformationServiceRequest;
   493         delete mRadioInformationServiceRequest;
   497     delete mRadioControlServiceRequest;
   494         mRadioInformationServiceRequest = NULL;
   498 }
   495     }
       
   496     if (mRadioControlServiceRequest) {
       
   497         delete mRadioControlServiceRequest;
       
   498         mRadioControlServiceRequest = NULL;
       
   499     }
       
   500 }