AppMan: Add Aspects to the RunConfiguration

Change-Id: Icf817279d76213bc5875f12ee74151f3d8fb1f44
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Dominik Holland
2024-01-15 13:02:14 +01:00
parent 5dfd572f0f
commit 15d0402694
4 changed files with 124 additions and 18 deletions

View File

@@ -6,8 +6,10 @@
#include "appmanagerrunconfiguration.h"
#include "appmanagerconstants.h"
#include "appmanagerstringaspect.h"
#include "appmanagertargetinformation.h"
#include "appmanagertr.h"
#include "appmanagerutilities.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
@@ -29,7 +31,30 @@ public:
: RunConfiguration(target, id)
{
setDefaultDisplayName(Tr::tr("Run an Appman Package"));
setUpdater([this, target] {
QList<TargetInformation> 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

View File

@@ -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<AppManagerControllerAspect>()->filePath;
QString appId = runControl->aspect<AppManagerIdAspect>()->value;
QString instanceId = runControl->aspect<AppManagerInstanceIdAspect>()->value;
QString documentUrl = runControl->aspect<AppManagerDocumentUrlAspect>()->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<AppManagerControllerAspect>()->filePath;
QString appId = runControl->aspect<AppManagerIdAspect>()->value;
QString instanceId = runControl->aspect<AppManagerInstanceIdAspect>()->value;
QString documentUrl = runControl->aspect<AppManagerDocumentUrlAspect>()->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);

View File

@@ -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)
{

View File

@@ -5,10 +5,52 @@
#pragma once
#include "appmanagertr.h"
#include <utils/aspects.h>
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: