Keep track of last use of variable

This commit is contained in:
WarmUpTill 2024-02-19 19:20:39 +01:00 committed by WarmUpTill
parent cb58eb9f04
commit a7da22b7e9
3 changed files with 36 additions and 4 deletions

View File

@ -73,7 +73,9 @@ std::string SubstitueVariables(std::string str)
for (const auto &v : GetVariables()) {
const auto &variable = std::dynamic_pointer_cast<Variable>(v);
const std::string pattern = "${" + variable->Name() + "}";
ReplaceAll(str, pattern, variable->Value());
if (ReplaceAll(str, pattern, variable->Value(false))) {
variable->UpdateLastUsed();
}
}
return str;
}

View File

@ -51,28 +51,53 @@ void Variable::Save(obs_data_t *obj) const
obs_data_set_string(obj, "defaultValue", _defaultValue.c_str());
}
std::string Variable::Value(bool updateLastUsed) const
{
if (updateLastUsed) {
UpdateLastUsed();
}
return _value;
}
std::optional<double> Variable::DoubleValue() const
{
return GetDouble(_value);
return GetDouble(Value());
}
std::optional<int> Variable::IntValue() const
{
return GetInt(_value);
return GetInt(Value());
}
void Variable::SetValue(const std::string &val)
{
_value = val;
_lastUsed = std::chrono::high_resolution_clock::now();
lastVariableChange = std::chrono::high_resolution_clock::now();
}
void Variable::SetValue(double value)
{
_value = std::to_string(value);
_lastUsed = std::chrono::high_resolution_clock::now();
lastVariableChange = std::chrono::high_resolution_clock::now();
}
std::optional<uint64_t> Variable::SecondsSinceLastUse() const
{
if (_lastUsed.time_since_epoch().count() == 0) {
return {};
}
const auto now = std::chrono::high_resolution_clock::now();
return std::chrono::duration_cast<std::chrono::seconds>(now - _lastUsed)
.count();
}
void Variable::UpdateLastUsed() const
{
_lastUsed = std::chrono::high_resolution_clock::now();
}
std::deque<std::shared_ptr<Item>> &GetVariables()
{
return variables;

View File

@ -19,11 +19,12 @@ public:
~Variable();
void Load(obs_data_t *obj);
void Save(obs_data_t *obj) const;
EXPORT std::string Value() const { return _value; }
EXPORT std::string Value(bool updateLastUsed = true) const;
EXPORT std::optional<double> DoubleValue() const;
EXPORT std::optional<int> IntValue() const;
void SetValue(const std::string &val);
void SetValue(double);
std::string GetDefaultValue() const { return _defaultValue; }
static std::shared_ptr<Item> Create()
{
return std::make_shared<Variable>();
@ -34,11 +35,15 @@ public:
SAVE,
SET_DEFAULT,
};
SaveAction GetSaveAction() const { return _saveAction; }
std::optional<uint64_t> SecondsSinceLastUse() const;
void UpdateLastUsed() const;
private:
SaveAction _saveAction = SaveAction::DONT_SAVE;
std::string _value = "";
std::string _defaultValue = "";
mutable std::chrono::high_resolution_clock::time_point _lastUsed;
friend VariableSelection;
friend VariableSettingsDialog;