diff options
Diffstat (limited to 'manager.cpp')
-rw-r--r-- | manager.cpp | 79 |
1 files changed, 52 insertions, 27 deletions
diff --git a/manager.cpp b/manager.cpp index 56e0d0b..bcc581c 100644 --- a/manager.cpp +++ b/manager.cpp @@ -134,20 +134,12 @@ void Manager::onPropertyChanged(const std::string& key, if (key == PROPERTY_TIME_MODE) { setCurrentTimeMode(value); - for (const auto listener : listeners) - { - listener->onModeChanged(timeMode); - } - // When time_mode is updated, update the NTP setting - updateNtpSetting(value); + onTimeModeChanged(value); } else if (key == PROPERTY_TIME_OWNER) { setCurrentTimeOwner(value); - for (const auto listener : listeners) - { - listener->onOwnerChanged(timeOwner); - } + onTimeOwnerChanged(); } } } @@ -259,20 +251,17 @@ void Manager::onPgoodChanged(bool pgood) } if (!requestedMode.empty()) { - setCurrentTimeMode(requestedMode); - for (const auto& listener : listeners) + if (setCurrentTimeMode(requestedMode)) { - listener->onModeChanged(timeMode); + onTimeModeChanged(requestedMode); } - updateNtpSetting(requestedMode); setRequestedMode({}); // Clear requested mode } if (!requestedOwner.empty()) { - setCurrentTimeOwner(requestedOwner); - for (const auto& listener : listeners) + if (setCurrentTimeOwner(requestedOwner)) { - listener->onOwnerChanged(timeOwner); + onTimeOwnerChanged(); } setRequestedOwner({}); // Clear requested owner } @@ -300,20 +289,56 @@ int Manager::onPgoodChanged(sd_bus_message* msg, return 0; } -void Manager::setCurrentTimeMode(const std::string& mode) +bool Manager::setCurrentTimeMode(const std::string& mode) { - log<level::INFO>("Time mode is changed", - entry("MODE=%s", mode.c_str())); - timeMode = convertToMode(mode); - utils::writeData(modeFile, mode); + auto newMode = convertToMode(mode); + if (newMode != timeMode) + { + log<level::INFO>("Time mode is changed", + entry("MODE=%s", mode.c_str())); + timeMode = newMode; + utils::writeData(modeFile, mode); + return true; + } + else + { + return false; + } +} + +bool Manager::setCurrentTimeOwner(const std::string& owner) +{ + auto newOwner = convertToOwner(owner); + if (newOwner != timeOwner) + { + log<level::INFO>("Time owner is changed", + entry("OWNER=%s", owner.c_str())); + timeOwner = newOwner; + utils::writeData(ownerFile, owner); + return true; + } + else + { + return false; + } +} + +void Manager::onTimeModeChanged(const std::string& mode) +{ + for (const auto listener : listeners) + { + listener->onModeChanged(timeMode); + } + // When time_mode is updated, update the NTP setting + updateNtpSetting(mode); } -void Manager::setCurrentTimeOwner(const std::string& owner) +void Manager::onTimeOwnerChanged() { - log<level::INFO>("Time owner is changed", - entry("OWNER=%s", owner.c_str())); - timeOwner = convertToOwner(owner); - utils::writeData(ownerFile, owner); + for (const auto& listener : listeners) + { + listener->onOwnerChanged(timeOwner); + } } std::string Manager::getSettings(const char* value) const |