diff options
Diffstat (limited to 'src/plugins/remotelinux/linuxdevicetester.cpp')
-rw-r--r-- | src/plugins/remotelinux/linuxdevicetester.cpp | 85 |
1 files changed, 39 insertions, 46 deletions
diff --git a/src/plugins/remotelinux/linuxdevicetester.cpp b/src/plugins/remotelinux/linuxdevicetester.cpp index 7380f01868..aa79244c73 100644 --- a/src/plugins/remotelinux/linuxdevicetester.cpp +++ b/src/plugins/remotelinux/linuxdevicetester.cpp @@ -5,6 +5,9 @@ #include "linuxdevice.h" #include "remotelinuxtr.h" +#include "utils/async.h" + +#include <extensionsystem/pluginmanager.h> #include <projectexplorer/devicesupport/deviceusedportsgatherer.h> #include <projectexplorer/devicesupport/filetransfer.h> @@ -18,8 +21,6 @@ #include <utils/qtcassert.h> #include <utils/stringutils.h> -#include <QFutureWatcher> - using namespace ProjectExplorer; using namespace Tasking; using namespace Utils; @@ -39,6 +40,7 @@ public: QStringList commandsToTest() const; + GroupItem connectionTask() const; GroupItem echoTask(const QString &contents) const; GroupItem unameTask() const; GroupItem gathererTask() const; @@ -46,13 +48,9 @@ public: const Storage<TransferStorage> &storage) const; GroupItem transferTasks() const; GroupItem commandTasks() const; - void runCommandTests(); - - bool isRunning() const { return m_connectionTest || m_taskTreeRunner.isRunning(); } GenericLinuxDeviceTester *q = nullptr; LinuxDevice::Ptr m_device; - QFutureWatcher<bool> *m_connectionTest = nullptr; TaskTreeRunner m_taskTreeRunner; QStringList m_extraCommands; QList<GroupItem> m_extraTests; @@ -98,6 +96,27 @@ QStringList GenericLinuxDeviceTesterPrivate::commandsToTest() const return commands; } +GroupItem GenericLinuxDeviceTesterPrivate::connectionTask() const +{ + const auto onSetup = [this](Async<bool> &task) { + emit q->progressMessage(Tr::tr("Connecting to device...")); + task.setConcurrentCallData([device = m_device] { return device->tryToConnect(); }); + task.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer()); + }; + const auto onDone = [this](const Async<bool> &task) { + const bool success = task.isResultAvailable() && task.result(); + if (success) { + // TODO: For master: move the '\n' outside of Tr(). + emit q->progressMessage(Tr::tr("Connected. Now doing extended checks.\n")); + } else { + emit q->errorMessage( + Tr::tr("Basic connectivity test failed, device is considered unusable.") + '\n'); + } + return toDoneResult(success); + }; + return AsyncTask<bool>(onSetup, onDone); +} + GroupItem GenericLinuxDeviceTesterPrivate::echoTask(const QString &contents) const { const auto onSetup = [this, contents](Process &process) { @@ -283,20 +302,6 @@ GroupItem GenericLinuxDeviceTesterPrivate::commandTasks() const return root; } -void GenericLinuxDeviceTesterPrivate::runCommandTests() -{ - const Group root { - echoTask("Hello"), // No quoting necessary - echoTask("Hello Remote World!"), // Checks quoting, too. - unameTask(), - gathererTask(), - transferTasks(), - m_extraTests, - commandTasks() - }; - m_taskTreeRunner.start(root); -} - } // namespace Internal using namespace Internal; @@ -323,39 +328,27 @@ void GenericLinuxDeviceTester::setExtraTests(const QList<GroupItem> &extraTests) void GenericLinuxDeviceTester::testDevice(const IDevice::Ptr &deviceConfiguration) { - QTC_ASSERT(!d->isRunning(), return); - - emit progressMessage(Tr::tr("Connecting to device...")); + QTC_ASSERT(!d->m_taskTreeRunner.isRunning(), return); d->m_device = std::static_pointer_cast<LinuxDevice>(deviceConfiguration); - d->m_connectionTest = new QFutureWatcher<bool>(this); - connect(d->m_connectionTest, &QFutureWatcher<bool>::finished, this, [this] { - const bool success = d->m_connectionTest->result(); - d->m_connectionTest->deleteLater(); - d->m_connectionTest = nullptr; - if (success) { - emit progressMessage(Tr::tr("Connected. Now doing extended checks.\n")); - d->runCommandTests(); - } else { - emit errorMessage( - Tr::tr("Basic connectivity test failed, device is considered unusable.")); - emit finished(TestFailure); - } - }); - d->m_connectionTest->setFuture(d->m_device->tryToConnect()); + const Group root { + d->connectionTask(), + d->echoTask("Hello"), // No quoting necessary + d->echoTask("Hello Remote World!"), // Checks quoting, too. + d->unameTask(), + d->gathererTask(), + d->transferTasks(), + d->m_extraTests, + d->commandTasks() + }; + d->m_taskTreeRunner.start(root); } void GenericLinuxDeviceTester::stopTest() { - QTC_ASSERT(d->isRunning(), return); - if (d->m_connectionTest) { - d->m_connectionTest->disconnect(); - d->m_connectionTest->cancel(); - d->m_connectionTest = nullptr; - } else { - d->m_taskTreeRunner.reset(); - } + QTC_ASSERT(d->m_taskTreeRunner.isRunning(), return); + d->m_taskTreeRunner.reset(); emit finished(TestFailure); } |