summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/constants.h2
-rw-r--r--src/libs/installer/createshortcutoperation.h4
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp18
-rw-r--r--src/libs/installer/packagemanagercoredata.cpp4
-rw-r--r--src/libs/installer/packagemanagergui.cpp2
-rw-r--r--tests/auto/installer/createshortcutoperation/createshortcutoperation.pro9
-rw-r--r--tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1content.7zbin0 -> 185 bytes
-rw-r--r--tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1meta.7zbin0 -> 975 bytes
-rw-r--r--tests/auto/installer/createshortcutoperation/data/repository/Updates.xml17
-rw-r--r--tests/auto/installer/createshortcutoperation/installer-config/config.xml6
-rw-r--r--tests/auto/installer/createshortcutoperation/settings.qrc10
-rw-r--r--tests/auto/installer/createshortcutoperation/tst_createshortcutoperation.cpp105
-rw-r--r--tests/auto/installer/installer.pro3
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> &params
}
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
new file mode 100644
index 000000000..8ba90b13b
--- /dev/null
+++ b/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1content.7z
Binary files differ
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
new file mode 100644
index 000000000..17eae879d
--- /dev/null
+++ b/tests/auto/installer/createshortcutoperation/data/repository/A/1.0.2-1meta.7z
Binary files differ
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++* {