phoneengine/parserrecognizer/src/parserrecognizer.cpp
changeset 37 ba76fc04e6c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/parserrecognizer/src/parserrecognizer.cpp	Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,127 @@
+/*!
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Recognizes the parser messages that needs to be notified to 
+*               the world using QtHighway.
+*/
+
+#include <xqservicerequest.h>
+#include <pevirtualengine.h>
+#include "parserrecognizer.h"
+#include "qtphonelog.h"
+
+ParserRecognizer::ParserRecognizer(QObject* parent) 
+    : 
+    QObject(parent),
+    m_currentRequest(0)
+{
+}
+
+ParserRecognizer::~ParserRecognizer()
+{
+    delete m_currentRequest;
+}
+
+void ParserRecognizer::sendMessage(const int message, const int callId)
+{
+    Q_UNUSED(callId); // for now
+    PHONE_DEBUG2("ParserRecognizer::sendMessage message:", message);
+    QString api;
+    QString method;
+    bool recognized = true;
+    
+    switch(message) {
+    case MEngineMonitor::EPEMessageActivateRfsDeep:
+        api = "com.nokia.services.telephony";
+        method = "activateDeepRestoreFactorySettings()";
+        break;
+    
+    case MEngineMonitor::EPEMessageActivateRfsNormal:
+        api = "com.nokia.services.telephony";
+        method = "activateNormalRestoreFactorySettings()";
+        break;
+    
+    case MEngineMonitor::EPEMessageShowBTDeviceAddress:
+        api = "com.nokia.services.bluetooth";
+        method = "showBluetoothDeviceAddress()";
+        break;
+    
+    case MEngineMonitor::EPEMessageShowBTLoopback:
+        api = "com.nokia.services.bluetooth";
+        method = "showBluetoothLoopback()";
+        break;
+    
+    case MEngineMonitor::EPEMessageBTDebugMode:
+        api = "com.nokia.services.bluetooth";
+        method = "activateBluetoothDebugMode()";
+        break;
+    
+    case MEngineMonitor::EPEMessageShowVersion:
+        api = "com.nokia.services.devicemanager";
+        method = "showVersionNumber()";
+        break;
+    
+    case MEngineMonitor::EPEMessageSSRequestFailed:
+        api = "com.nokia.services.telephony";
+        method = "supplementaryServiceRequestFailed()";
+        break;
+    
+    default:
+      recognized = false;
+      break;        
+    }
+    
+    if (recognized && (!m_currentRequest)) {
+        PHONE_DEBUG2("ParserRecognizer::sendMessage api:", api);
+        PHONE_DEBUG2("ParserRecognizer::sendMessage method:", method);
+        m_currentRequest = new XQServiceRequest(api, method, false);
+        // Due to a Qt Highway bug in assignment operator implementation we 
+        // need to set request as asynchronous with a setter function.
+        m_currentRequest->setSynchronous(false);
+        connect(
+            m_currentRequest, SIGNAL(requestCompleted(const QVariant &)), 
+            this, SLOT(requestCompleted(const QVariant &)));
+        connect(
+            m_currentRequest, SIGNAL(requestError(int)), 
+            this, SLOT(requestError(int)));
+        
+        int exceptionAsError = 0;
+        bool requestOk = false;
+        QT_TRYCATCH_ERROR(
+            exceptionAsError, requestOk = m_currentRequest->send());
+        if ((0 != exceptionAsError) || (!requestOk)) {
+            PHONE_DEBUG2("ParserRecognizer::sendMessage exceptionAsError:", 
+                exceptionAsError);
+            PHONE_DEBUG2("ParserRecognizer::sendMessage requestOk:", 
+                requestOk);
+            requestCompleted(QVariant());
+        }
+    }
+}
+
+void ParserRecognizer::requestCompleted(const QVariant &returnValue)
+{
+    PHONE_DEBUG("ParserRecognizer::requestCompleted");
+    Q_UNUSED(returnValue);
+    
+    delete m_currentRequest;
+    m_currentRequest = NULL;
+}
+
+void ParserRecognizer::requestError(int error)
+{
+    PHONE_DEBUG2("ParserRecognizer::requestError", error);
+    
+    delete m_currentRequest;
+    m_currentRequest = NULL;
+}