summaryrefslogtreecommitdiffstats
path: root/src/libs/installer
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer')
-rw-r--r--src/libs/installer/packagemanagercore.cpp14
-rw-r--r--src/libs/installer/packagemanagercore.h3
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp10
-rw-r--r--src/libs/installer/packagemanagercore_p.h2
-rw-r--r--src/libs/installer/packagemanagergui.cpp13
-rw-r--r--src/libs/installer/packagemanagergui.h1
-rw-r--r--src/libs/installer/settings.cpp8
-rw-r--r--src/libs/installer/settings.h1
8 files changed, 51 insertions, 1 deletions
diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp
index 985fccbc7..e43033c3f 100644
--- a/src/libs/installer/packagemanagercore.cpp
+++ b/src/libs/installer/packagemanagercore.cpp
@@ -1106,6 +1106,19 @@ bool PackageManagerCore::isProcessRunning(const QString &name) const
return PackageManagerCorePrivate::isProcessRunning(name, runningProcesses());
}
+void PackageManagerCore::setDependsOnLocalInstallerBinary()
+{
+ d->m_dependsOnLocalInstallerBinary = true;
+}
+
+bool PackageManagerCore::localInstallerBinaryUsed()
+{
+#ifdef Q_OS_WIN
+ return KDUpdater::pathIsOnLocalDevice(qApp->applicationFilePath());
+#endif
+ return true;
+}
+
/*!
Executes a program.
@@ -1116,7 +1129,6 @@ bool PackageManagerCore::isProcessRunning(const QString &name) const
command as first item, the return code as second item.
\note On Unix, the output is just the output to stdout, not to stderr.
*/
-
QList<QVariant> PackageManagerCore::execute(const QString &program, const QStringList &arguments,
const QString &stdIn) const
{
diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h
index cae72c214..ec360d5db 100644
--- a/src/libs/installer/packagemanagercore.h
+++ b/src/libs/installer/packagemanagercore.h
@@ -112,6 +112,9 @@ public:
RunMode runMode() const;
void reset(const QHash<QString, QString> &params);
+ Q_INVOKABLE void setDependsOnLocalInstallerBinary();
+ Q_INVOKABLE bool localInstallerBinaryUsed();
+
Q_INVOKABLE QList<QVariant> execute(const QString &program,
const QStringList &arguments = QStringList(), const QString &stdIn = QString()) const;
Q_INVOKABLE bool executeDetached(const QString &program,
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 72a29e1bc..313ad3ba5 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -196,6 +196,7 @@ PackageManagerCorePrivate::PackageManagerCorePrivate(PackageManagerCore *core, q
, m_createLocalRepositoryFromBinary(false)
, m_defaultModel(0)
, m_updaterModel(0)
+ , m_dependsOnLocalInstallerBinary(false)
{
connect(this, SIGNAL(installationStarted()), m_core, SIGNAL(installationStarted()));
connect(this, SIGNAL(installationFinished()), m_core, SIGNAL(installationFinished()));
@@ -1358,6 +1359,15 @@ QString PackageManagerCorePrivate::registerPath() const
void PackageManagerCorePrivate::runInstaller()
{
+ if (m_dependsOnLocalInstallerBinary && !KDUpdater::pathIsOnLocalDevice(qApp->applicationFilePath())) {
+ setStatus(PackageManagerCore::Failure);
+ ProgressCoordinator::instance()->emitLabelAndDetailTextChanged(tr("\nInstallation aborted!"));
+ MessageBoxHandler::critical(MessageBoxHandler::currentBestSuitParent(),
+ QLatin1String("installationError"), tr("Error"), tr("It is not possible to install from network location"));
+ emit installationFinished();
+ throw;
+ }
+
bool adminRightsGained = false;
try {
setStatus(PackageManagerCore::Running);
diff --git a/src/libs/installer/packagemanagercore_p.h b/src/libs/installer/packagemanagercore_p.h
index b8ec335a0..ecf2f38d4 100644
--- a/src/libs/installer/packagemanagercore_p.h
+++ b/src/libs/installer/packagemanagercore_p.h
@@ -194,6 +194,8 @@ public:
OperationList m_performedOperationsOld;
OperationList m_performedOperationsCurrentSession;
+ bool m_dependsOnLocalInstallerBinary;
+
private slots:
void infoMessage(KDJob *, const QString &message) {
emit m_core->metaJobInfoMessage(message);
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index 884d08b47..1788452a8 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -455,6 +455,7 @@ void PackageManagerGui::showEvent(QShowEvent *event)
}
#endif
QWizard::showEvent(event);
+ QMetaObject::invokeMethod(this, "dependsOnLocalInstallerBinary", Qt::QueuedConnection);
}
void PackageManagerGui::wizardPageInsertionRequested(QWidget *widget,
@@ -652,6 +653,18 @@ void PackageManagerGui::customButtonClicked(int which)
emit settingsButtonClicked();
}
+void PackageManagerGui::dependsOnLocalInstallerBinary()
+{
+ if (m_core->settings().dependsOnLocalInstallerBinary() && !m_core->localInstallerBinaryUsed()) {
+ MessageBoxHandler::critical(MessageBoxHandler::currentBestSuitParent(),
+ QLatin1String("Installer_Needs_To_Be_Local_Error"), tr("Error"),
+ tr("It is not possible to install from network location.\n"
+ "Please copy the installer to a local drive"), QMessageBox::Ok);
+ rejectWithoutPrompt();
+ }
+}
+
+
// -- PackageManagerPage
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index ee85c01c2..2654501b9 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -119,6 +119,7 @@ protected Q_SLOTS:
private Q_SLOTS:
void onLanguageChanged();
void customButtonClicked(int which);
+ void dependsOnLocalInstallerBinary();
protected:
bool event(QEvent *event);
diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp
index ace61761e..c7b1394cc 100644
--- a/src/libs/installer/settings.cpp
+++ b/src/libs/installer/settings.cpp
@@ -57,6 +57,7 @@ static const QLatin1String scTmpRepositories("TemporaryRepositories");
static const QLatin1String scUninstallerIniFile("UninstallerIniFile");
static const QLatin1String scRemoteRepositories("RemoteRepositories");
static const QLatin1String scSigningCertificate("SigningCertificate");
+static const QLatin1String scDependsOnLocalInstallerBinary("DependsOnLocalInstallerBinary");
static const QLatin1String scFtpProxy("FtpProxy");
static const QLatin1String scHttpProxy("HttpProxy");
@@ -230,6 +231,8 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix)
s.d->m_data.insert(scTargetConfigurationFile, QLatin1String("components.xml"));
if (!s.d->m_data.contains(scUninstallerIniFile))
s.d->m_data.insert(scUninstallerIniFile, s.uninstallerName() + QLatin1String(".ini"));
+ if (!s.d->m_data.contains(scDependsOnLocalInstallerBinary))
+ s.d->m_data.insert(scDependsOnLocalInstallerBinary, false);
return s;
}
@@ -345,6 +348,11 @@ bool Settings::allowNoneAsciiCharacters() const
return d->m_data.value(scAllowNonAsciiCharacters).toBool();
}
+bool Settings::dependsOnLocalInstallerBinary() const
+{
+ return d->m_data.value(scDependsOnLocalInstallerBinary).toBool();
+}
+
bool Settings::hasReplacementRepos() const
{
return d->m_replacementRepos;
diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h
index 5fb60a7c9..12eba079b 100644
--- a/src/libs/installer/settings.h
+++ b/src/libs/installer/settings.h
@@ -95,6 +95,7 @@ public:
QString configurationFileName() const;
+ bool dependsOnLocalInstallerBinary() const;
bool hasReplacementRepos() const;
QSet<Repository> repositories() const;