Sandboxie/SandboxiePlus/SandMan/Engine/SbieObject.h

164 lines
6.7 KiB
C++

#pragma once
#include "BoxEngine.h"
#include "BoxObject.h"
class CSbieObject : public QObject
{
Q_OBJECT
public:
CSbieObject(QObject* parent);
~CSbieObject();
public slots:
CBoxObject* GetBox(const QString& Name);
QStringList ListBoxes();
CBoxObject* NewBox(const QString& Name);
CIniObject* GetTemplate(const QString& Name);
QStringList ListTemplates();
CIniObject* NewTemplate(const QString& Name);
//CIniObject* GetSection(const QString& Name);
CIniObject* GetGlobal();
CIniObject* GetConf();
bool SetupTrace(const QVariantMap& Options);
QVariantList ReadTrace(const QVariantMap& Options);
void CleanUp(const QVariantMap& Options);
void ShellInstall(const QVariantMap& Options);
void ShellRemove();
void LogMessage(const QVariant& Message, bool bNotify);
protected:
bool m_TraceStarted;
};
//////////////////////////////////////////////////////////////////////////////////////////
// JSbieObject
//
class JSbieObject : public QObject
{
Q_OBJECT
public:
JSbieObject(CSbieObject* pObject, CBoxEngine* pEngine)
: m_pObject(pObject), m_pEngine(pEngine) {}
~JSbieObject() { QMetaObject::invokeMethod(m_pObject, "deleteLater"); }
Q_INVOKABLE QJSValue getVersion();
static QJSValue makeShadow(QJSValueList args) {
QString result = "Hello, ";
// Access arguments passed from JavaScript
if (args.length() > 0 && args[0].isString()) {
QString name = args[0].toString();
result += name;
}
return QJSValue(result);
}
Q_INVOKABLE QJSValue getBox(const QString& Name) {
CBoxObject* pObj = NULL;
QMetaObject::invokeMethod(m_pObject, "GetBox", Qt::BlockingQueuedConnection, Q_RETURN_ARG(CBoxObject*, pObj), Q_ARG(QString, Name));
if(!pObj)
return QJSValue(QJSValue::NullValue);
if(m_pEngine->inherits("CWizardEngine"))
return m_pEngine->m_pEngine->newQObject(new JSBoxObject(pObj, m_pEngine));
return m_pEngine->m_pEngine->newQObject(new JBoxObject(pObj, m_pEngine));
}
Q_INVOKABLE QJSValue listBoxes() {
QStringList List;
QMetaObject::invokeMethod(m_pObject, "ListBoxes", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QStringList, List));
return m_pEngine->m_pEngine->toScriptValue(List);
}
Q_INVOKABLE QJSValue newBox(const QString& Name) {
CBoxObject* pObj = NULL;
QMetaObject::invokeMethod(m_pObject, "NewBox", Qt::BlockingQueuedConnection, Q_RETURN_ARG(CBoxObject*, pObj), Q_ARG(QString, Name));
return pObj ? m_pEngine->m_pEngine->newQObject(new JBoxObject(pObj, m_pEngine)) : QJSValue(QJSValue::NullValue);
}
Q_INVOKABLE QJSValue getTemplate(const QString& Name) {
if (Name.left(6) != "Local_") {
// shortcut for non user defined templates
QSharedPointer<CSbieIni> pTemplate = QSharedPointer<CSbieIni>(new CSbieIni("Template_" + Name, theAPI));
return m_pEngine->m_pEngine->newQObject(new CIniObject(pTemplate, true, m_pEngine->m_pEngine));
}
CIniObject* pObj = NULL;
QMetaObject::invokeMethod(m_pObject, "GetTemplate", Qt::BlockingQueuedConnection, Q_RETURN_ARG(CIniObject*, pObj), Q_ARG(QString, Name));
if(!pObj)
return QJSValue::NullValue;
if(m_pEngine->inherits("CWizardEngine"))
return m_pEngine->m_pEngine->newQObject(new JSTmplObject(pObj, m_pEngine));
return m_pEngine->m_pEngine->newQObject(new JTmplObject(pObj, m_pEngine));
}
Q_INVOKABLE QJSValue listTemplates() {
QStringList List;
QMetaObject::invokeMethod(m_pObject, "ListTemplates", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QStringList, List));
return m_pEngine->m_pEngine->toScriptValue(List);
}
Q_INVOKABLE QJSValue newTemplate(const QString& Name) {
CIniObject* pObj = NULL;
QMetaObject::invokeMethod(m_pObject, "NewTemplate", Qt::BlockingQueuedConnection, Q_RETURN_ARG(CIniObject*, pObj), Q_ARG(QString, Name));
return pObj ? m_pEngine->m_pEngine->newQObject(new JTmplObject(pObj, m_pEngine)) : QJSValue(QJSValue::NullValue);
}
//Q_INVOKABLE QJSValue GetSection(const QString& Name) {
// CIniObject* pObj = NULL;
// QMetaObject::invokeMethod(m_pObject, "getSection", Qt::BlockingQueuedConnection, Q_RETURN_ARG(CIniObject*, pObj), Q_ARG(QString, Name));
// return pObj ? m_pEngine->m_pEngine->newQObject(new JIniObject(pObj, m_pEngine)) : QJSValue(QJSValue::NullValue);
//}
Q_INVOKABLE QJSValue getGlobal() {
CIniObject* pObj = NULL;
QMetaObject::invokeMethod(m_pObject, "GetGlobal", Qt::BlockingQueuedConnection, Q_RETURN_ARG(CIniObject*, pObj));
return pObj ? m_pEngine->m_pEngine->newQObject(new JIniObject(pObj, m_pEngine)) : QJSValue(QJSValue::NullValue);
}
Q_INVOKABLE QJSValue getConf() {
CIniObject* pObj = NULL;
QMetaObject::invokeMethod(m_pObject, "GetConf", Qt::BlockingQueuedConnection, Q_RETURN_ARG(CIniObject*, pObj));
return pObj ? m_pEngine->m_pEngine->newQObject(new JIniObject(pObj, m_pEngine)) : QJSValue(QJSValue::NullValue);
}
Q_INVOKABLE QJSValue setupTrace(const QVariantMap& Options = QVariantMap()) {
bool Success;
QMetaObject::invokeMethod(m_pObject, "SetupTrace", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, Success), Q_ARG(const QVariantMap&, Options));
return Success;
}
Q_INVOKABLE QJSValue readTrace(const QVariantMap& Options = QVariantMap()) {
QVariantList List;
QMetaObject::invokeMethod(m_pObject, "ReadTrace", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVariantList, List), Q_ARG(const QVariantMap&, Options));
return m_pEngine->m_pEngine->toScriptValue(List);
}
Q_INVOKABLE void cleanUp(const QVariantMap& Options = QVariantMap()) {
QMetaObject::invokeMethod(m_pObject, "CleanUp", Qt::BlockingQueuedConnection, Q_ARG(const QVariantMap&, Options));
}
Q_INVOKABLE void shellInstall(const QVariantMap& Options = QVariantMap()) {
QMetaObject::invokeMethod(m_pObject, "ShellInstall", Qt::BlockingQueuedConnection, Q_ARG(const QVariantMap&, Options));
}
Q_INVOKABLE void shellRemove() {
QMetaObject::invokeMethod(m_pObject, "ShellRemove", Qt::BlockingQueuedConnection);
}
Q_INVOKABLE void logMessage(const QVariant& Message, bool bNotify = false) {
QMetaObject::invokeMethod(m_pObject, "LogMessage", Qt::BlockingQueuedConnection, Q_ARG(const QVariant&, Message), Q_ARG(bool, bNotify));
}
Q_INVOKABLE bool testFeature(const QString& name);
protected:
CBoxEngine* m_pEngine;
CSbieObject* m_pObject;
};