diff -r 885c2596c964 -r 5d007b20cfd0 qthighway/examples/serviceapp/src/serviceapp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qthighway/examples/serviceapp/src/serviceapp.cpp Tue Aug 31 16:02:37 2010 +0300 @@ -0,0 +1,1070 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, version 2.1 of the License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, +* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". +* +* Description: +* +*/ + +#include "xqservicelog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "testservicedata.h" +#include "serviceapp.h" +#include + +ServiceApp::ServiceApp(QWidget *parent, Qt::WFlags f) + : QWidget(parent, f), + mDialService(NULL), + mUriService(NULL), + mFileService(NULL), + mNewDialService(NULL), + mNewFileService(NULL), + mNewUriService(NULL) +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::ServiceApp"); + if (XQServiceUtil::isService()) + { + 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) + QPalette p = qApp->palette(); + QColor color(192,192,192); + QColor bg(201,250,250); + p.setColor(QPalette::Highlight, color.lighter(200)); + p.setColor(QPalette::Text, Qt::black); + p.setColor(QPalette::Base, bg); + p.setColor(QPalette::WindowText, Qt::black); + p.setColor(QPalette::Window, bg); + p.setColor(QPalette::ButtonText, Qt::black); + p.setColor(QPalette::Button, color.lighter(150)); + p.setColor(QPalette::Link, QColor(240,40,40)); + + qApp->setPalette(p); +#endif + + QPushButton *quitButton = new QPushButton(tr("Quit")); + 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(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")); + mEndCallButton->setEnabled(false); + 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 ? " 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(""); + mNumber = new QLineEdit(""); + + QVBoxLayout *vl = new QVBoxLayout; + vl->setMargin(0); + vl->setSpacing(0); + + vl->addWidget(quitButton); + vl->addWidget(answerButtonDial); + vl->addWidget(answerButtonUri); + vl->addWidget(answerButtonFile); + vl->addWidget(title); + vl->addWidget(mLabel); + vl->addWidget(mNumber); + + setLayout(vl); + +#if defined(Q_WS_X11) || defined(Q_WS_WIN) + setFixedSize(QSize(360,640)); // nHD +#elif defined(Q_WS_S60) + // showMaximized(); + showFullScreen(); +#endif +// new DialerService(this); +} + + +ServiceApp::~ServiceApp() +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::~ServiceApp"); + delete mDialService; + delete mUriService; + delete mFileService; +} + +void ServiceApp::quit() +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::quit"); + qApp->quit(); +} + +void ServiceApp::answerDial() +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::answerDial"); + if (mDialService && mDialService->asyncAnswer()) + { + mDialService->complete(mNumber->text()); + } + if (mNewDialService && mNewDialService->asyncAnswer()) + { + mNewDialService->complete(mNumber->text()); + } +} + + +void ServiceApp::answerUri() +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::answerUri"); + if (mUriService && mUriService->asyncAnswer()) + { + mUriService->complete(true); + } + if (mNewUriService && mNewUriService->asyncAnswer()) + { + mNewUriService->complete(true); + } +} + +void ServiceApp::answerFile() +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::answerFile"); + if (mFileService && mFileService->asyncAnswer()) + { + mFileService->complete(true); + } + if (mNewFileService && mNewFileService->asyncAnswer()) + { + mNewFileService->complete(true); + } +} + + + +void ServiceApp::endCall() +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::endCall"); + //QVBoxLayout *vl = qobject_cast(layout()) ; + //vl->removeWidget(mEndCallButton); + + //XQServiceUtil::toBackground(true); +} + +void ServiceApp::setLabelNumber(QString label,QString number) +{ + XQSERVICE_DEBUG_PRINT("ServiceApp::setLabelNumber"); + mLabel->setText(label); + mNumber->setText(number); +} + +// ----------DialerService--------------- + +DialerService::DialerService(ServiceApp* parent) +: XQServiceProvider(QLatin1String("com.nokia.services.serviceapp.Dialer"),parent), + mServiceApp(parent) +{ + XQSERVICE_DEBUG_PRINT("DialerService::DialerService"); + publishAll(); +} + +DialerService::~DialerService() +{ + XQSERVICE_DEBUG_PRINT("DialerService::~DialerService"); +} + +void DialerService::complete(QString number) +{ + XQSERVICE_DEBUG_PRINT("DialerService::complete"); + + // 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) +{ + Q_UNUSED(asyncAnswer); + + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,DialerService::dial", qPrintable(testCase)); + + XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(), info.clientSecureId(), info.clientVendorId()); + QSet caps = info.clientCapabilities(); + QSetIterator i(caps); + while (i.hasNext()) + qDebug() << "Has capability " << i.next(); + XQSERVICE_DEBUG_PRINT("\tRequest info: embed=%d,sync=%d", info.isEmbedded(), info.isSynchronous()); + + bool isAsync = !info.isSynchronous(); + QString label = "Dialer::dial:\n"; + label += QString("number=%1\n").arg(number); + label += QString("async=%1\n").arg(isAsync); + + connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered())); + + mNumber = number ; + mServiceApp->setLabelNumber(label, number); + int ret = 0; + if (isAsync) + { + mAsyncReqIds.insertMulti(info.clientSecureId(), setCurrentRequestAsync()); + connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect())); + } + else + { + ret = number.toInt(); + } + 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) +{ + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,DialerService::testVariant", qPrintable(testCase)); + + 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")) + { + qDebug() << "DialerService::testVariant QStringList"; + QStringList ret = variant.toStringList(); + return qVariantFromValue(ret); + } + else if (variant.typeName() == QLatin1String("XQShabarableFile")) + { + qDebug() << "DialerService::testVariant XQShabarableFile"; + XQSharableFile sf = variant.value(); + + 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")) + { + qDebug() << "DialerService::testVariant XQRequestInfo"; + XQRequestInfo info = variant.value(); + 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")) + { + qDebug() << "DialerService::testVariant 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 + 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()) + { + qDebug() << "DialerService::showRecipients: canConvert"; + list = qVariantValue(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) +{ + Q_UNUSED(asyncAnswer); + + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,NewDialerService::dial", qPrintable(testCase)); + + XQSERVICE_DEBUG_PRINT("\tRequest info: id=%d,sid=%X,vid=%X", info.id(), info.clientSecureId(), info.clientVendorId()); + QSet caps = info.clientCapabilities(); + QSetIterator i(caps); + while (i.hasNext()) + qDebug() << "Has capability " << i.next(); + XQSERVICE_DEBUG_PRINT("\tRequest info: embed=%d,sync=%d", info.isEmbedded(), info.isSynchronous()); + + bool isAsync = !info.isSynchronous(); + + QString label = "NewDialer::dial:\n"; + label += QString("number=%1\n").arg(number); + label += QString("async=%1\n").arg(isAsync); + + connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered())); + + mNumber = number ; + mServiceApp->setLabelNumber(label, number); + int ret = 0; + if (isAsync) + { + mAsyncReqIds.insertMulti(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) +{ + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,NewDialerService::testVariant", qPrintable(testCase)); + + 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("TestServiceDataList")) + { + qDebug() << "DialerService::testVariant TestServiceDataList"; + TestServiceDataList list; + if(variant.canConvert()) + { + qDebug() << "DialerService::TestServiceDataList: canConvert OK"; + list = qVariantValue(variant); + for (int i = 0; i < list.count(); ++i) + { + qDebug() << "DialerService::TestServiceDataList[" << i << "]=" << list[i].mType; + qDebug() << "DialerService::TestServiceDataList[" << i << "]=" << list[i].mData.toString(); + } + } + else + { + qDebug() << "DialerService::TestServiceDataList: canConvert NOK"; + } + + TestServiceDataList resultList; + QVariant v1; + QVariant v2; + QVariant v3; + v1.setValue((int)99); + v2.setValue((bool)false); + v3.setValue(QString("Variant3 return")); + TestServiceData data1(1, v1); + TestServiceData data2(2, v2); + TestServiceData data3(3, v3); + resultList.append(data1); + resultList.append(data2); + resultList.append(data3); + + // Return some data back + return qVariantFromValue(resultList); + } + else if (variant.typeName() == QLatin1String("XQShabarableFile")) + { + XQSharableFile sf = variant.value(); + + 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(); + 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 if (variant.typeName() == QLatin1String("QByteArray")) + { + QByteArray val = variant.value(); + qDebug() << "DialerService::QByteArray size=" << val.size(); + return qVariantFromValue(val); + } + 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()) + { + qDebug() << "NewDialerService::showRecipients: canConvert"; + list = qVariantValue(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) + +Q_IMPLEMENT_USER_METATYPE(TestServiceData) +Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(TestServiceDataList) + +// ----------UriService--------------- + +UriService::UriService(ServiceApp* parent) +: XQServiceProvider(QLatin1String("com.nokia.services.serviceapp.com.nokia.symbian.IUriView"),parent), + mServiceApp(parent) + +{ + XQSERVICE_DEBUG_PRINT("UriService::UriService"); + publishAll(); +} + +UriService::~UriService() +{ + XQSERVICE_DEBUG_PRINT("UriService::~UriService"); +} + +void UriService::complete(bool ok) +{ + Q_UNUSED(ok) + XQSERVICE_DEBUG_PRINT("UriService::complete"); + // Complete all IDs + foreach (quint32 reqId, mAsyncReqIds) + { + XQSERVICE_DEBUG_PRINT("UriService::complete %d", reqId); + completeRequest(reqId, QVariant(mRetValue)); + } +} + +bool UriService::view(const QString& uri) +{ + XQSERVICE_DEBUG_PRINT("UriService::view(1)"); + return view(uri, true); +} + +bool UriService::view(const QString& uri, bool retValue) +{ + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,UriService::view", qPrintable(testCase)); + + QString label = "IUriView::view\n:"; + label += QString ("Uri=%1\n").arg(uri); + label += QString ("retValue=%1\n").arg(retValue); + QString param = QString ("retValue=%1\n").arg(retValue); + + bool isAsync = !info.isSynchronous();; + connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered())); + + mRetValue = retValue; + mServiceApp->setLabelNumber(label,param); + if (isAsync) + { + mAsyncReqIds.insertMulti(info.clientSecureId(), setCurrentRequestAsync()); + connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect())); + } + + return retValue; +} + +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()); + + 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) +{ + Q_UNUSED(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) +{ + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,NewUriService::view", qPrintable(testCase)); + + QString label = "New IUriView::view\n:"; + label += QString ("Uri=%1\n").arg(uri); + label += QString ("retValue=%1\n").arg(retValue); + QString param = QString ("retValue=%1\n").arg(retValue); + + bool isAsync = !info.isSynchronous();; + connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered())); + + mRetValue = retValue; + mServiceApp->setLabelNumber(label,param); + if (isAsync) + { + mAsyncReqIds.insertMulti(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) + +{ + XQSERVICE_DEBUG_PRINT("FileService::FileService"); + publishAll(); +} + +FileService::~FileService() +{ + XQSERVICE_DEBUG_PRINT("FileService::~FileService"); +} + +void FileService::complete(bool ok) +{ + XQSERVICE_DEBUG_PRINT("FileService::complete"); + // Complete all + foreach (quint32 reqId, mAsyncReqIds) + { + XQSERVICE_DEBUG_PRINT("FileService::complete %d", reqId); + completeRequest(reqId, QVariant(ok)); + } +} + +bool FileService::view(QString file) +{ + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,FileService::view", qPrintable(testCase)); + + QString label = "IFileView::view\n:"; + QString param = QString ("File=%1\n").arg(file); + + bool isAsync = !info.isSynchronous();; + connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered())); + + mServiceApp->setLabelNumber(label,param); + if (isAsync) + { + mAsyncReqIds.insertMulti(info.clientSecureId(), setCurrentRequestAsync()); + connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect())); + } + + return true; +} + + +bool FileService::view(XQSharableFile sf) +{ + XQSERVICE_DEBUG_PRINT("FileService::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("FileService::file read,%d,%s", err, qPrintable(text)); + sf.close(); + delete data; + } + + XQRequestInfo info = requestInfo(); + bool isAsync = !info.isSynchronous();; + + mServiceApp->setLabelNumber(label,param); + if (isAsync) + { + mAsyncReqIds.insertMulti(info.clientSecureId(), setCurrentRequestAsync()); + connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect())); + } + return true; +} + + +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()); + + 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) +{ + XQRequestInfo info = requestInfo(); + QString testCase = (info.info(TESTCASE_INFO_KEY)).toString(); + XQSERVICE_DEBUG_PRINT("XQTESTER serviceapp,%s,NewFileService::view", qPrintable(testCase)); + + QString label = "New IFileView::view\n:"; + QString param = QString ("File=%1\n").arg(file); + + bool isAsync = !info.isSynchronous();; + connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered())); + + mServiceApp->setLabelNumber(label,param); + if (isAsync) + { + mAsyncReqIds.insertMulti(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 isAsync = !info.isSynchronous();; + + mServiceApp->setLabelNumber(label,param); + if (isAsync) + { + mAsyncReqIds.insertMulti(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()); + +} +