diff options
Diffstat (limited to 'control/zone.cpp')
-rw-r--r-- | control/zone.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/control/zone.cpp b/control/zone.cpp index 7d836ba..8408e8d 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -71,7 +71,8 @@ Zone::Zone(Mode mode, // Do not enable set speed events when in init mode if (mode == Mode::control) { - // TODO Determine thermal control mode states + // Restore thermal control current mode state + restoreCurrentMode(); // Emit objects added in control mode only this->emit_object_added(); @@ -614,6 +615,33 @@ void Zone::saveCurrentMode() oArch(ThermalObject::current()); } +void Zone::restoreCurrentMode() +{ + std::string current = "Default"; + fs::path path{CONTROL_PERSIST_ROOT_PATH}; + path /= std::to_string(_zoneNum); + path /= "CurrentMode"; + fs::create_directories(path.parent_path()); + + try + { + if (fs::exists(path)) + { + std::ifstream ifs(path.c_str(), std::ios::in | std::ios::binary); + cereal::JSONInputArchive iArch(ifs); + iArch(current); + } + } + catch (std::exception& e) + { + log<level::ERR>(e.what()); + fs::remove(path); + current = "Default"; + } + + this->current(current); +} + } } } |