11 #include <Atlas/Message/Element.h>
13 #include <wfmath/timestamp.h>
15 typedef Atlas::Message::MapType AtlasMapType;
20 m_name(std::move(name)),
23 m_progressRate(-1.0) {
28 m_progressRate = -1.0;
30 ProgressRateChanged.emit();
34 return (m_progress >= 1.0);
37 void Task::updateFromAtlas(
const AtlasMapType& d) {
40 auto it = d.find(
"progress");
41 if (it != d.end() && it->second.Float()) {
42 m_progress = it->second.asFloat();
49 if (it != d.end() && it->second.isFloat()) {
50 m_progressRate = it->second.Float();
52 ProgressRateChanged.emit();
56 std::vector<TaskUsage> usages;
57 it = d.find(
"usages");
58 if (it != d.end() && it->second.isList()) {
59 for (
auto& entry : it->second.List()) {
62 auto nameI = entry.Map().find(
"name");
63 if (nameI != entry.Map().end() && nameI->second.isString()) {
64 usage.name = nameI->second.String();
66 auto paramsI = entry.Map().find(
"params");
67 if (paramsI != entry.Map().end() && paramsI->second.isMap()) {
68 auto& params = paramsI->second.Map();
69 for (
auto& paramEntry : params) {
71 if (paramEntry.second.isMap()) {
72 auto& paramMap = paramEntry.second.Map();
74 auto I = paramMap.find(
"max");
75 if (I != paramMap.end() && I->second.isInt()) {
76 param.max = I->second.Int();
82 auto I = paramMap.find(
"min");
83 if (I != paramMap.end() && I->second.isInt()) {
84 param.min = I->second.Int();
90 auto I = paramMap.find(
"constraint");
91 if (I != paramMap.end() && I->second.isString()) {
92 param.constraint = I->second.String();
96 auto I = paramMap.find(
"type");
97 if (I != paramMap.end() && I->second.isString()) {
98 param.type = I->second.String();
102 usage.params.emplace(paramEntry.first, param);
105 usages.emplace_back(std::move(usage));
108 if (usages != m_usages) {
109 m_usages = std::move(usages);
110 UsagesChanged.emit();
115 void Task::progressChanged() {
122 ProgressRateChanged.emit();
126 void Task::updatePredictedProgress(
const WFMath::TimeDiff& dt) {
129 m_progress += m_progressRate * (dt.milliseconds() / 1000.0);
130 m_progress = std::min(m_progress, 1.0);