Add adapters for FileTransfer and DeviceUsedPortsGatherer

Change-Id: I2ead2129625ae54919cf75e517e9b2180bb4bc47
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-10-21 19:29:21 +02:00
parent 5d4667e682
commit 3a1f94ec28
5 changed files with 103 additions and 19 deletions

View File

@@ -24,6 +24,7 @@ public:
QList<Port> usedPorts;
IDevice::ConstPtr device;
PortsGatheringMethod portsGatheringMethod;
QString m_errorString;
};
} // namespace Internal
@@ -39,15 +40,15 @@ DeviceUsedPortsGatherer::~DeviceUsedPortsGatherer()
delete d;
}
void DeviceUsedPortsGatherer::start(const IDevice::ConstPtr &device)
void DeviceUsedPortsGatherer::start()
{
d->usedPorts.clear();
d->device = device;
QTC_ASSERT(d->device, emit error("No device given"); return);
d->m_errorString.clear();
QTC_ASSERT(d->device, emitError("No device given"); return);
d->portsGatheringMethod = d->device->portsGatheringMethod();
QTC_ASSERT(d->portsGatheringMethod.commandLine, emit error("Not implemented"); return);
QTC_ASSERT(d->portsGatheringMethod.parsePorts, emit error("Not implemented"); return);
QTC_ASSERT(d->portsGatheringMethod.commandLine, emitError("Not implemented"); return);
QTC_ASSERT(d->portsGatheringMethod.parsePorts, emitError("Not implemented"); return);
const QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol;
@@ -67,11 +68,21 @@ void DeviceUsedPortsGatherer::stop()
}
}
void DeviceUsedPortsGatherer::setDevice(const IDeviceConstPtr &device)
{
d->device = device;
}
QList<Port> DeviceUsedPortsGatherer::usedPorts() const
{
return d->usedPorts;
}
QString DeviceUsedPortsGatherer::errorString() const
{
return d->m_errorString;
}
void DeviceUsedPortsGatherer::setupUsedPorts()
{
d->usedPorts.clear();
@@ -84,6 +95,12 @@ void DeviceUsedPortsGatherer::setupUsedPorts()
emit portListReady();
}
void DeviceUsedPortsGatherer::emitError(const QString &errorString)
{
d->m_errorString = errorString;
emitError(errorString);
}
void DeviceUsedPortsGatherer::handleProcessDone()
{
if (d->process->result() == ProcessResult::FinishedWithSuccess) {
@@ -95,11 +112,17 @@ void DeviceUsedPortsGatherer::handleProcessDone()
errMsg += QLatin1Char('\n');
errMsg += tr("Remote error output was: %1").arg(QString::fromUtf8(stdErr));
}
emit error(errMsg);
emitError(errMsg);
}
stop();
}
DeviceUsedPortsGathererAdapter::DeviceUsedPortsGathererAdapter()
{
connect(task(), &DeviceUsedPortsGatherer::portListReady, this, [this] { emit done(true); });
connect(task(), &DeviceUsedPortsGatherer::error, this, [this] { emit done(false); });
}
// PortGatherer
PortsGatherer::PortsGatherer(RunControl *runControl)
@@ -120,7 +143,8 @@ PortsGatherer::~PortsGatherer() = default;
void PortsGatherer::start()
{
appendMessage(tr("Checking available ports..."), NormalMessageFormat);
m_portsGatherer.start(device());
m_portsGatherer.setDevice(device());
m_portsGatherer.start();
}
QUrl PortsGatherer::findEndPoint()

View File

@@ -8,6 +8,7 @@
#include <projectexplorer/runcontrol.h>
#include <utils/portlist.h>
#include <utils/tasktree.h>
namespace ProjectExplorer {
@@ -24,9 +25,11 @@ public:
DeviceUsedPortsGatherer(QObject *parent = nullptr);
~DeviceUsedPortsGatherer() override;
void start(const IDeviceConstPtr &device);
void start();
void stop();
void setDevice(const IDeviceConstPtr &device);
QList<Utils::Port> usedPorts() const;
QString errorString() const;
signals:
void error(const QString &errMsg);
@@ -35,10 +38,19 @@ signals:
private:
void handleProcessDone();
void setupUsedPorts();
void emitError(const QString &errorString);
Internal::DeviceUsedPortsGathererPrivate * const d;
};
class PROJECTEXPLORER_EXPORT DeviceUsedPortsGathererAdapter
: public Utils::Tasking::TaskAdapter<DeviceUsedPortsGatherer>
{
public:
DeviceUsedPortsGathererAdapter();
void start() final { task()->start(); }
};
class PROJECTEXPLORER_EXPORT PortsGatherer : public RunWorker
{
Q_OBJECT
@@ -92,3 +104,5 @@ private:
};
} // namespace ProjectExplorer
QTC_DECLARE_CUSTOM_TASK(PortGatherer, ProjectExplorer::DeviceUsedPortsGathererAdapter);

View File

@@ -67,7 +67,10 @@ class FileTransferPrivate : public QObject
Q_OBJECT
public:
void test(const ProjectExplorer::IDeviceConstPtr &onDevice);
IDeviceConstPtr m_testDevice;
ProcessResultData m_resultData;
void test();
void start();
void stop();
@@ -78,18 +81,19 @@ signals:
void done(const ProcessResultData &resultData);
private:
void emitDone(const ProcessResultData &resultData);
void startFailed(const QString &errorString);
void run(const FileTransferSetupData &setup, const IDeviceConstPtr &device);
std::unique_ptr<FileTransferInterface> m_transfer;
};
void FileTransferPrivate::test(const IDeviceConstPtr &onDevice)
void FileTransferPrivate::test()
{
if (!onDevice)
if (!m_testDevice)
return startFailed(tr("No device set for test transfer."));
run({{}, m_setup.m_method, m_setup.m_rsyncFlags}, onDevice);
run({{}, m_setup.m_method, m_setup.m_rsyncFlags}, m_testDevice);
}
void FileTransferPrivate::start()
@@ -132,13 +136,19 @@ void FileTransferPrivate::run(const FileTransferSetupData &setup, const IDeviceC
connect(m_transfer.get(), &FileTransferInterface::progress,
this, &FileTransferPrivate::progress);
connect(m_transfer.get(), &FileTransferInterface::done,
this, &FileTransferPrivate::done);
this, &FileTransferPrivate::emitDone);
m_transfer->start();
}
void FileTransferPrivate::emitDone(const ProcessResultData &resultData)
{
m_resultData = resultData;
emit done(resultData);
}
void FileTransferPrivate::startFailed(const QString &errorString)
{
emit done({0, QProcess::NormalExit, QProcess::FailedToStart, errorString});
emitDone({0, QProcess::NormalExit, QProcess::FailedToStart, errorString});
}
FileTransfer::FileTransfer()
@@ -170,9 +180,14 @@ void FileTransfer::setRsyncFlags(const QString &flags)
d->m_setup.m_rsyncFlags = flags;
}
void FileTransfer::test(const ProjectExplorer::IDeviceConstPtr &onDevice)
void FileTransfer::setTestDevice(const ProjectExplorer::IDeviceConstPtr &device)
{
d->test(onDevice);
d->m_testDevice = device;
}
void FileTransfer::test()
{
d->test();
}
FileTransferMethod FileTransfer::transferMethod() const
@@ -190,6 +205,11 @@ void FileTransfer::stop()
d->stop();
}
ProcessResultData FileTransfer::resultData() const
{
return d->m_resultData;
}
QString FileTransfer::transferMethodName(FileTransferMethod method)
{
switch (method) {
@@ -201,6 +221,15 @@ QString FileTransfer::transferMethodName(FileTransferMethod method)
return {};
}
FileTransferAdapter::FileTransferAdapter()
{
connect(task(), &FileTransfer::done, this, [this](const ProcessResultData &result) {
emit done(result.m_exitStatus == QProcess::NormalExit
&& result.m_error == QProcess::UnknownError
&& result.m_exitCode == 0);
});
}
} // namespace ProjectExplorer
#include "filetransfer.moc"

View File

@@ -7,6 +7,8 @@
#include "filetransferinterface.h"
#include "idevicefwd.h"
#include <utils/tasktree.h>
namespace Utils { class ProcessResultData; }
namespace ProjectExplorer {
@@ -27,10 +29,13 @@ public:
FileTransferMethod transferMethod() const;
void test(const ProjectExplorer::IDeviceConstPtr &onDevice);
void setTestDevice(const ProjectExplorer::IDeviceConstPtr &device);
void test();
void start();
void stop();
Utils::ProcessResultData resultData() const;
static QString transferMethodName(FileTransferMethod method);
signals:
@@ -41,4 +46,13 @@ private:
FileTransferPrivate *d;
};
class PROJECTEXPLORER_EXPORT FileTransferAdapter : public Utils::Tasking::TaskAdapter<FileTransfer>
{
public:
FileTransferAdapter();
void start() final { task()->test(); }
};
} // namespace ProjectExplorer
QTC_DECLARE_CUSTOM_TASK(Transfer, ProjectExplorer::FileTransferAdapter);

View File

@@ -14,6 +14,7 @@
#include <utils/processinterface.h>
#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <utils/tasktree.h>
using namespace ProjectExplorer;
using namespace Utils;
@@ -203,7 +204,8 @@ void GenericLinuxDeviceTester::testPortsGatherer()
d->state = TestingPorts;
emit progressMessage(Tr::tr("Checking if specified ports are available..."));
d->portsGatherer.start(d->device);
d->portsGatherer.setDevice(d->device);
d->portsGatherer.start();
}
void GenericLinuxDeviceTester::handlePortsGathererError(const QString &message)
@@ -242,7 +244,8 @@ void GenericLinuxDeviceTester::testFileTransfer(FileTransferMethod method)
.arg(FileTransfer::transferMethodName(method)));
d->fileTransfer.setTransferMethod(method);
d->fileTransfer.test(d->device);
d->fileTransfer.setTestDevice(d->device);
d->fileTransfer.test();
}
void GenericLinuxDeviceTester::handleFileTransferDone(const ProcessResultData &resultData)