From 0c52ffca4eeff40f985b84a774a88b6e33ea562f Mon Sep 17 00:00:00 2001
From: Peter Albrecht <usnlf@student.kit.edu>
Date: Fri, 14 Feb 2025 14:58:37 +0100
Subject: [PATCH] fix: execution parameters not loading

---
 .../skill_details/SkillDetailsGroupBox.cpp    |  4 ++
 .../skill_details/SkillDetailsTreeWidget.cpp  | 44 +++++++++++++++++++
 .../skill_details/SkillDetailsTreeWidget.h    |  1 +
 3 files changed, 49 insertions(+)

diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp
index 7120093d5..b77ac6bd7 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsGroupBox.cpp
@@ -170,6 +170,10 @@ namespace armarx::skills::gui
                 &SkillDetailsTreeWidget::updated,
                 profileMenuWidget,
                 &ProfileMenuWidget::updateChangesSelector);
+        connect(profileMenuWidget->historySelector,
+                &QPushButton::pressed,
+                skillDetailsTreeWidget,
+                &SkillDetailsTreeWidget::reloadLastExecutionParameters);
     }
 
 
diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp
index 988a70e30..96434f8ea 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.cpp
@@ -15,6 +15,7 @@
 
 #include <ArmarXCore/core/logging/Logging.h>
 
+#include "RobotAPI/libraries/skills/core/SkillExecutionID.h"
 #include "RobotAPI/libraries/skills/core/SkillID.h"
 #include "RobotAPI/libraries/skills_gui/aron_tree_widget/AronTreeWidgetController.h"
 #include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h>
@@ -230,6 +231,49 @@ namespace armarx::skills::gui
         ARMARX_INFO << "Reloaded parameters from the last execution";
         aronTreeWidgetController->setFromAron(params.value());
     }
+    
+    void SkillDetailsTreeWidget::reloadLastExecutionParameters() 
+    {
+        auto executions = memory->getExecutions();
+        if (executions.empty() || not shownSkill.has_value()) 
+        {
+            return;
+        }
+
+
+        // find the most recent execution with a matching skill id
+
+        std::optional<armarx::skills::SkillStatusUpdate> found = std::nullopt;
+        for (auto& execution : executions)
+        {
+            if (execution.first.skillId == shownSkill->skillId)
+            {
+                if (not found.has_value())
+                {
+                    found = execution.second;
+                }
+                else
+                {
+                    if (found->executionId.executionStartedTime < execution.first.executionStartedTime)
+                    {
+                        // in this case, we found a more recent execution.
+                        found = execution.second;
+                    }
+                }
+            } 
+        }
+
+        if (not found.has_value())
+        {
+            // we didn't find an entry for the execution id
+            ARMARX_INFO<< "No execution for the skill " << shownSkill->skillId.toString() << " has been found in the memory. The parametrization cannot be reloaded.";
+            return;
+        }
+        auto params = found->parameters;
+
+        ARMARX_INFO << "Reloading parameters of skill " << found->executionId.skillId;
+        this->aronTreeWidgetController->setFromAron(params);
+    }
 
     aron::data::DictPtr
     SkillDetailsTreeWidget::getConfigAsAron()
diff --git a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h
index 92308c098..819a61663 100644
--- a/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h
+++ b/source/RobotAPI/libraries/skills_gui/skill_details/SkillDetailsTreeWidget.h
@@ -38,6 +38,7 @@ namespace armarx::skills::gui
         void updateGui(SkillManagerWrapper::Snapshot update);
         void resizeContents();
         void reloadLastParameters();
+        void reloadLastExecutionParameters();
  
     private:
         struct ShownSkill
-- 
GitLab