new and improved jobs/services mechanisms
svn path=/trunk/KDE/kdebase/runtime/; revision=1160074
This commit is contained in:
parent
dca84d9d21
commit
4c7b3462c1
@ -229,7 +229,6 @@ QScriptValue JavaScriptDataEngine::serviceCtor(QScriptContext *context, QScriptE
|
|||||||
JavaScriptService *service = new JavaScriptService(serviceName, iFace);
|
JavaScriptService *service = new JavaScriptService(serviceName, iFace);
|
||||||
if (service->wasFound()) {
|
if (service->wasFound()) {
|
||||||
QScriptValue v = engine->newQObject(service, QScriptEngine::QtOwnership, QScriptEngine::ExcludeSuperClassContents);
|
QScriptValue v = engine->newQObject(service, QScriptEngine::QtOwnership, QScriptEngine::ExcludeSuperClassContents);
|
||||||
service->setScriptValue(v);
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,38 @@
|
|||||||
#include "common/scriptenv.h"
|
#include "common/scriptenv.h"
|
||||||
#include "javascriptdataengine.h"
|
#include "javascriptdataengine.h"
|
||||||
|
|
||||||
|
JavaScriptServiceJob::JavaScriptServiceJob(QScriptEngine *engine, const QString &destination, const QString &operation,
|
||||||
|
const QMap<QString, QVariant> ¶meters, QObject *parent)
|
||||||
|
: Plasma::ServiceJob(destination, operation, parameters, parent),
|
||||||
|
m_thisObject(engine->newQObject(this, QScriptEngine::QtOwnership, QScriptEngine::ExcludeSuperClassContents))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void JavaScriptServiceJob::start()
|
||||||
|
{
|
||||||
|
if (!m_startFunction.isFunction()) {
|
||||||
|
setResult(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_startFunction.call(m_thisObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue JavaScriptServiceJob::scriptValue() const
|
||||||
|
{
|
||||||
|
return m_thisObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
QScriptValue JavaScriptServiceJob::startFunction() const
|
||||||
|
{
|
||||||
|
return m_startFunction;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JavaScriptServiceJob::setStartFunction(const QScriptValue &v)
|
||||||
|
{
|
||||||
|
m_startFunction = v;
|
||||||
|
}
|
||||||
|
|
||||||
JavaScriptService::JavaScriptService(const QString &serviceName, JavaScriptDataEngine *engine)
|
JavaScriptService::JavaScriptService(const QString &serviceName, JavaScriptDataEngine *engine)
|
||||||
: Plasma::Service(engine),
|
: Plasma::Service(engine),
|
||||||
m_dataEngine(engine)
|
m_dataEngine(engine)
|
||||||
@ -36,33 +68,15 @@ JavaScriptService::~JavaScriptService()
|
|||||||
// kDebug();
|
// kDebug();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JavaScriptService::setScriptValue(QScriptValue &v)
|
|
||||||
{
|
|
||||||
m_scriptValue = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
Plasma::ServiceJob *JavaScriptService::createJob(const QString &operation, QMap<QString, QVariant> ¶meters)
|
Plasma::ServiceJob *JavaScriptService::createJob(const QString &operation, QMap<QString, QVariant> ¶meters)
|
||||||
{
|
{
|
||||||
QMapIterator<QString, QVariant> it(parameters);
|
if (m_setupFunc.isFunction() && m_dataEngine && isOperationEnabled(operation)) {
|
||||||
if (m_dataEngine) {
|
JavaScriptServiceJob *job = new JavaScriptServiceJob(m_dataEngine.data()->engine(), destination(), operation, parameters, this);
|
||||||
ScriptEnv *env = ScriptEnv::findScriptEnv(m_dataEngine.data()->engine());
|
|
||||||
if (env) {
|
|
||||||
QScriptValueList args;
|
QScriptValueList args;
|
||||||
args << m_scriptValue << operation
|
args << job->scriptValue();
|
||||||
<< qScriptValueFromValue(m_dataEngine.data()->engine(), parameters);
|
m_setupFunc.call(QScriptValue(), args);
|
||||||
//TODO: Parameters!
|
|
||||||
QScriptValue func = m_scriptValue.property("createJob");
|
|
||||||
/*
|
|
||||||
kDebug() << "same thing?" << v.equals(sv) << func.isFunction() <<
|
|
||||||
sv.property("createJob").isFunction();
|
|
||||||
*/
|
|
||||||
QScriptValue rv = env->callFunction(func, args, m_scriptValue);
|
|
||||||
Plasma::ServiceJob *job = dynamic_cast<Plasma::ServiceJob *>(rv.toQObject());
|
|
||||||
if (job) {
|
|
||||||
return job;
|
return job;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -90,5 +104,15 @@ void JavaScriptService::registerOperationsScheme()
|
|||||||
setOperationsScheme(&file);
|
setOperationsScheme(&file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QScriptValue JavaScriptService::setupJobFunction() const
|
||||||
|
{
|
||||||
|
return m_setupFunc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JavaScriptService::setSetupJobFunction(const QScriptValue &v)
|
||||||
|
{
|
||||||
|
m_setupFunc = v;
|
||||||
|
}
|
||||||
|
|
||||||
#include "javascriptservice.moc"
|
#include "javascriptservice.moc"
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include <Plasma/Package>
|
#include <Plasma/Package>
|
||||||
#include <Plasma/Service>
|
#include <Plasma/Service>
|
||||||
|
#include <Plasma/ServiceJob>
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
{
|
{
|
||||||
@ -32,19 +33,49 @@ namespace Plasma
|
|||||||
|
|
||||||
class JavaScriptDataEngine;
|
class JavaScriptDataEngine;
|
||||||
|
|
||||||
|
class JavaScriptServiceJob : public Plasma::ServiceJob
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QString destination READ destination)
|
||||||
|
Q_PROPERTY(QString operationName READ operationName)
|
||||||
|
Q_PROPERTY(QVariantMap parameters READ parameters)
|
||||||
|
Q_PROPERTY(QVariant result READ result WRITE setResult)
|
||||||
|
Q_PROPERTY(int error READ error WRITE setError)
|
||||||
|
Q_PROPERTY(QString errorText READ errorText WRITE setErrorText)
|
||||||
|
Q_PROPERTY(QScriptValue start READ startFunction WRITE setStartFunction)
|
||||||
|
|
||||||
|
public:
|
||||||
|
JavaScriptServiceJob(QScriptEngine *engine, const QString &destination, const QString &operation,
|
||||||
|
const QMap<QString, QVariant> ¶meters, QObject *parent = 0);
|
||||||
|
|
||||||
|
void start();
|
||||||
|
|
||||||
|
QScriptValue startFunction() const;
|
||||||
|
void setStartFunction(const QScriptValue &v);
|
||||||
|
|
||||||
|
QScriptValue scriptValue() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QScriptValue m_startFunction;
|
||||||
|
QScriptValue m_thisObject;
|
||||||
|
};
|
||||||
|
|
||||||
class JavaScriptService : public Plasma::Service
|
class JavaScriptService : public Plasma::Service
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(QString destination READ destination WRITE setDestination)
|
Q_PROPERTY(QString destination READ destination WRITE setDestination)
|
||||||
Q_PROPERTY(QStringList operationNames READ operationNames)
|
Q_PROPERTY(QStringList operationNames READ operationNames)
|
||||||
Q_PROPERTY(QString name READ name)
|
Q_PROPERTY(QString name READ name)
|
||||||
|
Q_PROPERTY(QScriptValue setupJob READ setupJobFunction WRITE setSetupJobFunction)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
JavaScriptService(const QString &serviceName, JavaScriptDataEngine *engine);
|
JavaScriptService(const QString &serviceName, JavaScriptDataEngine *engine);
|
||||||
~JavaScriptService();
|
~JavaScriptService();
|
||||||
|
|
||||||
bool wasFound() const;
|
bool wasFound() const;
|
||||||
void setScriptValue(QScriptValue &v);
|
|
||||||
|
QScriptValue setupJobFunction() const;
|
||||||
|
void setSetupJobFunction(const QScriptValue &v);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Plasma::ServiceJob *createJob(const QString &operation, QMap<QString, QVariant> ¶meters);
|
Plasma::ServiceJob *createJob(const QString &operation, QMap<QString, QVariant> ¶meters);
|
||||||
@ -52,7 +83,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QWeakPointer<JavaScriptDataEngine> m_dataEngine;
|
QWeakPointer<JavaScriptDataEngine> m_dataEngine;
|
||||||
QScriptValue m_scriptValue;
|
QScriptValue m_setupFunc;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user