From 15d04026945a7ca5a7c10ed886441d91911f118a Mon Sep 17 00:00:00 2001 From: Dominik Holland Date: Mon, 15 Jan 2024 13:02:14 +0100 Subject: [PATCH] AppMan: Add Aspects to the RunConfiguration Change-Id: Icf817279d76213bc5875f12ee74151f3d8fb1f44 Reviewed-by: hjk --- .../appmanagerrunconfiguration.cpp | 25 +++++++++++ .../appmanagerruncontrol.cpp | 42 +++++++++++-------- .../appmanagerstringaspect.cpp | 33 +++++++++++++++ .../appmanagerstringaspect.h | 42 +++++++++++++++++++ 4 files changed, 124 insertions(+), 18 deletions(-) diff --git a/src/plugins/qtapplicationmanager/appmanagerrunconfiguration.cpp b/src/plugins/qtapplicationmanager/appmanagerrunconfiguration.cpp index 2ac18bedf4f..5cd8bbbc734 100644 --- a/src/plugins/qtapplicationmanager/appmanagerrunconfiguration.cpp +++ b/src/plugins/qtapplicationmanager/appmanagerrunconfiguration.cpp @@ -6,8 +6,10 @@ #include "appmanagerrunconfiguration.h" #include "appmanagerconstants.h" +#include "appmanagerstringaspect.h" #include "appmanagertargetinformation.h" #include "appmanagertr.h" +#include "appmanagerutilities.h" #include #include @@ -29,7 +31,30 @@ public: : RunConfiguration(target, id) { setDefaultDisplayName(Tr::tr("Run an Appman Package")); + + setUpdater([this, target] { + QList tis = TargetInformation::readFromProject(target, buildKey()); + if (tis.isEmpty()) + return; + const TargetInformation targetInformation = tis.at(0); + + controller.setValue(FilePath::fromString(getToolFilePath(Constants::APPMAN_CONTROLLER, target->kit(), + targetInformation.device))); + + appId.setValue(targetInformation.manifest.id); + appId.setReadOnly(true); + }); + + connect(target, &Target::parsingFinished, this, &RunConfiguration::update); + connect(target, &Target::buildSystemUpdated, this, &RunConfiguration::update); + connect(target, &Target::deploymentDataChanged, this, &RunConfiguration::update); + connect(target, &Target::kitChanged, this, &RunConfiguration::update); } + + AppManagerControllerAspect controller{this}; + AppManagerIdAspect appId{this}; + AppManagerDocumentUrlAspect documentUrl{this}; + AppManagerInstanceIdAspect instanceId{this}; }; class AppManagerRunAndDebugConfiguration final : public AppManagerRunConfiguration diff --git a/src/plugins/qtapplicationmanager/appmanagerruncontrol.cpp b/src/plugins/qtapplicationmanager/appmanagerruncontrol.cpp index c3d9ca16f55..6aa9a0156a4 100644 --- a/src/plugins/qtapplicationmanager/appmanagerruncontrol.cpp +++ b/src/plugins/qtapplicationmanager/appmanagerruncontrol.cpp @@ -6,6 +6,7 @@ #include "appmanagerruncontrol.h" #include "appmanagerconstants.h" +#include "appmanagerstringaspect.h" #include "appmanagertargetinformation.h" #include "appmanagertr.h" #include "appmanagerutilities.h" @@ -52,16 +53,20 @@ public: }); setStartModifier([this, runControl] { - const auto targetInformation = TargetInformation(runControl->target()); - if (!targetInformation.isValid()) - return; + FilePath controller = runControl->aspect()->filePath; + QString appId = runControl->aspect()->value; + QString instanceId = runControl->aspect()->value; + QString documentUrl = runControl->aspect()->value; // Prevent the write channel to be closed, otherwise the appman-controller will exit setProcessMode(ProcessMode::Writer); - setWorkingDirectory(targetInformation.workingDirectory()); - setCommandLine({FilePath::fromString(getToolFilePath(Constants::APPMAN_CONTROLLER, runControl->kit(), - targetInformation.device)), - {"start-application", "-eio", targetInformation.manifest.id}}); + CommandLine cmd{controller}; + if (!instanceId.isEmpty()) + cmd.addArgs({"--instance-id", instanceId}); + cmd.addArgs({"start-application", "-eio", appId}); + if (!documentUrl.isEmpty()) + cmd.addArg(documentUrl); + setCommandLine(cmd); }); } }; @@ -97,20 +102,19 @@ public: addStartDependency(m_portsGatherer); setStartModifier([this, runControl] { - - const auto targetInformation = TargetInformation(runControl->target()); - if (!targetInformation.isValid()) { - reportFailure(); - return; - } + FilePath controller = runControl->aspect()->filePath; + QString appId = runControl->aspect()->value; + QString instanceId = runControl->aspect()->value; + QString documentUrl = runControl->aspect()->value; // const int perfPort = m_portsGatherer->gdbServer().port(); const int gdbServerPort = m_portsGatherer->gdbServer().port(); const int qmlServerPort = m_portsGatherer->qmlServer().port(); - CommandLine cmd{FilePath::fromString(getToolFilePath(Constants::APPMAN_CONTROLLER, - runControl->kit(), - targetInformation.device))}; + CommandLine cmd{controller}; + if (!instanceId.isEmpty()) + cmd.addArgs({"--instance-id", instanceId}); + cmd.addArg("debug-application"); if (m_useGdbServer || m_useQmlServer) { @@ -137,12 +141,14 @@ public: } cmd.addArg("-eio"); - cmd.addArg(targetInformation.manifest.id); + cmd.addArg(appId); + + if (!documentUrl.isEmpty()) + cmd.addArg(documentUrl); // Prevent the write channel to be closed, otherwise the appman-controller will exit setProcessMode(ProcessMode::Writer); setCommandLine(cmd); - setWorkingDirectory(targetInformation.workingDirectory()); appendMessage(Tr::tr("Starting AppMan Debugging..."), NormalMessageFormat); appendMessage(Tr::tr("Using: %1").arg(cmd.toUserOutput()), NormalMessageFormat); diff --git a/src/plugins/qtapplicationmanager/appmanagerstringaspect.cpp b/src/plugins/qtapplicationmanager/appmanagerstringaspect.cpp index 71d09e02068..5a4d26c332e 100644 --- a/src/plugins/qtapplicationmanager/appmanagerstringaspect.cpp +++ b/src/plugins/qtapplicationmanager/appmanagerstringaspect.cpp @@ -17,6 +17,39 @@ using namespace Utils; namespace AppManager { namespace Internal { +AppManagerIdAspect::AppManagerIdAspect(Utils::AspectContainer *container) + : StringAspect(container) +{ + setSettingsKey("ApplicationManagerPlugin.ApplicationId"); + setDisplayStyle(StringAspect::LineEditDisplay); + setLabelText(Tr::tr("Application Id:")); + // setReadOnly(true); +} + +AppManagerInstanceIdAspect::AppManagerInstanceIdAspect(Utils::AspectContainer *container) + : StringAspect(container) +{ + setSettingsKey("ApplicationManagerPlugin.InstanceId"); + setDisplayStyle(StringAspect::LineEditDisplay); + setLabelText(Tr::tr("AppMan Instance Id:")); +} + +AppManagerDocumentUrlAspect::AppManagerDocumentUrlAspect(Utils::AspectContainer *container) + : StringAspect(container) +{ + setSettingsKey("ApplicationManagerPlugin.DocumentUrl"); + setDisplayStyle(StringAspect::LineEditDisplay); + setLabelText(Tr::tr("Document Url:")); +} + +AppManagerControllerAspect::AppManagerControllerAspect(Utils::AspectContainer *container) + : FilePathAspect(container) +{ + setSettingsKey("ApplicationManagerPlugin.AppControllerPath"); + setLabelText(Tr::tr("Controller:")); + setPlaceHolderText(Tr::tr("-")); +} + AppManagerStringAspect::AppManagerStringAspect(AspectContainer *container) : StringAspect(container) { diff --git a/src/plugins/qtapplicationmanager/appmanagerstringaspect.h b/src/plugins/qtapplicationmanager/appmanagerstringaspect.h index fef58a648fa..a340b9fa724 100644 --- a/src/plugins/qtapplicationmanager/appmanagerstringaspect.h +++ b/src/plugins/qtapplicationmanager/appmanagerstringaspect.h @@ -5,10 +5,52 @@ #pragma once +#include "appmanagertr.h" + #include namespace AppManager::Internal { +class AppManagerIdAspect final : public Utils::StringAspect +{ + Q_OBJECT + +public: + AppManagerIdAspect(Utils::AspectContainer *container = nullptr); + + ~AppManagerIdAspect() final = default; +}; + +class AppManagerInstanceIdAspect final : public Utils::StringAspect +{ + Q_OBJECT + +public: + AppManagerInstanceIdAspect(Utils::AspectContainer *container = nullptr); + + ~AppManagerInstanceIdAspect() final = default; +}; + +class AppManagerDocumentUrlAspect final : public Utils::StringAspect +{ + Q_OBJECT + +public: + AppManagerDocumentUrlAspect(Utils::AspectContainer *container = nullptr); + + ~AppManagerDocumentUrlAspect() final = default; +}; + +class AppManagerControllerAspect final : public Utils::FilePathAspect +{ + Q_OBJECT + +public: + AppManagerControllerAspect(Utils::AspectContainer *container = nullptr); + + ~AppManagerControllerAspect() final = default; +}; + class AppManagerStringAspect : public Utils::StringAspect { public: