diff --git a/src/bedsidemon/application.cpp b/src/bedsidemon/application.cpp index 037c6db..b33e21b 100644 --- a/src/bedsidemon/application.cpp +++ b/src/bedsidemon/application.cpp @@ -40,7 +40,7 @@ using namespace bedsidemon; application::application(bool window, std::string_view res_path) : ruisapp::application( // - "ruis-tests", + "bedsidemon"s, []() { // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) ruisapp::window_params wp(r4::vector2(1024, 600)); diff --git a/src/bedsidemon/application.hpp b/src/bedsidemon/application.hpp index 9f72fbd..2620bc0 100644 --- a/src/bedsidemon/application.hpp +++ b/src/bedsidemon/application.hpp @@ -24,6 +24,8 @@ along with this program. If not, see . #include #include +#include "settings.hpp" + #include "spo2/spo2_sensor.hpp" namespace bedsidemon { @@ -39,6 +41,8 @@ class application : public ruisapp::application std::shared_ptr clock_timer; public: + bedsidemon::settings_storage settings_storage; + application(bool window, std::string_view res_path); static application& inst() diff --git a/src/bedsidemon/settings.cpp b/src/bedsidemon/settings.cpp new file mode 100644 index 0000000..5ec652a --- /dev/null +++ b/src/bedsidemon/settings.cpp @@ -0,0 +1,70 @@ +#include "settings.hpp" + +#include + +#include +#include + +using namespace std::string_view_literals; + +using namespace bedsidemon; + +namespace{ +constexpr const auto settings_filename = "settings.tml"sv; + +constexpr const auto sweep_speed_key = "sweep_speed_um_per_sec"sv; +} + +settings_storage::settings_storage() : + filename(utki::cat(ruisapp::application::inst().directory.config, settings_filename)), + settings_v(read(this->filename)) +{} + +settings settings_storage::read(std::string_view filename){ + papki::fs_file fi(filename); + + if(!fi.exists()){ + LOG([](auto&o){o << "settings file not found, use default settings" << std::endl;}) + return {}; + } + + settings setts; + + auto tml = tml::read(fi); + + for(const auto& t : tml){ + if(t.value.to_string() == sweep_speed_key){ + // TODO: + } + } + + return setts; +} + +void settings_storage::set(const settings& s){ + this->settings_v = s; + this->write(); +} + +void settings_storage::write(){ + settings default_values; + + tml::forest tml; + + auto add_setting = [&tml](std::string_view key, tml::leaf val){ + tml.push_back(tml::tree(key, {val})); + }; + + if(this->settings_v.sweep_speed_um_per_sec != default_values.sweep_speed_um_per_sec){ + add_setting(sweep_speed_key, tml::leaf(this->settings_v.sweep_speed_um_per_sec)); + } + + if(tml.empty()){ + return; + } + + std::filesystem::create_directories(ruisapp::application::inst().directory.config); + + papki::fs_file fi(filename); + tml::write(tml, fi); +} diff --git a/src/bedsidemon/settings.hpp b/src/bedsidemon/settings.hpp new file mode 100644 index 0000000..86e3e99 --- /dev/null +++ b/src/bedsidemon/settings.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include + +namespace bedsidemon{ + +struct settings{ + uint32_t sweep_speed_um_per_sec = 25000; +}; + +class settings_storage{ + std::string filename; + + settings settings_v; + + static settings read(std::string_view filename); + void write(); + +public: + settings_storage(); + ~settings_storage(){ + this->write();// TODO: remove? + } + + const settings& get()const noexcept{ + return this->settings_v; + } + + void set(const settings& s); +}; + +}