diff options
Diffstat (limited to 'src/libs/installer/scriptengine.cpp')
-rw-r--r-- | src/libs/installer/scriptengine.cpp | 109 |
1 files changed, 51 insertions, 58 deletions
diff --git a/src/libs/installer/scriptengine.cpp b/src/libs/installer/scriptengine.cpp index c8fc65d34..7e3e69eb2 100644 --- a/src/libs/installer/scriptengine.cpp +++ b/src/libs/installer/scriptengine.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2024 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -32,6 +32,9 @@ #include "scriptengine_p.h" #include "systeminfo.h" #include "loggingutils.h" +#include "packagemanagergui.h" +#include "component.h" +#include "settings.h" #include <QMetaEnum> #include <QQmlEngine> @@ -53,18 +56,6 @@ namespace QInstaller { /*! \inmodule QtInstallerFramework - \class QInstaller::ConsoleProxy - \internal -*/ - -/*! - \inmodule QtInstallerFramework - \class QInstaller::InstallerProxy - \internal -*/ - -/*! - \inmodule QtInstallerFramework \class QInstaller::QDesktopServicesProxy \internal */ @@ -75,28 +66,6 @@ namespace QInstaller { \internal */ -QJSValue InstallerProxy::components(const QString ®exp) const -{ - if (m_core) { - const QList<Component*> all = m_core->components(PackageManagerCore::ComponentType::All, regexp); - QJSValue scriptComponentsObject = m_engine->newArray(all.count()); - for (int i = 0; i < all.count(); ++i) { - Component *const component = all.at(i); - QQmlEngine::setObjectOwnership(component, QQmlEngine::CppOwnership); - scriptComponentsObject.setProperty(i, m_engine->newQObject(component)); - } - return scriptComponentsObject; - } - return m_engine->newArray(); -} - -QJSValue InstallerProxy::componentByName(const QString &componentName) -{ - if (m_core) - return m_engine->newQObject(m_core->componentByName(componentName)); - return QJSValue(); -} - QJSValue QDesktopServicesProxy::findFiles(const QString &path, const QString &pattern) { QStringList result; @@ -220,6 +189,12 @@ bool GuiProxy::isButtonEnabled(int wizardButton) return m_gui->isButtonEnabled(wizardButton); } +void GuiProxy::setWizardPageButtonText(int pageId, int buttonId, const QString &buttonText) +{ + if (m_gui) + m_gui->setWizardPageButtonText(pageId, buttonId, buttonText); +} + void GuiProxy::showSettingsButton(bool show) { if (m_gui) @@ -375,24 +350,23 @@ QString QFileDialogProxy::getExistingFileOrDirectory(const QString &caption, /*! Constructs a script engine with \a core as parent. */ -ScriptEngine::ScriptEngine(PackageManagerCore *core) : - QObject(core), - m_guiProxy(new GuiProxy(this, this)) +ScriptEngine::ScriptEngine(PackageManagerCore *core) : QObject(core) + , m_guiProxy(new GuiProxy(this, this)) + , m_core(core) { - m_engine.installExtensions(QJSEngine::TranslationExtension); + m_engine.installExtensions(QJSEngine::TranslationExtension | QJSEngine::ConsoleExtension); QJSValue global = m_engine.globalObject(); - global.setProperty(QLatin1String("console"), m_engine.newQObject(new ConsoleProxy)); + global.setProperty(QLatin1String("QFileDialog"), m_engine.newQObject(new QFileDialogProxy(core))); - const QJSValue proxy = m_engine.newQObject(new InstallerProxy(this, core)); - global.setProperty(QLatin1String("InstallerProxy"), proxy); - global.setProperty(QLatin1String("print"), m_engine.newQObject(new ConsoleProxy) - .property(QLatin1String("log"))); global.setProperty(QLatin1String("systemInfo"), m_engine.newQObject(new SystemInfo)); global.setProperty(QLatin1String("QInstaller"), generateQInstallerObject()); global.setProperty(QLatin1String("buttons"), generateWizardButtonsObject()); global.setProperty(QLatin1String("QMessageBox"), generateMessageBoxObject()); global.setProperty(QLatin1String("QDesktopServices"), generateDesktopServicesObject()); +#ifdef Q_OS_WIN + global.setProperty(QLatin1String("QSettings"), generateSettingsObject()); +#endif if (core) { setGuiQObject(core->guiObject()); @@ -403,19 +377,14 @@ ScriptEngine::ScriptEngine(PackageManagerCore *core) : global.setProperty(QLatin1String("installer"), m_engine.newQObject(new QObject)); } global.setProperty(QLatin1String("gui"), m_engine.newQObject(m_guiProxy)); - - global.property(QLatin1String("installer")).setProperty(QLatin1String("components"), - proxy.property(QLatin1String("components"))); - global.property(QLatin1String("installer")).setProperty(QLatin1String("componentByName"), - proxy.property(QLatin1String("componentByName"))); } /*! Creates a JavaScript object that wraps the given QObject \a object. - Signals and slots, properties and children of \a object are - available as properties of the created QJSValue. In addition some helper methods and properties - are added: + Signals and slots, properties and children of \a object are available as properties + of the created QJSValue. If \a qtScriptCompat is set to \c true (default), some helper + methods and properties from the legacy \c QtScript module are added: \list \li findChild(), findChildren() recursively search for child objects with the given @@ -424,7 +393,7 @@ ScriptEngine::ScriptEngine(PackageManagerCore *core) : names. \endlist */ -QJSValue ScriptEngine::newQObject(QObject *object) +QJSValue ScriptEngine::newQObject(QObject *object, bool qtScriptCompat) { QJSValue jsValue = m_engine.newQObject(object); if (!jsValue.isQObject()) @@ -432,6 +401,9 @@ QJSValue ScriptEngine::newQObject(QObject *object) QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership); + if (!qtScriptCompat) // skip adding the extra properties + return jsValue; + // add findChild(), findChildren() methods known from QtScript QJSValue findChild = m_engine.evaluate( QLatin1String("(function() { return gui.findChild(this, arguments[0]); })")); @@ -566,14 +538,17 @@ QJSValue ScriptEngine::callScriptMethod(const QJSValue &scriptContext, const QSt if (!method.isCallable()) return QJSValue(QJSValue::UndefinedValue); if (method.isError()) { - throw Error(method.toString().isEmpty() ? QString::fromLatin1("Unknown error.") - : method.toString()); + QString errorString = method.toString().isEmpty() ? QString::fromLatin1("Unknown error.") + : method.toString(); + + throw Error(QString::fromLatin1("%1 \n%2 \"%3\"").arg(errorString, tr(scClearCacheHint), m_core->settings().localCachePath())); } const QJSValue result = method.call(arguments); if (result.isError()) { - throw Error(result.toString().isEmpty() ? QString::fromLatin1("Unknown error.") - : result.toString()); + QString errorString = result.toString().isEmpty() ? QString::fromLatin1("Unknown error.") + : result.toString(); + throw Error(QString::fromLatin1("%1 \n%2 \"%3\"").arg(errorString, tr(scClearCacheHint), m_core->settings().localCachePath())); } stack.removeLast(); @@ -649,20 +624,38 @@ QJSValue ScriptEngine::generateDesktopServicesObject() SETPROPERTY(desktopServices, PicturesLocation, QStandardPaths) SETPROPERTY(desktopServices, TempLocation, QStandardPaths) SETPROPERTY(desktopServices, HomeLocation, QStandardPaths) - SETPROPERTY(desktopServices, DataLocation, QStandardPaths) + SETPROPERTY(desktopServices, AppLocalDataLocation, QStandardPaths) SETPROPERTY(desktopServices, CacheLocation, QStandardPaths) + SETPROPERTY(desktopServices, GenericCacheLocation, QStandardPaths) SETPROPERTY(desktopServices, GenericDataLocation, QStandardPaths) SETPROPERTY(desktopServices, RuntimeLocation, QStandardPaths) SETPROPERTY(desktopServices, ConfigLocation, QStandardPaths) SETPROPERTY(desktopServices, DownloadLocation, QStandardPaths) SETPROPERTY(desktopServices, GenericCacheLocation, QStandardPaths) SETPROPERTY(desktopServices, GenericConfigLocation, QStandardPaths) + SETPROPERTY(desktopServices, AppDataLocation, QStandardPaths) + SETPROPERTY(desktopServices, AppConfigLocation, QStandardPaths) + SETPROPERTY(desktopServices, PublicShareLocation, QStandardPaths) + SETPROPERTY(desktopServices, TemplatesLocation, QStandardPaths) QJSValue object = m_engine.newQObject(new QDesktopServicesProxy(this)); object.setPrototype(desktopServices); // attach the properties return object; } +#ifdef Q_OS_WIN +QJSValue ScriptEngine::generateSettingsObject() +{ + QJSValue settingsObject = m_engine.newArray(); + SETPROPERTY(settingsObject, NativeFormat, QSettings) + SETPROPERTY(settingsObject, IniFormat, QSettings) + SETPROPERTY(settingsObject, Registry32Format, QSettings) + SETPROPERTY(settingsObject, Registry64Format, QSettings) + SETPROPERTY(settingsObject, InvalidFormat, QSettings) + return settingsObject; +} +#endif + QJSValue ScriptEngine::generateQInstallerObject() { // register ::WizardPage enum in the script connection |