diff options
author | hjk <hjk@qt.io> | 2019-06-04 14:22:35 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-06-07 06:22:45 +0000 |
commit | 5942b82490985008af9ac10b3b2ed0e060d5dba5 (patch) | |
tree | ebda5bd21b93ef1d8b8f1195f5896b388f52b8d8 /src/plugins/boot2qt/qdbmakedefaultappservice.cpp | |
parent | 0c74f6cc21ae7fccfd844efdd9365e72fa507a23 (diff) |
Add support for Boot2Qt
A plugin for communication with Boot2Qt devices.
Task-number: QTCREATORBUG-21808
Change-Id: I61f4a9451c2fe8ff4e1108e07db2e72e8c613c43
Reviewed-by: Kari Oikarinen <kari.oikarinen@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/plugins/boot2qt/qdbmakedefaultappservice.cpp')
-rw-r--r-- | src/plugins/boot2qt/qdbmakedefaultappservice.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/plugins/boot2qt/qdbmakedefaultappservice.cpp b/src/plugins/boot2qt/qdbmakedefaultappservice.cpp new file mode 100644 index 00000000000..fc7212b9104 --- /dev/null +++ b/src/plugins/boot2qt/qdbmakedefaultappservice.cpp @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2019 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 "qdbmakedefaultappservice.h" + +#include "qdbconstants.h" +#include "qdbrunconfiguration.h" + +#include <ssh/sshremoteprocessrunner.h> +#include <projectexplorer/target.h> +#include <projectexplorer/runconfigurationaspects.h> + +namespace Qdb { +namespace Internal { + +class QdbMakeDefaultAppServicePrivate +{ +public: + bool makeDefault; + QSsh::SshRemoteProcessRunner *processRunner; +}; + +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) +{ + if (!error.isEmpty()) { + emit errorMessage(tr("Remote process failed: %1").arg(error)); + stopDeployment(); + return; + } + + QByteArray processOutput = d->processRunner->readAllStandardOutput(); + + if (d->makeDefault) + emit progressMessage(tr("Application made as the default one.")); + else + emit progressMessage(tr("Reset the default application.")); + + stopDeployment(); +} + +void QdbMakeDefaultAppService::doDeploy() +{ + d->processRunner = new QSsh::SshRemoteProcessRunner; + connect(d->processRunner, &QSsh::SshRemoteProcessRunner::processClosed, + this, &QdbMakeDefaultAppService::handleProcessFinished); + connect(d->processRunner, &QSsh::SshRemoteProcessRunner::readyReadStandardError, + this, &QdbMakeDefaultAppService::handleStdErr); + + QString remoteExe; + + if (ProjectExplorer::RunConfiguration *rc = target()->activeRunConfiguration()) { + if (auto exeAspect = rc->aspect<ProjectExplorer::ExecutableAspect>()) + 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()); +} + +void QdbMakeDefaultAppService::stopDeployment() +{ + cleanup(); + 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 |