diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp index bb7ac21c9ac4c7bcdf630744d93533e2c1e07c54..db2a98e79d96e29cb90cc2560a6002aa25d1e77c 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp @@ -488,23 +488,28 @@ namespace armarx void SkillManagerMonitorWidgetController::stopSkill() { - std::string c = selectedSkill.skillExecutionId.skillId.skillName; - ARMARX_IMPORTANT << "Stop skill triggered: " << c; - // std::scoped_lock l(updateMutex); - // if (selectedSkill.skillId.fullySpecified()) - // { - // return; - // } - - // const auto& skillDescriptions = skills.at(*selectedSkill.skillId.providerId); - // if (!skillDescriptions.count(selectedSkill.skillId.skillName)) - // { - // return; - // } - - // ARMARX_INFO << "Stopping skill from GUI: " << selectedSkill.skillId; - - // manager->abortSkill(selectedSkill.skillId); + std::scoped_lock l(updateMutex); + + /* + * Example skills are not fully specified; disabled check + * + if (selectedSkill.skillExecutionId.skillId.fullySpecified()) + { + ARMARX_INFO << "The user requested to stop a skill, which was not fully specified!"; + return; + } + + const auto& skillDescriptions = skills.at(*selectedSkill.skillId.providerId); + if (!skillDescriptions.count(selectedSkill.skillId.skillName)) + { + return; + } + */ + + ARMARX_INFO << "Stopping skill from GUI: " + << selectedSkill.skillExecutionId.skillId.skillName; + + memory->abortSkill(selectedSkill.skillExecutionId.toManagerIce()); } void diff --git a/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp b/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp index f048167a136ed66da74f892aa03929049a8455ea..3c52c6be7ba8f52f8a6b023e65c23f897225910e 100644 --- a/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp +++ b/source/RobotAPI/libraries/skills/core/SkillExecutionID.cpp @@ -47,5 +47,13 @@ namespace armarx armarx::core::time::fromIce(i.executionStartedTime, t); return {skills::SkillID::FromIce(i.skillId, providerName), i.executorName, t}; } + + std::string + SkillExecutionID::toString(const std::string& prefix) const + { + return skillId.toString(prefix) + ENTER_SEPARATOR + executorName + SEPARATOR + + executionStartedTime.toDateTimeString() + EXIT_SEPARATOR; + } + } // namespace skills } // namespace armarx diff --git a/source/RobotAPI/libraries/skills/core/SkillExecutionID.h b/source/RobotAPI/libraries/skills/core/SkillExecutionID.h index a39d82bd2c951ddbf3617e04791094cdf3c3c59f..bd1bfb326f466f499174182f87540fd7276ca016 100644 --- a/source/RobotAPI/libraries/skills/core/SkillExecutionID.h +++ b/source/RobotAPI/libraries/skills/core/SkillExecutionID.h @@ -21,7 +21,11 @@ namespace armarx SkillID skillId; std::string executorName; armarx::core::time::DateTime executionStartedTime; + static const constexpr char* UNKNOWN = "UNKNOWN"; + static const constexpr char* ENTER_SEPARATOR = "["; + static const constexpr char* EXIT_SEPARATOR = "]"; + static const constexpr char* SEPARATOR = "@"; SkillExecutionID() = delete; SkillExecutionID(const SkillID&, @@ -61,6 +65,8 @@ namespace armarx static SkillExecutionID FromIce(const skills::provider::dto::SkillExecutionID&, const std::optional<skills::ProviderID>& providerName); + + std::string toString(const std::string& prefix = "") const; }; } // namespace skills