QdbMakeDefaultAppService: Don't use SshRemoteProcessRunner

Use QtcProcess with a path on device instead.

Change-Id: I4ce6d5d1cf42a678de8cc9695c7db782a81b34f9
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2022-05-04 01:08:51 +02:00
parent 0eea55926f
commit d79b34d39a
2 changed files with 28 additions and 66 deletions

View File

@@ -29,9 +29,10 @@
#include "qdbrunconfiguration.h"
#include <projectexplorer/devicesupport/idevice.h>
#include <projectexplorer/runconfigurationaspects.h>
#include <projectexplorer/target.h>
#include <ssh/sshremoteprocessrunner.h>
#include <utils/qtcprocess.h>
using namespace Utils;
namespace Qdb {
namespace Internal {
@@ -39,62 +40,38 @@ namespace Internal {
class QdbMakeDefaultAppServicePrivate
{
public:
bool makeDefault;
QSsh::SshRemoteProcessRunner *processRunner;
bool m_makeDefault = true;
QtcProcess m_process;
};
QdbMakeDefaultAppService::QdbMakeDefaultAppService(QObject *parent)
: AbstractRemoteLinuxDeployService(parent),
d(new QdbMakeDefaultAppServicePrivate)
{
d->processRunner = 0;
d->makeDefault = true;
}
QdbMakeDefaultAppService::~QdbMakeDefaultAppService()
{
cleanup();
delete d;
}
void QdbMakeDefaultAppService::setMakeDefault(bool makeDefault)
{
d->makeDefault = makeDefault;
}
void QdbMakeDefaultAppService::handleStdErr()
{
emit stdErrData(QString::fromUtf8(d->processRunner->readAllStandardError()));
}
void QdbMakeDefaultAppService::handleProcessFinished()
{
const QString error = d->processRunner->errorString();
if (!error.isEmpty()) {
emit errorMessage(tr("Remote process failed: %1").arg(error));
stopDeployment();
return;
}
// FIXME: Check that ignoring is fine
QByteArray processOutput = d->processRunner->readAllStandardOutput();
if (d->makeDefault)
connect(&d->m_process, &QtcProcess::done, this, [this] {
if (d->m_process.error() != QProcess::UnknownError)
emit errorMessage(tr("Remote process failed: %1").arg(d->m_process.errorString()));
else if (d->m_makeDefault)
emit progressMessage(tr("Application set as the default one."));
else
emit progressMessage(tr("Reset the default application."));
stopDeployment();
});
connect(&d->m_process, &QtcProcess::readyReadStandardError, this, [this] {
emit stdErrData(QString::fromUtf8(d->m_process.readAllStandardError()));
});
}
QdbMakeDefaultAppService::~QdbMakeDefaultAppService() = default;
void QdbMakeDefaultAppService::setMakeDefault(bool makeDefault)
{
d->m_makeDefault = makeDefault;
}
void QdbMakeDefaultAppService::doDeploy()
{
d->processRunner = new QSsh::SshRemoteProcessRunner;
connect(d->processRunner, &QSsh::SshRemoteProcessRunner::finished,
this, &QdbMakeDefaultAppService::handleProcessFinished);
connect(d->processRunner, &QSsh::SshRemoteProcessRunner::readyReadStandardError,
this, &QdbMakeDefaultAppService::handleStdErr);
QString remoteExe;
if (ProjectExplorer::RunConfiguration *rc = target()->activeRunConfiguration()) {
@@ -102,28 +79,19 @@ void QdbMakeDefaultAppService::doDeploy()
remoteExe = exeAspect->executable().toString();
}
QString command = Constants::AppcontrollerFilepath;
command += d->makeDefault && !remoteExe.isEmpty() ? QStringLiteral(" --make-default ") + remoteExe
: QStringLiteral(" --remove-default");
d->processRunner->run(command, deviceConfiguration()->sshParameters());
const QString args = d->m_makeDefault && !remoteExe.isEmpty()
? QStringLiteral("--make-default ") + remoteExe
: QStringLiteral("--remove-default");
d->m_process.setCommand(
{deviceConfiguration()->mapToGlobalPath(Constants::AppcontrollerFilepath), {args}});
d->m_process.start();
}
void QdbMakeDefaultAppService::stopDeployment()
{
cleanup();
d->m_process.close();
handleDeploymentDone();
}
void QdbMakeDefaultAppService::cleanup()
{
if (d->processRunner) {
disconnect(d->processRunner, 0, this, 0);
d->processRunner->cancel();
delete d->processRunner;
d->processRunner = 0;
}
}
} // namespace Internal
} // namespace Qdb

View File

@@ -41,17 +41,11 @@ public:
void setMakeDefault(bool makeDefault);
private:
void handleStdErr();
void handleProcessFinished();
bool isDeploymentNecessary() const final { return true; }
void doDeploy() final;
void stopDeployment() final;
void cleanup();
QdbMakeDefaultAppServicePrivate * const d;
std::unique_ptr<QdbMakeDefaultAppServicePrivate> d;
};
} // namespace Internal