diff -r efe85016a067 -r 7cbcb2896f0e phonebookengines/cntactions/src/cntaction.cpp --- a/phonebookengines/cntactions/src/cntaction.cpp Wed Jun 23 18:02:44 2010 +0300 +++ b/phonebookengines/cntactions/src/cntaction.cpp Tue Jul 06 14:05:47 2010 +0300 @@ -17,6 +17,7 @@ #include "cntaction.h" #include +#include #include #include #include @@ -28,12 +29,15 @@ m_implementationVersion(1), m_result(), m_contact(), - m_detail() + m_detail(), + m_request(NULL) { } CntAction::~CntAction() { + delete m_request; + m_request = NULL; } QVariantMap CntAction::metaData() const @@ -153,20 +157,43 @@ } //common code to perform a call, videocall and message action -void CntAction::performNumberAction(const QString &service, const QString &type) +void CntAction::performNumberAction(const QString &interface, const QString &operation) { - XQServiceRequest snd(service, type, false); + XQApplicationManager appMng; + QVariantList args; + QVariant retValue; + + // TODO: Using XQApplicationManager is not working with calls + // The factory method cannot create a request. Find out why + bool isCallAction = m_actionName == "call"; + XQServiceRequest snd(interface, operation, false); + + delete m_request; + m_request = NULL; + m_request = appMng.create(interface, operation, false); // not embedded + if (!isCallAction) { + if (!m_request) { + emitResult(GeneralError, retValue); + return; + } + } - QVariant retValue; - - //detail exist use it + //detail exist use it if (m_detail.definitionName() == QContactPhoneNumber::DefinitionName) { const QContactPhoneNumber &phoneNumber = static_cast(m_detail); - snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); - - emitResult(snd.send(retValue), retValue); + args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); + + // TODO remove once call action works + if (isCallAction) { + snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); + emitResult(snd.send(retValue), retValue); + } else { + m_request->setArguments(args); + m_request->setSynchronous(true); + emitResult(m_request->send(retValue), retValue); + } } //if no detail, pick preferred @@ -187,9 +214,17 @@ phoneNumber = static_cast(detail); } - snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); - - emitResult(snd.send(retValue), retValue); + args << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); + + // TODO remove once call action works + if (isCallAction) { + snd << phoneNumber.number() << m_contact.localId() << m_contact.displayLabel(); + emitResult(snd.send(retValue), retValue); + } else { + m_request->setArguments(args); + m_request->setSynchronous(true); + emitResult(m_request->send(retValue), retValue); + } } //else return an error @@ -205,6 +240,9 @@ m_result.clear(); m_result.insert("Error", QVariant(errorCode)); m_result.insert("ReturnValue", retValue); + if (m_request) { + m_result.insert("XQAiwRequest Error", m_request->lastError()); + } if (errorCode == 0){ m_state = QContactAction::FinishedState;