--- a/qthighway/examples/serviceapp/src/serviceapp.cpp Fri Apr 16 15:51:22 2010 +0300
+++ b/qthighway/examples/serviceapp/src/serviceapp.cpp Mon May 03 13:18:40 2010 +0300
@@ -40,16 +40,22 @@
ServiceApp::ServiceApp(QWidget *parent, Qt::WFlags f)
: QWidget(parent, f),
- mService(NULL),
+ mDialService(NULL),
mUriService(NULL),
- mFileService(NULL)
+ mFileService(NULL),
+ mNewDialService(NULL),
+ mNewFileService(NULL),
+ mNewUriService(NULL)
{
XQSERVICE_DEBUG_PRINT("ServiceApp::ServiceApp");
if (XQServiceUtil::isService())
{
- mService = new DialerService(this);
+ mDialService = new DialerService(this);
mUriService = new UriService(this);
mFileService = new FileService(this);
+ mNewDialService = new NewDialerService(this);
+ mNewUriService = new NewUriService(this);
+ mNewFileService = new NewFileService(this);
}
/* Adjust the palette */
#if defined(Q_WS_S60)
@@ -69,9 +75,13 @@
#endif
QPushButton *quitButton = new QPushButton(tr("Quit"));
- QPushButton *answerButton = new QPushButton(tr("Async Answer"));
+ QPushButton *answerButtonDial = new QPushButton(tr("Dial answer"));
+ QPushButton *answerButtonUri = new QPushButton(tr("Uri answer"));
+ QPushButton *answerButtonFile = new QPushButton(tr("File answer"));
connect(quitButton, SIGNAL(clicked()), this, SLOT(quit()));
- connect(answerButton, SIGNAL(clicked()), this, SLOT(answer()));
+ connect(answerButtonDial, SIGNAL(clicked()), this, SLOT(answerDial()));
+ connect(answerButtonUri, SIGNAL(clicked()), this, SLOT(answerUri()));
+ connect(answerButtonFile, SIGNAL(clicked()), this, SLOT(answerFile()));
/*
mEndCallButton = new QPushButton(tr("End Call"));
@@ -79,17 +89,15 @@
connect(mEndCallButton, SIGNAL(clicked()), this, SLOT(endCall()));
*/
bool isService = XQServiceUtil::isService();
+ QString interface = XQServiceUtil::interfaceName();
+ QString operation = XQServiceUtil::operationName();
QString t = "SERVICEAPP:\n";
- t = t + (isService ? " LAUNCHED AS SERVICE\n" : " LAUNCHED NORMALLY\n");
- t = t + (XQServiceUtil::isEmbedded() ? " EMBEDDED\n" : " NOT EMBEDDED\n");
-
- QStringList args = QApplication::arguments();
- foreach (QString arg, args)
- {
- t += "cmdline arg=" + arg + "\n";
- }
-
+ t = t + (isService ? " Service launch\n" : " Normal launch\n");
+ t = t + (XQServiceUtil::isEmbedded() ? " Embedded\n" : " Not embedded\n");
+ t = t + (" Interface=" + interface + "\n");
+ t = t + (" Operation=" + operation + "\n");
+
QLabel *title = new QLabel(t);
mLabel = new QLabel("");
@@ -99,8 +107,10 @@
vl->setMargin(0);
vl->setSpacing(0);
- vl->addWidget(answerButton);
vl->addWidget(quitButton);
+ vl->addWidget(answerButtonDial);
+ vl->addWidget(answerButtonUri);
+ vl->addWidget(answerButtonFile);
vl->addWidget(title);
vl->addWidget(mLabel);
vl->addWidget(mNumber);
@@ -120,7 +130,7 @@
ServiceApp::~ServiceApp()
{
XQSERVICE_DEBUG_PRINT("ServiceApp::~ServiceApp");
- delete mService;
+ delete mDialService;
delete mUriService;
delete mFileService;
}
@@ -131,34 +141,36 @@
qApp->quit();
}
-void ServiceApp::answer()
+void ServiceApp::answerDial()
{
- XQSERVICE_DEBUG_PRINT("ServiceApp::answer");
- if (mService && mService->asyncAnswer())
+ XQSERVICE_DEBUG_PRINT("ServiceApp::answerDial");
+ if (mDialService && mDialService->asyncAnswer())
{
- // connect(mService, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
- mService->complete(mNumber->text());
+ mDialService->complete(mNumber->text());
}
+}
+
+
+void ServiceApp::answerUri()
+{
+ XQSERVICE_DEBUG_PRINT("ServiceApp::answerUri");
if (mUriService && mUriService->asyncAnswer())
{
- connect(mUriService, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
- mUriService->complete(true);
- }
- if (mFileService && mFileService->asyncAnswer())
- {
- connect(mUriService, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
mUriService->complete(true);
}
}
-void ServiceApp::handleAnswerDelivered()
+void ServiceApp::answerFile()
{
- XQSERVICE_DEBUG_PRINT("ServiceApp::handleAnswerDelivered");
- quit();
-
+ XQSERVICE_DEBUG_PRINT("ServiceApp::answerFile");
+ if (mFileService && mFileService->asyncAnswer())
+ {
+ mFileService->complete(true);
+ }
}
+
void ServiceApp::endCall()
{
XQSERVICE_DEBUG_PRINT("ServiceApp::endCall");
@@ -179,13 +191,10 @@
DialerService::DialerService(ServiceApp* parent)
: XQServiceProvider(QLatin1String("com.nokia.services.serviceapp.Dialer"),parent),
- mServiceApp(parent),
- mAsyncReqId(-1),
- mAsyncAnswer(false)
+ mServiceApp(parent)
{
XQSERVICE_DEBUG_PRINT("DialerService::DialerService");
publishAll();
- connect(this, SIGNAL(returnValueDelivered()), parent, SLOT(handleAnswerDelivered()));
}
DialerService::~DialerService()
@@ -195,10 +204,14 @@
void DialerService::complete(QString number)
{
- if (mAsyncReqId == -1)
- return;
XQSERVICE_DEBUG_PRINT("DialerService::complete");
- completeRequest(mAsyncReqId,number.toInt());
+
+ // Complete all IDs
+ foreach (quint32 reqId, mAsyncReqIds)
+ {
+ XQSERVICE_DEBUG_PRINT("DialerService::complete %d", reqId);
+ completeRequest(reqId, number.toInt());
+ }
}
int DialerService::dial(const QString& number, bool asyncAnswer)
@@ -206,7 +219,7 @@
XQSERVICE_DEBUG_PRINT("DialerService::dial: %s,%d", qPrintable(number), asyncAnswer);
XQRequestInfo info = requestInfo();
- XQSERVICE_DEBUG_PRINT("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+ XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(), info.clientSecureId(), info.clientVendorId());
QSet<int> caps = info.clientCapabilities();
QSetIterator<int> i(caps);
while (i.hasNext())
@@ -217,13 +230,14 @@
label += QString("number=%1\n").arg(number);
label += QString("asyncAnswer=%1\n").arg(asyncAnswer);
- mAsyncAnswer = asyncAnswer;
+ connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
+
mNumber = number ;
mServiceApp->setLabelNumber(label, number);
int ret = 0;
- if (mAsyncAnswer)
+ if (asyncAnswer)
{
- mAsyncReqId = setCurrentRequestAsync();
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
}
else
@@ -233,22 +247,387 @@
return ret;
}
+CntServicesContactList DialerService::testContactList(CntServicesContactList list)
+{
+ XQSERVICE_DEBUG_PRINT("DialerService::testContactList");
+ showRecipients(list);
+
+ // Create output
+ CntServicesContact cnt1;
+ cnt1.mDisplayName = "Test1-Return";
+ cnt1.mPhoneNumber = "060-1111111";
+ cnt1.mEmailAddress = "test1.return@nokia.com";
+
+ CntServicesContact cnt2;
+ cnt2.mDisplayName = "Test1-Return";
+ cnt2.mPhoneNumber = "060-2222222";
+ cnt2.mEmailAddress = "test2.return@nokia.com";
+
+ CntServicesContactList ret;
+ ret.append(cnt1);
+ ret.append(cnt2);
+
+ return ret;
+
+}
+
+QVariant DialerService::testVariant(QVariant variant)
+{
+ XQSERVICE_DEBUG_PRINT("DialerService::testVariant::variant(%d,%d,%s)",
+ variant.type(), variant.userType(), variant.typeName());
+ XQSERVICE_DEBUG_PRINT("DialerService::testVariant::variant value=%s", qPrintable(variant.toString()));
+
+ if (variant.typeName() == QLatin1String("QStringList"))
+ {
+ QStringList ret = variant.toStringList();
+ return qVariantFromValue(ret);
+ }
+ else if (variant.typeName() == QLatin1String("XQShabarableFile"))
+ {
+ XQSharableFile sf = variant.value<XQSharableFile>();
+
+ RFile file;
+ bool ok = sf.getHandle( file );
+ if (ok)
+ {
+ HBufC8* data = HBufC8::NewL(100);
+ TPtr8 ptr = data->Des();
+ TInt err = file.Read( ptr );
+ QString text = QString::fromUtf8((const char *)(data->Ptr()), data->Length());
+ XQSERVICE_DEBUG_PRINT("DialerService::testVariant ::file content,%d,%s", err, qPrintable(text));
+ sf.close();
+ delete data;
+ }
+
+ return QVariant(ok);
+
+ }
+ else if (variant.typeName() == QLatin1String("XQRequestInfo"))
+ {
+ XQRequestInfo info = variant.value<XQRequestInfo>();
+ QStringList keys = info.infoKeys();
+ foreach (QString key, keys)
+ {
+ XQSERVICE_DEBUG_PRINT("DialerService::testVariant: info %s=%s",
+ qPrintable(key),
+ qPrintable(info.info(key).toString()));
+ }
+
+ return qVariantFromValue(info);
+
+ }
+ else if (variant.typeName() == QLatin1String("CntServicesContactList"))
+ {
+ // Show input
+ showRecipients(variant);
+
+ // Create output
+ CntServicesContact cnt1;
+ cnt1.mDisplayName = "Test1-Return";
+ cnt1.mPhoneNumber = "060-1111111";
+ cnt1.mEmailAddress = "test1.return@nokia.com";
+
+ CntServicesContact cnt2;
+ cnt2.mDisplayName = "Test1-Return";
+ cnt2.mPhoneNumber = "060-2222222";
+ cnt2.mEmailAddress = "test2.return@nokia.com";
+
+ CntServicesContactList list;
+ list.append(cnt1);
+ list.append(cnt2);
+
+ // Return contact list back
+ return qVariantFromValue(list);
+ }
+ else
+ {
+ return variant.toString();
+ }
+}
+
void DialerService::handleClientDisconnect()
{
XQSERVICE_DEBUG_PRINT("DialerService::handleClientDisconnect");
+
+ // Get the info of the cancelled request
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tDisconnected request info: id=%d,sid=%X,vid=%X", info.id(),info.clientSecureId(), info.clientVendorId());
+
// Just quit service application if client ends
- mAsyncAnswer = false;
mServiceApp->quit();
}
+void DialerService::handleAnswerDelivered()
+{
+ XQSERVICE_DEBUG_PRINT("DialerService::handleAnswerDelivered");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+ // Done
+ mAsyncReqIds.remove(info.clientSecureId());
+}
+
+
+
+void DialerService::showRecipients(QVariant &value)
+{
+ CntServicesContactList list;
+ if(value.canConvert<CntServicesContactList>())
+ {
+ qDebug() << "DialerService::showRecipients: canConvert";
+ list = qVariantValue<CntServicesContactList>(value);
+ }
+ else
+ {
+ qDebug() << "DialerService::showRecipients: canConvert NOK";
+ return;
+ }
+
+ showRecipients(list);
+}
+
+void DialerService::showRecipients(CntServicesContactList &list)
+{
+ if (list.count() == 0)
+ {
+ qDebug() << "DialerService::showRecipients(2): Count==0";
+ }
+ else
+ {
+ for (int i = 0; i < list.count(); ++i)
+ {
+ qDebug() << "DialerService::showRecipients(2)[" << i << "]=" << list[i].mDisplayName;
+ qDebug() << "DialerService::showRecipients(2)[" << i << "]=" << list[i].mPhoneNumber;
+ qDebug() << "DialerService::showRecipients(2)[" << i << "]=" << list[i].mEmailAddress;
+ }
+ }
+}
+
+
+// ----------New dialler service---------------
+
+NewDialerService::NewDialerService(ServiceApp* parent)
+: XQServiceProvider(QLatin1String("serviceapp.Dialer"),parent),
+mServiceApp(parent)
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::NewDialerService");
+ publishAll();
+}
+
+NewDialerService::~NewDialerService()
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::~NewDialerService");
+}
+
+void NewDialerService::complete(QString number)
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::complete");
+
+ // Complete all IDs
+ foreach (quint32 reqId, mAsyncReqIds)
+ {
+ XQSERVICE_DEBUG_PRINT("NewDialerService::complete %d", reqId);
+ completeRequest(reqId, number.toInt());
+ }
+}
+
+int NewDialerService::dial(const QString& number, bool asyncAnswer)
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::dial: %s,%d", qPrintable(number), asyncAnswer);
+ XQRequestInfo info = requestInfo();
+
+ XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(), info.clientSecureId(), info.clientVendorId());
+ QSet<int> caps = info.clientCapabilities();
+ QSetIterator<int> i(caps);
+ while (i.hasNext())
+ qDebug() << "Has capability " << i.next();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: embed=%d,sync=%d", info.isEmbedded(), info.isSynchronous());
+
+ QString label = "NewDialer::dial:\n";
+ label += QString("number=%1\n").arg(number);
+ label += QString("asyncAnswer=%1\n").arg(asyncAnswer);
+
+ connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
+
+ mNumber = number ;
+ mServiceApp->setLabelNumber(label, number);
+ int ret = 0;
+ if (asyncAnswer)
+ {
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
+ connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
+ }
+ else
+ {
+ ret = number.toInt();
+ }
+ return ret;
+}
+
+CntServicesContactList NewDialerService::testContactList(CntServicesContactList list)
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::testContactList");
+ showRecipients(list);
+
+ // Create output
+ CntServicesContact cnt1;
+ cnt1.mDisplayName = "Test1-Return";
+ cnt1.mPhoneNumber = "060-1111111";
+ cnt1.mEmailAddress = "test1.return@nokia.com";
+
+ CntServicesContact cnt2;
+ cnt2.mDisplayName = "Test1-Return";
+ cnt2.mPhoneNumber = "060-2222222";
+ cnt2.mEmailAddress = "test2.return@nokia.com";
+
+ CntServicesContactList ret;
+ ret.append(cnt1);
+ ret.append(cnt2);
+
+ return ret;
+
+}
+
+QVariant NewDialerService::testVariant(QVariant variant)
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::testVariant::variant(%d,%d,%s)",
+ variant.type(), variant.userType(), variant.typeName());
+ XQSERVICE_DEBUG_PRINT("NewDialerService::testVariant::variant value=%s", qPrintable(variant.toString()));
+
+ if (variant.typeName() == QLatin1String("QStringList"))
+ {
+ QStringList ret = variant.toStringList();
+ return qVariantFromValue(ret);
+ }
+ else if (variant.typeName() == QLatin1String("XQShabarableFile"))
+ {
+ XQSharableFile sf = variant.value<XQSharableFile>();
+
+ RFile file;
+ bool ok = sf.getHandle( file );
+ if (ok)
+ {
+ HBufC8* data = HBufC8::NewL(100);
+ TPtr8 ptr = data->Des();
+ TInt err = file.Read( ptr );
+ QString text = QString::fromUtf8((const char *)(data->Ptr()), data->Length());
+ XQSERVICE_DEBUG_PRINT("NewDialerService::testVariant ::file content,%d,%s", err, qPrintable(text));
+ sf.close();
+ delete data;
+ }
+
+ return QVariant(ok);
+
+ }
+ else if (variant.typeName() == QLatin1String("XQRequestInfo"))
+ {
+ XQRequestInfo info = variant.value<XQRequestInfo>();
+ QStringList keys = info.infoKeys();
+ foreach (QString key, keys)
+ {
+ XQSERVICE_DEBUG_PRINT("NewDialerService::testVariant: info %s=%s",
+ qPrintable(key),
+ qPrintable(info.info(key).toString()));
+ }
+
+ return qVariantFromValue(info);
+
+ }
+ else if (variant.typeName() == QLatin1String("CntServicesContactList"))
+ {
+ // Show input
+ showRecipients(variant);
+
+ // Create output
+ CntServicesContact cnt1;
+ cnt1.mDisplayName = "Test1-Return";
+ cnt1.mPhoneNumber = "060-1111111";
+ cnt1.mEmailAddress = "test1.return@nokia.com";
+
+ CntServicesContact cnt2;
+ cnt2.mDisplayName = "Test1-Return";
+ cnt2.mPhoneNumber = "060-2222222";
+ cnt2.mEmailAddress = "test2.return@nokia.com";
+
+ CntServicesContactList list;
+ list.append(cnt1);
+ list.append(cnt2);
+
+ // Return contact list back
+ return qVariantFromValue(list);
+ }
+ else
+ {
+ return variant.toString();
+ }
+}
+
+void NewDialerService::handleClientDisconnect()
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::handleClientDisconnect");
+
+ // Get the info of the cancelled request
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tDisconnected request info: id=%d,sid=%X,vid=%X", info.id(),info.clientSecureId(), info.clientVendorId());
+
+ // Just quit service application if client ends
+ mServiceApp->quit();
+}
+
+void NewDialerService::handleAnswerDelivered()
+{
+ XQSERVICE_DEBUG_PRINT("NewDialerService::handleAnswerDelivered");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+ // Done
+ mAsyncReqIds.remove(info.clientSecureId());
+}
+
+
+
+void NewDialerService::showRecipients(QVariant &value)
+{
+ CntServicesContactList list;
+ if(value.canConvert<CntServicesContactList>())
+ {
+ qDebug() << "NewDialerService::showRecipients: canConvert";
+ list = qVariantValue<CntServicesContactList>(value);
+ }
+ else
+ {
+ qDebug() << "NewDialerService::showRecipients: canConvert NOK";
+ return;
+ }
+
+ showRecipients(list);
+}
+
+void NewDialerService::showRecipients(CntServicesContactList &list)
+{
+ if (list.count() == 0)
+ {
+ qDebug() << "NewDialerService::showRecipients(2): Count==0";
+ }
+ else
+ {
+ for (int i = 0; i < list.count(); ++i)
+ {
+ qDebug() << "NewDialerService::showRecipients(2)[" << i << "]=" << list[i].mDisplayName;
+ qDebug() << "NewDialerService::showRecipients(2)[" << i << "]=" << list[i].mPhoneNumber;
+ qDebug() << "NewDialerService::showRecipients(2)[" << i << "]=" << list[i].mEmailAddress;
+ }
+ }
+}
+
+
+
+Q_IMPLEMENT_USER_METATYPE(CntServicesContact)
+Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)
// ----------UriService---------------
UriService::UriService(ServiceApp* parent)
: XQServiceProvider(QLatin1String("com.nokia.services.serviceapp.com.nokia.symbian.IUriView"),parent),
- mServiceApp(parent),
- mAsyncReqId(-1),
- mAsyncAnswer(false)
+ mServiceApp(parent)
{
XQSERVICE_DEBUG_PRINT("UriService::UriService");
@@ -262,10 +641,13 @@
void UriService::complete(bool ok)
{
- if (mAsyncReqId == -1)
- return;
XQSERVICE_DEBUG_PRINT("UriService::complete");
- completeRequest(mAsyncReqId, QVariant(mRetValue));
+ // Complete all IDs
+ foreach (quint32 reqId, mAsyncReqIds)
+ {
+ XQSERVICE_DEBUG_PRINT("UriService::complete %d", reqId);
+ completeRequest(reqId, QVariant(mRetValue));
+ }
}
bool UriService::view(const QString& uri)
@@ -282,12 +664,15 @@
label += QString ("retValue=%1\n").arg(retValue);
QString param = QString ("retValue=%1\n").arg(retValue);
- mAsyncAnswer = !XQServiceUtil::isEmbedded();;
+ XQRequestInfo info = requestInfo();
+ bool asyncAnswer = !info.isSynchronous();;
+ connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
+
mRetValue = retValue;
mServiceApp->setLabelNumber(label,param);
- if (mAsyncAnswer)
+ if (asyncAnswer)
{
- mAsyncReqId = setCurrentRequestAsync();
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
}
@@ -297,20 +682,105 @@
void UriService::handleClientDisconnect()
{
XQSERVICE_DEBUG_PRINT("UriService::handleClientDisconnect");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(),info.clientSecureId(), info.clientVendorId());
- // Just quit application
- mAsyncAnswer = false;
+ mAsyncReqIds.remove(info.clientSecureId());
mServiceApp->quit();
}
+void UriService::handleAnswerDelivered()
+{
+ XQSERVICE_DEBUG_PRINT("UriService::handleAnswerDelivered");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+ // Done
+ mAsyncReqIds.remove(info.clientSecureId());
+
+}
+
+// ----------NewUriService---------------
+
+NewUriService::NewUriService(ServiceApp* parent)
+: XQServiceProvider(QLatin1String("serviceapp.com.nokia.symbian.IUriView"),parent),
+mServiceApp(parent)
+
+{
+ XQSERVICE_DEBUG_PRINT("NewUriService::NewUriService");
+ publishAll();
+}
+
+NewUriService::~NewUriService()
+{
+ XQSERVICE_DEBUG_PRINT("NewUriService::~NewUriService");
+}
+
+void NewUriService::complete(bool ok)
+{
+ XQSERVICE_DEBUG_PRINT("NewUriService::complete");
+ // Complete all IDs
+ foreach (quint32 reqId, mAsyncReqIds)
+ {
+ XQSERVICE_DEBUG_PRINT("NewUriService::complete %d", reqId);
+ completeRequest(reqId, QVariant(mRetValue));
+ }
+}
+
+bool NewUriService::view(const QString& uri)
+{
+ XQSERVICE_DEBUG_PRINT("NewUriService::view(1)");
+ return view(uri, true);
+}
+
+bool NewUriService::view(const QString& uri, bool retValue)
+{
+ XQSERVICE_DEBUG_PRINT("NewUriService::view(2)");
+ QString label = "New IUri::view\n:";
+ label += QString ("Uri=%1\n").arg(uri);
+ label += QString ("retValue=%1\n").arg(retValue);
+ QString param = QString ("retValue=%1\n").arg(retValue);
+
+ XQRequestInfo info = requestInfo();
+ bool asyncAnswer = !info.isSynchronous();;
+ connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
+
+ mRetValue = retValue;
+ mServiceApp->setLabelNumber(label,param);
+ if (asyncAnswer)
+ {
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
+ connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
+ }
+
+ return retValue;
+}
+
+void NewUriService::handleClientDisconnect()
+{
+ XQSERVICE_DEBUG_PRINT("NewUriService::handleClientDisconnect");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(),info.clientSecureId(), info.clientVendorId());
+
+ mAsyncReqIds.remove(info.clientSecureId());
+ mServiceApp->quit();
+}
+
+void NewUriService::handleAnswerDelivered()
+{
+ XQSERVICE_DEBUG_PRINT("NewUriService::handleAnswerDelivered");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+ // Done
+ mAsyncReqIds.remove(info.clientSecureId());
+
+}
+
// ----------FileService---------------
FileService::FileService(ServiceApp* parent)
: XQServiceProvider(QLatin1String("com.nokia.services.serviceapp.com.nokia.symbian.IFileView"),parent),
- mServiceApp(parent),
- mAsyncReqId(-1),
- mAsyncAnswer(false)
+ mServiceApp(parent)
{
XQSERVICE_DEBUG_PRINT("FileService::FileService");
@@ -324,10 +794,13 @@
void FileService::complete(bool ok)
{
- if (mAsyncReqId == -1)
- return;
XQSERVICE_DEBUG_PRINT("FileService::complete");
- completeRequest(mAsyncReqId, QVariant(ok));
+ // Complete all
+ foreach (quint32 reqId, mAsyncReqIds)
+ {
+ XQSERVICE_DEBUG_PRINT("FileService::complete %d", reqId);
+ completeRequest(reqId, QVariant(ok));
+ }
}
bool FileService::view(QString file)
@@ -336,11 +809,14 @@
QString label = "IFile::view\n:";
QString param = QString ("File=%1\n").arg(file);
- mAsyncAnswer = !XQServiceUtil::isEmbedded();;
+ XQRequestInfo info = requestInfo();
+ bool asyncAnswer = !info.isSynchronous();;
+ connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
+
mServiceApp->setLabelNumber(label,param);
- if (mAsyncAnswer)
+ if (asyncAnswer)
{
- mAsyncReqId = setCurrentRequestAsync();
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
}
@@ -367,11 +843,13 @@
delete data;
}
- mAsyncAnswer = !XQServiceUtil::isEmbedded();;
+ XQRequestInfo info = requestInfo();
+ bool asyncAnswer = !info.isSynchronous();;
+
mServiceApp->setLabelNumber(label,param);
- if (mAsyncAnswer)
+ if (asyncAnswer)
{
- mAsyncReqId = setCurrentRequestAsync();
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
}
return true;
@@ -381,9 +859,123 @@
void FileService::handleClientDisconnect()
{
XQSERVICE_DEBUG_PRINT("FileService::handleClientDisconnect");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(),info.clientSecureId(), info.clientVendorId());
- // Just quit application
- mAsyncAnswer = false;
+ mAsyncReqIds.remove(info.clientSecureId());
mServiceApp->quit();
}
+
+void FileService::handleAnswerDelivered()
+{
+ XQSERVICE_DEBUG_PRINT("FileService::handleAnswerDelivered");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+ // Done
+ mAsyncReqIds.remove(info.clientSecureId());
+
+}
+
+
+// ----------NewFileService---------------
+
+NewFileService::NewFileService(ServiceApp* parent)
+: XQServiceProvider(QLatin1String("serviceapp.com.nokia.symbian.IFileView"),parent),
+mServiceApp(parent)
+
+{
+ XQSERVICE_DEBUG_PRINT("NewFileService::NewFileService");
+ publishAll();
+}
+
+NewFileService::~NewFileService()
+{
+ XQSERVICE_DEBUG_PRINT("NewFileService::~NewFileService");
+}
+
+void NewFileService::complete(bool ok)
+{
+ XQSERVICE_DEBUG_PRINT("NewFileService::complete");
+ // Complete all
+ foreach (quint32 reqId, mAsyncReqIds)
+ {
+ XQSERVICE_DEBUG_PRINT("NewFileService::complete %d", reqId);
+ completeRequest(reqId, QVariant(ok));
+ }
+}
+
+bool NewFileService::view(QString file)
+{
+ XQSERVICE_DEBUG_PRINT("NewFileService::view(QString)");
+ QString label = "New IFile::view\n:";
+ QString param = QString ("File=%1\n").arg(file);
+
+ XQRequestInfo info = requestInfo();
+ bool asyncAnswer = !info.isSynchronous();;
+ connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
+
+ mServiceApp->setLabelNumber(label,param);
+ if (asyncAnswer)
+ {
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
+ connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
+ }
+
+ return true;
+}
+
+
+bool NewFileService::view(XQSharableFile sf)
+{
+ XQSERVICE_DEBUG_PRINT("NewFileService::view(XQSharebleFile)");
+ QString label = "IFile::view\n:";
+ QString param = QString ("File=%1\n").arg(sf.fileName());
+
+ RFile file;
+ bool ok = sf.getHandle( file );
+ if (ok)
+ {
+ HBufC8* data = HBufC8::NewL(100);
+ TPtr8 ptr = data->Des();
+ TInt err = file.Read( ptr );
+ QString text = QString::fromUtf8((const char *)(data->Ptr()), data->Length());
+ XQSERVICE_DEBUG_PRINT("NewFileService::file read,%d,%s", err, qPrintable(text));
+ sf.close();
+ delete data;
+ }
+
+ XQRequestInfo info = requestInfo();
+ bool asyncAnswer = !info.isSynchronous();;
+
+ mServiceApp->setLabelNumber(label,param);
+ if (asyncAnswer)
+ {
+ mAsyncReqIds.insert(info.clientSecureId(), setCurrentRequestAsync());
+ connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
+ }
+ return true;
+}
+
+
+void NewFileService::handleClientDisconnect()
+{
+ XQSERVICE_DEBUG_PRINT("NewFileService::handleClientDisconnect");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(),info.clientSecureId(), info.clientVendorId());
+
+ mAsyncReqIds.remove(info.clientSecureId());
+ mServiceApp->quit();
+}
+
+
+void NewFileService::handleAnswerDelivered()
+{
+ XQSERVICE_DEBUG_PRINT("NewFileService::handleAnswerDelivered");
+ XQRequestInfo info = requestInfo();
+ XQSERVICE_DEBUG_PRINT("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+ // Done
+ mAsyncReqIds.remove(info.clientSecureId());
+
+}
+