diff options
Diffstat (limited to 'src/sdk')
-rw-r--r-- | src/sdk/commandlineinterface.cpp | 7 | ||||
-rw-r--r-- | src/sdk/installerbase.cpp | 58 | ||||
-rw-r--r-- | src/sdk/sdkapp.h | 84 |
3 files changed, 83 insertions, 66 deletions
diff --git a/src/sdk/commandlineinterface.cpp b/src/sdk/commandlineinterface.cpp index a6cd22151..59e9afe90 100644 --- a/src/sdk/commandlineinterface.cpp +++ b/src/sdk/commandlineinterface.cpp @@ -78,6 +78,13 @@ bool CommandLineInterface::initialize() // quite safe to assume that command is the first positional argument. m_positionalArguments.removeFirst(); } + + QString ctrlScript = controlScript(); + if (!ctrlScript.isEmpty()) { + m_core->controlScriptEngine()->loadInContext( + QLatin1String("Controller"), ctrlScript); + qCDebug(QInstaller::lcInstallerInstallLog) << "Loaded control script" << ctrlScript; + } return true; } diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp index a31278d03..32df0b550 100644 --- a/src/sdk/installerbase.cpp +++ b/src/sdk/installerbase.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -40,7 +40,6 @@ #include <QDir> #include <QDirIterator> #include <QFontDatabase> -#include <QTranslator> #ifdef ENABLE_SQUISH #include <qtbuiltinhook.h> @@ -71,61 +70,10 @@ int InstallerBase::run() f.setItalic(true); QInstaller::PackageManagerCore::setVirtualComponentsFont(f); } - QString controlScript; - if (m_parser.isSet(CommandLineOptions::scScriptLong)) { - controlScript = m_parser.value(CommandLineOptions::scScriptLong); - if (!QFileInfo(controlScript).exists()) { - qCDebug(QInstaller::lcInstallerInstallLog) << "Script file does not exist."; - return false; - } - } else if (!m_core->settings().controlScript().isEmpty()) { - controlScript = QLatin1String(":/metadata/installer-config/") - + m_core->settings().controlScript(); - } qCDebug(QInstaller::lcInstallerInstallLog) << "Language:" << QLocale().uiLanguages() .value(0, QLatin1String("No UI language set")).toUtf8().constData(); -#ifndef IFW_DISABLE_TRANSLATIONS - const QString directory = QLatin1String(":/translations"); - // Check if there is a modified translation first to enable people - // to easily provide corrected translations to Qt/IFW for their installers - const QString newDirectory = QLatin1String(":/translations_new"); - const QStringList translations = m_core->settings().translations(); - - if (translations.isEmpty()) { - foreach (const QLocale locale, QLocale().uiLanguages()) { - QScopedPointer<QTranslator> qtTranslator(new QTranslator(QCoreApplication::instance())); - bool qtLoaded = qtTranslator->load(locale, QLatin1String("qt"), - QLatin1String("_"), newDirectory); - if (!qtLoaded) - qtLoaded = qtTranslator->load(locale, QLatin1String("qt"), - QLatin1String("_"), directory); - - if (qtLoaded || locale.language() == QLocale::English) { - if (qtLoaded) - QCoreApplication::instance()->installTranslator(qtTranslator.take()); - - QScopedPointer<QTranslator> ifwTranslator(new QTranslator(QCoreApplication::instance())); - bool ifwLoaded = ifwTranslator->load(locale, QLatin1String("ifw"), QLatin1String("_"), newDirectory); - if (!ifwLoaded) - ifwLoaded = ifwTranslator->load(locale, QLatin1String("ifw"), QLatin1String("_"), directory); - if (ifwLoaded) - QCoreApplication::instance()->installTranslator(ifwTranslator.take()); - - // To stop loading other translations it's sufficient that - // qt was loaded successfully or we hit English as system language - emit m_core->defaultTranslationsLoadedForLanguage(locale.language()); - break; - } - } - } else { - foreach (const QString &translation, translations) { - QScopedPointer<QTranslator> translator(new QTranslator(QCoreApplication::instance())); - if (translator->load(translation, QLatin1String(":/translations"))) - QCoreApplication::instance()->installTranslator(translator.take()); - } - } -#endif + { QDirIterator fontIt(QStringLiteral(":/fonts")); while (fontIt.hasNext()) { @@ -138,7 +86,7 @@ int InstallerBase::run() //create the wizard GUI TabController controller(nullptr); controller.setManager(m_core); - controller.setControlScript(controlScript); + controller.setControlScript(controlScript()); if (m_core->isInstaller()) controller.setGui(new InstallerGui(m_core)); else diff --git a/src/sdk/sdkapp.h b/src/sdk/sdkapp.h index 0c6c362bc..f1f3cf25c 100644 --- a/src/sdk/sdkapp.h +++ b/src/sdk/sdkapp.h @@ -47,6 +47,7 @@ #include <globals.h> #include <errors.h> #include <loggingutils.h> +#include <scriptengine.h> #include <QApplication> #include <QDir> @@ -57,6 +58,7 @@ #include <QUuid> #include <QMessageBox> #include <QMetaEnum> +#include <QTranslator> template<class T> class SDKApp : public T @@ -92,17 +94,6 @@ public: bool init(QString &errorMessage) { QString appname = qApp->applicationName(); - if (m_runCheck.isRunning(RunOnceChecker::ConditionFlag::Lockfile)) { - // It is possible to install an application and thus the maintenance tool into a - // directory that requires elevated permission to create a lock file. Since this - // cannot be done without requesting credentials from the user, we silently ignore - // the fact that we could not create the lock file and check the running processes. - if (m_runCheck.isRunning(RunOnceChecker::ConditionFlag::ProcessList)) { - errorMessage = QObject::tr("Another %1 instance is already running. Wait " - "until it finishes, close it, or restart your system.").arg(qAppName()); - return false; - } - } QFile binary(binaryFile()); #ifdef Q_OS_WIN // On some admin user installations it is possible that the installer.dat @@ -205,6 +196,62 @@ public: QInstaller::Protocol::Mode::Production, userArgs, isCommandLineInterface); } +#ifndef IFW_DISABLE_TRANSLATIONS + if (!isCommandLineInterface) { + const QString directory = QLatin1String(":/translations"); + // Check if there is a modified translation first to enable people + // to easily provide corrected translations to Qt/IFW for their installers + const QString newDirectory = QLatin1String(":/translations_new"); + const QStringList translations = m_core->settings().translations(); + + if (translations.isEmpty()) { + foreach (const QLocale locale, QLocale().uiLanguages()) { + QScopedPointer<QTranslator> qtTranslator(new QTranslator(QCoreApplication::instance())); + bool qtLoaded = qtTranslator->load(locale, QLatin1String("qt"), + QLatin1String("_"), newDirectory); + if (!qtLoaded) + qtLoaded = qtTranslator->load(locale, QLatin1String("qt"), + QLatin1String("_"), directory); + + if (qtLoaded || locale.language() == QLocale::English) { + if (qtLoaded) + QCoreApplication::instance()->installTranslator(qtTranslator.take()); + + QScopedPointer<QTranslator> ifwTranslator(new QTranslator(QCoreApplication::instance())); + bool ifwLoaded = ifwTranslator->load(locale, QLatin1String("ifw"), QLatin1String("_"), newDirectory); + if (!ifwLoaded) + ifwLoaded = ifwTranslator->load(locale, QLatin1String("ifw"), QLatin1String("_"), directory); + if (ifwLoaded) + QCoreApplication::instance()->installTranslator(ifwTranslator.take()); + + // To stop loading other translations it's sufficient that + // qt was loaded successfully or we hit English as system language + emit m_core->defaultTranslationsLoadedForLanguage(locale.language()); + break; + } + } + } else { + foreach (const QString &translation, translations) { + QScopedPointer<QTranslator> translator(new QTranslator(QCoreApplication::instance())); + if (translator->load(translation, QLatin1String(":/translations"))) + QCoreApplication::instance()->installTranslator(translator.take()); + } + } + } +#endif + + if (m_runCheck.isRunning(RunOnceChecker::ConditionFlag::Lockfile)) { + // It is possible to install an application and thus the maintenance tool into a + // directory that requires elevated permission to create a lock file. Since this + // cannot be done without requesting credentials from the user, we silently ignore + // the fact that we could not create the lock file and check the running processes. + if (m_runCheck.isRunning(RunOnceChecker::ConditionFlag::ProcessList)) { + errorMessage = QObject::tr("Another %1 instance is already running. Wait " + "until it finishes, close it, or restart your system.").arg(qAppName()); + return false; + } + } + // From Qt5.8 onwards system proxy is used by default. If Qt is built with // QT_USE_SYSTEM_PROXIES false then system proxies are not used by default. if (m_parser.isSet(CommandLineOptions::scNoProxyLong)) { @@ -492,6 +539,21 @@ public: } } + QString controlScript() + { + QString controlScript = QString(); + if (m_parser.isSet(CommandLineOptions::scScriptLong)) { + controlScript = m_parser.value(CommandLineOptions::scScriptLong); + if (!QFileInfo(controlScript).exists()) + qCDebug(QInstaller::lcInstallerInstallLog) << "Script file does not exist."; + + } else if (!m_core->settings().controlScript().isEmpty()) { + controlScript = QLatin1String(":/metadata/installer-config/") + + m_core->settings().controlScript(); + } + return controlScript; + } + private: QList<QByteArray> m_resourceMappings; |