diff options
-rw-r--r-- | src/libs/installer/constants.h | 2 | ||||
-rw-r--r-- | src/libs/installer/createshortcutoperation.h | 4 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 18 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercoredata.cpp | 4 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 2 | ||||
-rw-r--r-- | tests/auto/installer/createshortcutoperation/createshortcutoperation.pro | 9 | ||||
-rw-r--r-- | tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1content.7z | bin | 0 -> 185 bytes | |||
-rw-r--r-- | tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1meta.7z | bin | 0 -> 975 bytes | |||
-rw-r--r-- | tests/auto/installer/createshortcutoperation/data/repository/Updates.xml | 17 | ||||
-rw-r--r-- | tests/auto/installer/createshortcutoperation/installer-config/config.xml | 6 | ||||
-rw-r--r-- | tests/auto/installer/createshortcutoperation/settings.qrc | 10 | ||||
-rw-r--r-- | tests/auto/installer/createshortcutoperation/tst_createshortcutoperation.cpp | 105 | ||||
-rw-r--r-- | tests/auto/installer/installer.pro | 3 |
13 files changed, 172 insertions, 8 deletions
diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h index 8f3291b04..3759e6157 100644 --- a/src/libs/installer/constants.h +++ b/src/libs/installer/constants.h @@ -38,6 +38,8 @@ namespace QInstaller { static const QLatin1String scTrue("true"); static const QLatin1String scFalse("false"); static const QLatin1String scScript("script"); +static const QLatin1String scAllUsersStartMenuProgramsPath("AllUsersStartMenuProgramsPath"); +static const QLatin1String scUserStartMenuProgramsPath("UserStartMenuProgramsPath"); static const QLatin1String scName("Name"); static const QLatin1String scVersion("Version"); diff --git a/src/libs/installer/createshortcutoperation.h b/src/libs/installer/createshortcutoperation.h index dc2ac6ddb..9bf9ebdcb 100644 --- a/src/libs/installer/createshortcutoperation.h +++ b/src/libs/installer/createshortcutoperation.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -37,7 +37,7 @@ class INSTALLER_EXPORT CreateShortcutOperation : public Operation { Q_DECLARE_TR_FUNCTIONS(QInstaller::CreateShortcutOperation) public: - explicit CreateShortcutOperation(PackageManagerCore *core); + explicit CreateShortcutOperation(PackageManagerCore *core = nullptr); void backup(); bool performOperation(); diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index dba96c222..e408db40e 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -593,6 +593,20 @@ void PackageManagerCorePrivate::initialize(const QHash<QString, QString> ¶ms } processFilesForDelayedDeletion(); + // Set shortcut path for command line interface, in GUI version + // we have a separate page where the whole path is set. +#ifdef Q_OS_WIN + if (m_core->isCommandLineInstance()) { + QString startMenuPath; + if (params.value(QLatin1String("AllUsers")) == scTrue) + startMenuPath = m_data.value(scAllUsersStartMenuProgramsPath).toString(); + else + startMenuPath = m_data.value(scUserStartMenuProgramsPath).toString(); + QString startMenuDir = m_core->value(scStartMenuDir, m_core->value(QLatin1String("ProductName"))); + m_data.setValue(scStartMenuDir, startMenuPath + QDir::separator() + startMenuDir); + } +#endif + disconnect(this, &PackageManagerCorePrivate::installationStarted, ProgressCoordinator::instance(), &ProgressCoordinator::reset); connect(this, &PackageManagerCorePrivate::installationStarted, @@ -1901,10 +1915,10 @@ void PackageManagerCorePrivate::installComponent(Component *component, double pr .join(QLatin1String("; ")), operation->errorString()); const QMessageBox::StandardButton button = MessageBoxHandler::warning(MessageBoxHandler::currentBestSuitParent(), - QLatin1String("installationErrorWithRetry"), tr("Installer Error"), + QLatin1String("installationErrorWithCancel"), tr("Installer Error"), tr("Error during installation process (%1):\n%2").arg(component->name(), operation->errorString()), - QMessageBox::Retry | QMessageBox::Ignore | QMessageBox::Cancel, QMessageBox::Retry); + QMessageBox::Retry | QMessageBox::Ignore | QMessageBox::Cancel, QMessageBox::Cancel); if (button == QMessageBox::Retry) ok = performOperationThreaded(operation); diff --git a/src/libs/installer/packagemanagercoredata.cpp b/src/libs/installer/packagemanagercoredata.cpp index df6d96a55..667e2f577 100644 --- a/src/libs/installer/packagemanagercoredata.cpp +++ b/src/libs/installer/packagemanagercoredata.cpp @@ -167,9 +167,9 @@ void PackageManagerCoreData::setDynamicPredefinedVariables() desktop = user.value(QLatin1String("Desktop")).toString(); } m_variables.insert(QLatin1String("DesktopDir"), replaceWindowsEnvironmentVariables(desktop)); - m_variables.insert(QLatin1String("UserStartMenuProgramsPath"), + m_variables.insert(scUserStartMenuProgramsPath, replaceWindowsEnvironmentVariables(programs)); - m_variables.insert(QLatin1String("AllUsersStartMenuProgramsPath"), + m_variables.insert(scAllUsersStartMenuProgramsPath, replaceWindowsEnvironmentVariables(allPrograms)); #endif #define QUOTE_(x) #x diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 771b2720c..d80709416 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -2271,7 +2271,7 @@ StartMenuDirectoryPage::StartMenuDirectoryPage(PackageManagerCore *core) startMenuPath = core->value(QLatin1String("UserStartMenuProgramsPath")); QStringList dirs = QDir(startMenuPath).entryList(QDir::AllDirs | QDir::NoDotAndDotDot); if (core->value(scAllUsers, scFalse) == scTrue) { - startMenuPath = core->value(QLatin1String("AllUsersStartMenuProgramsPath")); + startMenuPath = core->value(scAllUsersStartMenuProgramsPath); dirs += QDir(startMenuPath).entryList(QDir::AllDirs | QDir::NoDotAndDotDot); } dirs.removeDuplicates(); diff --git a/tests/auto/installer/createshortcutoperation/createshortcutoperation.pro b/tests/auto/installer/createshortcutoperation/createshortcutoperation.pro new file mode 100644 index 000000000..c57bcfb98 --- /dev/null +++ b/tests/auto/installer/createshortcutoperation/createshortcutoperation.pro @@ -0,0 +1,9 @@ +include(../../qttest.pri) + +QT -= gui +QT += testlib + +SOURCES = tst_createshortcutoperation.cpp + +RESOURCES += \ + settings.qrc diff --git a/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1content.7z b/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1content.7z Binary files differnew file mode 100644 index 000000000..8ba90b13b --- /dev/null +++ b/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1content.7z diff --git a/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1meta.7z b/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1meta.7z Binary files differnew file mode 100644 index 000000000..17eae879d --- /dev/null +++ b/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1meta.7z diff --git a/tests/auto/installer/createshortcutoperation/data/repository/Updates.xml b/tests/auto/installer/createshortcutoperation/data/repository/Updates.xml new file mode 100644 index 000000000..0826afae8 --- /dev/null +++ b/tests/auto/installer/createshortcutoperation/data/repository/Updates.xml @@ -0,0 +1,17 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>false</Checksum> + <PackageUpdate> + <Name>A</Name> + <DisplayName>A</DisplayName> + <Description>Example component A</Description> + <Version>1.0.2-1</Version> + <ReleaseDate>2015-01-01</ReleaseDate> + <Default>true</Default> + <Script>script.qs</Script> + <UpdateFile CompressedSize="225" UncompressedSize="75" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>6d7a3e15d11a4d94b81452fc2aa18e705a01c922</SHA1> + </PackageUpdate> +</Updates> diff --git a/tests/auto/installer/createshortcutoperation/installer-config/config.xml b/tests/auto/installer/createshortcutoperation/installer-config/config.xml new file mode 100644 index 000000000..c201d4fa5 --- /dev/null +++ b/tests/auto/installer/createshortcutoperation/installer-config/config.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<Installer> + <Name>test</Name> + <Version>1.0.0</Version> + <StartMenuDir>Qt Installer Framework Unit Test</StartMenuDir> +</Installer> diff --git a/tests/auto/installer/createshortcutoperation/settings.qrc b/tests/auto/installer/createshortcutoperation/settings.qrc new file mode 100644 index 000000000..410fbf81a --- /dev/null +++ b/tests/auto/installer/createshortcutoperation/settings.qrc @@ -0,0 +1,10 @@ +<RCC> + <qresource prefix="/"> + <file>data/repository/Updates.xml</file> + <file>data/repository/A/1.0.2-1content.7z</file> + <file>data/repository/A/1.0.2-1meta.7z</file> + </qresource> + <qresource prefix="/metadata"> + <file>installer-config/config.xml</file> + </qresource> +</RCC> diff --git a/tests/auto/installer/createshortcutoperation/tst_createshortcutoperation.cpp b/tests/auto/installer/createshortcutoperation/tst_createshortcutoperation.cpp new file mode 100644 index 000000000..5b90c9628 --- /dev/null +++ b/tests/auto/installer/createshortcutoperation/tst_createshortcutoperation.cpp @@ -0,0 +1,105 @@ +/************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#include <init.h> +#include <createshortcutoperation.h> +#include <utils.h> +#include <binarycontent.h> +#include <packagemanagercore.h> +#include <settings.h> +#include <fileutils.h> + +#include <QDir> +#include <QObject> +#include <QTest> +#include <QFile> +#include <qsettingswrapper.h> +#include <QDebug> + +using namespace KDUpdater; +using namespace QInstaller; + +class tst_createshortcutoperation : public QObject +{ + Q_OBJECT + +private slots: + void testMissingArguments() + { + CreateShortcutOperation op; + + QVERIFY(op.testOperation()); + QVERIFY(!op.performOperation()); + + QCOMPARE(UpdateOperation::Error(op.error()), UpdateOperation::InvalidArguments); + QCOMPARE(op.errorString(), QString("Invalid arguments in CreateShortcut: 0 arguments given," + " 2 or 3 arguments expected in the form: <target> <link location> " + "[target arguments] [\"workingDirectory=...\"] [\"iconPath=...\"] " + "[\"iconId=...\"] [\"description=...\"].")); + } + + void testCreateShortcutForCurrentUserFromCLI() + { + QInstaller::init(); + PackageManagerCore *core = new PackageManagerCore(BinaryContent::MagicInstallerMarker, QList<OperationBlob> (), + QString(), Protocol::DefaultAuthorizationKey, Protocol::Mode::Production, + QHash<QString, QString>(), true); + core->setAllowedRunningProcesses(QStringList() << QCoreApplication::applicationFilePath()); + QSet<Repository> repoList; + Repository repo = Repository::fromUserInput(":///data/repository"); + repoList.insert(repo); + core->settings().setDefaultRepositories(repoList); + + QString installDir = QInstaller::generateTemporaryFileName(); + QDir().mkpath(installDir); + core->setValue(scTargetDir, installDir); + core->installDefaultComponentsSilently(); + + QSettingsWrapper user(QLatin1String("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" + "CurrentVersion\\Explorer\\User Shell Folders"), QSettingsWrapper::NativeFormat); + //Replace %USERS% from "Programs" + const QString programs = replaceWindowsEnvironmentVariables(user.value(QLatin1String("Programs"), QString()).toString()); + const QString startMenuDir = programs + QDir::separator() + "Qt Installer Framework Unit Test"; + QCOMPARE(startMenuDir, core->value("StartMenuDir")); + + QString linkLocation = core->value("StartMenuDir") + QDir::separator() + "A.lnk"; + QFile file(linkLocation); + QVERIFY(file.open(QIODevice::ReadOnly)); + file.close(); + + core->setPackageManager(); + core->commitSessionOperations(); + core->uninstallComponentsSilently(QStringList() << "A"); + QVERIFY(!QFile::exists(linkLocation)); + core->deleteLater(); + } +}; + +QTEST_MAIN(tst_createshortcutoperation) + +#include "tst_createshortcutoperation.moc" diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro index d5926ab6e..ecba4f9bb 100644 --- a/tests/auto/installer/installer.pro +++ b/tests/auto/installer/installer.pro @@ -37,7 +37,8 @@ SUBDIRS += \ environmentvariableoperation win32 { - SUBDIRS += registerfiletypeoperation + SUBDIRS += registerfiletypeoperation \ + createshortcutoperation } linux-g++* { |