diff --git a/lib/variables/variable-string.cpp b/lib/variables/variable-string.cpp index ccc3d39c..3d6c1186 100644 --- a/lib/variables/variable-string.cpp +++ b/lib/variables/variable-string.cpp @@ -73,7 +73,9 @@ std::string SubstitueVariables(std::string str) for (const auto &v : GetVariables()) { const auto &variable = std::dynamic_pointer_cast(v); const std::string pattern = "${" + variable->Name() + "}"; - ReplaceAll(str, pattern, variable->Value()); + if (ReplaceAll(str, pattern, variable->Value(false))) { + variable->UpdateLastUsed(); + } } return str; } diff --git a/lib/variables/variable.cpp b/lib/variables/variable.cpp index 1aefc275..b1c8dd79 100644 --- a/lib/variables/variable.cpp +++ b/lib/variables/variable.cpp @@ -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 Variable::DoubleValue() const { - return GetDouble(_value); + return GetDouble(Value()); } std::optional 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 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(now - _lastUsed) + .count(); +} + +void Variable::UpdateLastUsed() const +{ + _lastUsed = std::chrono::high_resolution_clock::now(); +} + std::deque> &GetVariables() { return variables; diff --git a/lib/variables/variable.hpp b/lib/variables/variable.hpp index f3568087..37f3cf5a 100644 --- a/lib/variables/variable.hpp +++ b/lib/variables/variable.hpp @@ -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 DoubleValue() const; EXPORT std::optional IntValue() const; void SetValue(const std::string &val); void SetValue(double); + std::string GetDefaultValue() const { return _defaultValue; } static std::shared_ptr Create() { return std::make_shared(); @@ -34,11 +35,15 @@ public: SAVE, SET_DEFAULT, }; + SaveAction GetSaveAction() const { return _saveAction; } + std::optional 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;