diff --git a/src/plugins/remotelinux/CMakeLists.txt b/src/plugins/remotelinux/CMakeLists.txt index 6599adac26d..26d9e8da625 100644 --- a/src/plugins/remotelinux/CMakeLists.txt +++ b/src/plugins/remotelinux/CMakeLists.txt @@ -13,6 +13,7 @@ add_qtc_plugin(RemoteLinux genericlinuxdeviceconfigurationwizard.cpp genericlinuxdeviceconfigurationwizard.h genericlinuxdeviceconfigurationwizardpages.cpp genericlinuxdeviceconfigurationwizardpages.h genericlinuxdeviceconfigurationwizardsetuppage.ui + killappstep.cpp killappstep.h linuxdevice.cpp linuxdevice.h linuxdevicetester.cpp linuxdevicetester.h linuxprocessinterface.h @@ -29,8 +30,6 @@ add_qtc_plugin(RemoteLinux remotelinuxenvironmentaspect.cpp remotelinuxenvironmentaspect.h remotelinuxenvironmentaspectwidget.cpp remotelinuxenvironmentaspectwidget.h remotelinuxenvironmentreader.cpp remotelinuxenvironmentreader.h - remotelinuxkillappservice.cpp remotelinuxkillappservice.h - remotelinuxkillappstep.cpp remotelinuxkillappstep.h remotelinuxpackageinstaller.cpp remotelinuxpackageinstaller.h remotelinuxplugin.cpp remotelinuxplugin.h remotelinuxqmltoolingsupport.cpp remotelinuxqmltoolingsupport.h diff --git a/src/plugins/remotelinux/killappstep.cpp b/src/plugins/remotelinux/killappstep.cpp new file mode 100644 index 00000000000..cb5bc06a79a --- /dev/null +++ b/src/plugins/remotelinux/killappstep.cpp @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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. +** +****************************************************************************/ + +#include "killappstep.h" + +#include "remotelinux_constants.h" + +#include +#include +#include +#include + +using namespace ProjectExplorer; +using namespace Utils; + +namespace RemoteLinux { +namespace Internal { + +class KillAppService : public AbstractRemoteLinuxDeployService +{ + Q_OBJECT +public: + ~KillAppService() override; + + void setRemoteExecutable(const QString &filePath); + +private: + void handleStdErr(); + void handleProcessFinished(); + + bool isDeploymentNecessary() const override; + + void doDeploy() override; + void stopDeployment() override; + + void handleSignalOpFinished(const QString &errorMessage); + void cleanup(); + void finishDeployment(); + + QString m_remoteExecutable; + ProjectExplorer::DeviceProcessSignalOperation::Ptr m_signalOperation; +}; + +KillAppService::~KillAppService() +{ + cleanup(); +} + +void KillAppService::setRemoteExecutable(const QString &filePath) +{ + m_remoteExecutable = filePath; +} + +bool KillAppService::isDeploymentNecessary() const +{ + return !m_remoteExecutable.isEmpty(); +} + +void KillAppService::doDeploy() +{ + m_signalOperation = deviceConfiguration()->signalOperation(); + if (!m_signalOperation) { + handleDeploymentDone(); + return; + } + connect(m_signalOperation.data(), &ProjectExplorer::DeviceProcessSignalOperation::finished, + this, &KillAppService::handleSignalOpFinished); + emit progressMessage(tr("Trying to kill \"%1\" on remote device...").arg(m_remoteExecutable)); + m_signalOperation->killProcess(m_remoteExecutable); +} + +void KillAppService::cleanup() +{ + if (m_signalOperation) { + disconnect(m_signalOperation.data(), nullptr, this, nullptr); + m_signalOperation.clear(); + } +} + +void KillAppService::finishDeployment() +{ + cleanup(); + handleDeploymentDone(); +} + +void KillAppService::stopDeployment() +{ + finishDeployment(); +} + +void KillAppService::handleSignalOpFinished(const QString &errorMessage) +{ + if (errorMessage.isEmpty()) + emit progressMessage(tr("Remote application killed.")); + else + emit progressMessage(tr("Failed to kill remote application. Assuming it was not running.")); + finishDeployment(); +} + +} // namespace Internal + +KillAppStep::KillAppStep(BuildStepList *bsl, Id id) + : AbstractRemoteLinuxDeployStep(bsl, id) +{ + auto service = createDeployService(); + + setWidgetExpandedByDefault(false); + + setInternalInitializer([this, service] { + Target * const theTarget = target(); + QTC_ASSERT(theTarget, return CheckResult::failure()); + RunConfiguration * const rc = theTarget->activeRunConfiguration(); + const QString remoteExe = rc ? rc->runnable().command.executable().toString() : QString(); + service->setRemoteExecutable(remoteExe); + return CheckResult::success(); + }); +} + +Id KillAppStep::stepId() +{ + return Constants::KillAppStepId; +} + +QString KillAppStep::displayName() +{ + return tr("Kill current application instance"); +} + +} // namespace RemoteLinux + +#include "killappstep.moc" diff --git a/src/plugins/remotelinux/remotelinuxkillappstep.h b/src/plugins/remotelinux/killappstep.h similarity index 87% rename from src/plugins/remotelinux/remotelinuxkillappstep.h rename to src/plugins/remotelinux/killappstep.h index 506bc99d817..62fbc81643c 100644 --- a/src/plugins/remotelinux/remotelinuxkillappstep.h +++ b/src/plugins/remotelinux/killappstep.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. @@ -29,11 +29,11 @@ namespace RemoteLinux { -class REMOTELINUX_EXPORT RemoteLinuxKillAppStep : public AbstractRemoteLinuxDeployStep +class REMOTELINUX_EXPORT KillAppStep : public AbstractRemoteLinuxDeployStep { Q_OBJECT public: - explicit RemoteLinuxKillAppStep(ProjectExplorer::BuildStepList *bsl, + explicit KillAppStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id = stepId()); static Utils::Id stepId(); diff --git a/src/plugins/remotelinux/remotelinux.qbs b/src/plugins/remotelinux/remotelinux.qbs index 2d24a699508..f6ff0706439 100644 --- a/src/plugins/remotelinux/remotelinux.qbs +++ b/src/plugins/remotelinux/remotelinux.qbs @@ -34,6 +34,8 @@ Project { "genericlinuxdeviceconfigurationwizardpages.cpp", "genericlinuxdeviceconfigurationwizardpages.h", "genericlinuxdeviceconfigurationwizardsetuppage.ui", + "killappstep.cpp", + "killappstep.h", "linuxdevice.cpp", "linuxdevice.h", "linuxdevicetester.cpp", @@ -62,10 +64,6 @@ Project { "remotelinuxenvironmentaspectwidget.h", "remotelinuxenvironmentreader.cpp", "remotelinuxenvironmentreader.h", - "remotelinuxkillappservice.cpp", - "remotelinuxkillappservice.h", - "remotelinuxkillappstep.cpp", - "remotelinuxkillappstep.h", "remotelinuxpackageinstaller.cpp", "remotelinuxpackageinstaller.h", "remotelinuxplugin.cpp", diff --git a/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp b/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp index 8f311a6c424..b248d53f918 100644 --- a/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp +++ b/src/plugins/remotelinux/remotelinuxdeployconfiguration.cpp @@ -28,7 +28,7 @@ #include "genericdirectuploadstep.h" #include "makeinstallstep.h" #include "remotelinuxcheckforfreediskspacestep.h" -#include "remotelinuxkillappstep.h" +#include "killappstep.h" #include "remotelinux_constants.h" #include "rsyncdeploystep.h" @@ -77,7 +77,7 @@ RemoteLinuxDeployConfigurationFactory::RemoteLinuxDeployConfigurationFactory() addInitialStep(MakeInstallStep::stepId(), needsMakeInstall); addInitialStep(RemoteLinuxCheckForFreeDiskSpaceStep::stepId()); - addInitialStep(RemoteLinuxKillAppStep::stepId()); + addInitialStep(KillAppStep::stepId()); addInitialStep(RsyncDeployStep::stepId(), [](Target *target) { auto device = DeviceKitAspect::device(target->kit()); return device && device->extraData(Constants::SupportsRSync).toBool(); diff --git a/src/plugins/remotelinux/remotelinuxkillappservice.cpp b/src/plugins/remotelinux/remotelinuxkillappservice.cpp deleted file mode 100644 index a6c446d9c59..00000000000 --- a/src/plugins/remotelinux/remotelinuxkillappservice.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** 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. -** -****************************************************************************/ - -#include "remotelinuxkillappservice.h" - -#include -#include - -namespace RemoteLinux { -namespace Internal { -class RemoteLinuxKillAppServicePrivate -{ -public: - QString remoteExecutable; - ProjectExplorer::DeviceProcessSignalOperation::Ptr signalOp; -}; -} // namespace Internal - -RemoteLinuxKillAppService::RemoteLinuxKillAppService() - : d(new Internal::RemoteLinuxKillAppServicePrivate) -{ -} - -RemoteLinuxKillAppService::~RemoteLinuxKillAppService() -{ - cleanup(); - delete d; -} - -void RemoteLinuxKillAppService::setRemoteExecutable(const QString &filePath) -{ - d->remoteExecutable = filePath; -} - -bool RemoteLinuxKillAppService::isDeploymentNecessary() const -{ - return !d->remoteExecutable.isEmpty(); -} - -void RemoteLinuxKillAppService::doDeploy() -{ - d->signalOp = deviceConfiguration()->signalOperation(); - if (!d->signalOp) { - handleDeploymentDone(); - return; - } - connect(d->signalOp.data(), &ProjectExplorer::DeviceProcessSignalOperation::finished, - this, &RemoteLinuxKillAppService::handleSignalOpFinished); - emit progressMessage(tr("Trying to kill \"%1\" on remote device...").arg(d->remoteExecutable)); - d->signalOp->killProcess(d->remoteExecutable); -} - -void RemoteLinuxKillAppService::cleanup() -{ - if (d->signalOp) { - disconnect(d->signalOp.data(), nullptr, this, nullptr); - d->signalOp.clear(); - } -} - -void RemoteLinuxKillAppService::finishDeployment() -{ - cleanup(); - handleDeploymentDone(); -} - -void RemoteLinuxKillAppService::stopDeployment() -{ - finishDeployment(); -} - -void RemoteLinuxKillAppService::handleSignalOpFinished(const QString &errorMessage) -{ - if (errorMessage.isEmpty()) - emit progressMessage(tr("Remote application killed.")); - else - emit progressMessage(tr("Failed to kill remote application. Assuming it was not running.")); - finishDeployment(); -} - -} // namespace RemoteLinux diff --git a/src/plugins/remotelinux/remotelinuxkillappservice.h b/src/plugins/remotelinux/remotelinuxkillappservice.h deleted file mode 100644 index 042f4bac0ea..00000000000 --- a/src/plugins/remotelinux/remotelinuxkillappservice.h +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** 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. -** -****************************************************************************/ - -#pragma once - -#include "abstractremotelinuxdeployservice.h" - -namespace RemoteLinux { -namespace Internal { class RemoteLinuxKillAppServicePrivate; } - -class REMOTELINUX_EXPORT RemoteLinuxKillAppService : public AbstractRemoteLinuxDeployService -{ - Q_OBJECT -public: - RemoteLinuxKillAppService(); - ~RemoteLinuxKillAppService() override; - - void setRemoteExecutable(const QString &filePath); - -private: - void handleStdErr(); - void handleProcessFinished(); - - bool isDeploymentNecessary() const override; - - void doDeploy() override; - void stopDeployment() override; - - void handleSignalOpFinished(const QString &errorMessage); - void cleanup(); - void finishDeployment(); - - Internal::RemoteLinuxKillAppServicePrivate * const d; -}; - -} // namespace RemoteLinux diff --git a/src/plugins/remotelinux/remotelinuxkillappstep.cpp b/src/plugins/remotelinux/remotelinuxkillappstep.cpp deleted file mode 100644 index daa451d97e0..00000000000 --- a/src/plugins/remotelinux/remotelinuxkillappstep.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** 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. -** -****************************************************************************/ - -#include "remotelinuxkillappstep.h" - -#include "remotelinux_constants.h" -#include "remotelinuxkillappservice.h" - -#include -#include -#include - -using namespace ProjectExplorer; - -namespace RemoteLinux { - -RemoteLinuxKillAppStep::RemoteLinuxKillAppStep(BuildStepList *bsl, Utils::Id id) - : AbstractRemoteLinuxDeployStep(bsl, id) -{ - auto service = createDeployService(); - - setWidgetExpandedByDefault(false); - - setInternalInitializer([this, service] { - Target * const theTarget = target(); - QTC_ASSERT(theTarget, return CheckResult::failure()); - RunConfiguration * const rc = theTarget->activeRunConfiguration(); - const QString remoteExe = rc ? rc->runnable().command.executable().toString() : QString(); - service->setRemoteExecutable(remoteExe); - return CheckResult::success(); - }); -} - -Utils::Id RemoteLinuxKillAppStep::stepId() -{ - return Constants::KillAppStepId; -} - -QString RemoteLinuxKillAppStep::displayName() -{ - return tr("Kill current application instance"); -} - -} // namespace RemoteLinux diff --git a/src/plugins/remotelinux/remotelinuxplugin.cpp b/src/plugins/remotelinux/remotelinuxplugin.cpp index ba3286be0ba..86a55970d27 100644 --- a/src/plugins/remotelinux/remotelinuxplugin.cpp +++ b/src/plugins/remotelinux/remotelinuxplugin.cpp @@ -38,7 +38,7 @@ #include "remotelinuxcheckforfreediskspacestep.h" #include "remotelinuxdeployconfiguration.h" #include "remotelinuxcustomcommanddeploymentstep.h" -#include "remotelinuxkillappstep.h" +#include "killappstep.h" #include "rsyncdeploystep.h" #include "tarpackagecreationstep.h" #include "uploadandinstalltarpackagestep.h" @@ -83,7 +83,7 @@ public: customCommandDeploymentStepFactory; GenericDeployStepFactory checkForFreeDiskSpaceStepFactory; - GenericDeployStepFactory remoteLinuxKillAppStepFactory; + GenericDeployStepFactory killAppStepFactory; GenericDeployStepFactory makeInstallStepFactory; const QList supportedRunConfigs {