aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/boot2qt/qdbmakedefaultappservice.cpp
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-06-04 14:22:35 +0200
committerhjk <hjk@qt.io>2019-06-07 06:22:45 +0000
commit5942b82490985008af9ac10b3b2ed0e060d5dba5 (patch)
treeebda5bd21b93ef1d8b8f1195f5896b388f52b8d8 /src/plugins/boot2qt/qdbmakedefaultappservice.cpp
parent0c74f6cc21ae7fccfd844efdd9365e72fa507a23 (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.cpp126
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