diff options
Diffstat (limited to 'src/libs/installer')
-rw-r--r-- | src/libs/installer/packagemanagercore.cpp | 14 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore.h | 3 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 10 | ||||
-rw-r--r-- | src/libs/installer/packagemanagercore_p.h | 2 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 13 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 1 | ||||
-rw-r--r-- | src/libs/installer/settings.cpp | 8 | ||||
-rw-r--r-- | src/libs/installer/settings.h | 1 |
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> ¶ms); + 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; |