browsercore/core/network/SchemeHandlerBrQtHighway_p.cpp
changeset 16 3c88a81ff781
parent 12 afcd8e6d025b
--- a/browsercore/core/network/SchemeHandlerBrQtHighway_p.cpp	Thu Sep 23 15:32:11 2010 -0400
+++ b/browsercore/core/network/SchemeHandlerBrQtHighway_p.cpp	Fri Oct 15 17:30:59 2010 -0400
@@ -23,19 +23,23 @@
 #include <QUrl>
 #include <QList>
 #include <xqaiwdecl.h>
-
 #include "SchemeHandlerBrQtHighway_p.h"
 
 
 namespace WRT {
 
 
-QtHighwaySchemeHandlerPrivate::QtHighwaySchemeHandlerPrivate()
+QtHighwaySchemeHandlerPrivate::QtHighwaySchemeHandlerPrivate() : 
+    mRequestPtr(NULL)
 {
 }
 
 QtHighwaySchemeHandlerPrivate::~QtHighwaySchemeHandlerPrivate()
 {
+    if (mRequestPtr) {
+        delete mRequestPtr;
+        mRequestPtr = NULL;
+    }
 }
 
 SchemeHandler::SchemeHandlerError QtHighwaySchemeHandlerPrivate::HandleScheme(const QUrl &url)
@@ -55,29 +59,35 @@
     QtHighwaySchemeHandlerPrivate::SendStandardUriViewRequest(const QUrl& url)
 {
     SchemeHandler::SchemeHandlerError retVal = SchemeHandler::NoError;
-    XQAiwRequest *request = NULL; // Application Interworking request
     bool embedded = false;  // window groups not chained
 
     // Create request - Apply first implementation of url, "com.nokia.symbian.IUriView"
     // interface name and "view(QString)" operation.
-    request = mAiwMgr.create(url, embedded);
+    if (mRequestPtr)
+        delete mRequestPtr; // ensure previous requests deleted
+    mRequestPtr = mAiwMgr.create(url, embedded);
     
-    if (request) {
+    if (mRequestPtr) {
         // Debug - what service and interface are we using?
-        //XQAiwInterfaceDescriptor const &desc = request->descriptor();
-        //qDebug() << "HandleTelScheme: sn=" << desc.serviceName() << "if=" << desc.interfaceName();
+        //XQAiwInterfaceDescriptor const &desc = mRequestPtr->descriptor();
+        //qDebug() << "SendStandardUriViewRequest: sn=" << desc.serviceName() << "if=" << desc.interfaceName();
     
         // Set function parameters
         QList<QVariant> args;
         args << url.toString();
-        request->setArguments(args);
-        request->setEmbedded(embedded);
-        request->setSynchronous(false); // asynchronous request
+        mRequestPtr->setArguments(args);
+        mRequestPtr->setEmbedded(embedded);
+        mRequestPtr->setSynchronous(false); // asynchronous request
 
         // Send the request
-        if (!request->send()) {
-            // to debug get error code from request->lastError()
-            // or connect to requestError() signal
+        if (mRequestPtr->send()) {
+            // connect request signals to slots
+            connect(mRequestPtr, SIGNAL(requestOk(const QVariant&)), 
+                this, SLOT(handleOk(const QVariant&)));
+            connect(mRequestPtr, SIGNAL(requestError(int,const QString&)), 
+                this, SLOT(handleError(int, const QString&)));
+        } else {
+            // requestError() signal will be sent with error code
             retVal = SchemeHandler::LaunchFailed;
         }
     } else {
@@ -85,13 +95,30 @@
         retVal = SchemeHandler::SchemeUnsupported;
     }
     
-    // if need to get service result connect to requestOk() signal
-    
-    // currently not interested in requestOk() or requestError() signals so
-    // OK to delete request now
-    delete request;
-    
     return retVal;
 }
 
+// Aiw request responses
+void QtHighwaySchemeHandlerPrivate::handleOk(const QVariant& result)
+{
+    // service application launched ok, result is application return value
+    // service app should handle UI for errors, this is just for cleanup
+    if (mRequestPtr) {
+        delete mRequestPtr;
+        mRequestPtr = NULL;
+    }
+}
+
+// handles errors in interworking request handling
+void QtHighwaySchemeHandlerPrivate::handleError(int errorCode, 
+    const QString& errorMessage)
+{
+    // UI relies on return error from XQAiwRequest::send() to alert user of problem
+    // add debug code here to find out cause of error
+    if (mRequestPtr) {
+        delete mRequestPtr;
+        mRequestPtr = NULL;
+    }
+}
+
 } // WRT