From 45c27c2f4888200c5bc03e1fac6c41478cc23e74 Mon Sep 17 00:00:00 2001 From: Przemyslaw Brudny Date: Wed, 22 Sep 2021 22:31:14 +0200 Subject: [PATCH] [EGD-7156] Fix alarm time set Fixed alarm time set. --- .../ApplicationAlarmClock.cpp | 2 +- .../models/NewEditAlarmModel.cpp | 7 ++---- .../models/NewEditAlarmModel.hpp | 4 +-- .../widgets/AlarmTimeItem.cpp | 25 ++++++++++++------- .../widgets/AlarmTimeItem.hpp | 7 +++--- module-utils/Utils.hpp | 11 ++++++++ 6 files changed, 34 insertions(+), 22 deletions(-) diff --git a/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp b/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp index a5d09a6ab7a2b0f6066aa13c28ce603e668c6ec0..e25e478057debec5da102d59058c5b0d6ea3ff59 100644 --- a/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp +++ b/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp @@ -75,7 +75,7 @@ namespace app [rRulePresenter](ApplicationCommon *app, const std::string &name) { auto alarmsRepository = std::make_unique(app); auto alarmsProvider = std::make_shared( - app, rRulePresenter, std::move(alarmsRepository), !stm::api::isTimeFormat12h()); + app, rRulePresenter, std::move(alarmsRepository)); auto presenter = std::make_unique(alarmsProvider); return std::make_unique(app, std::move(presenter)); diff --git a/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp b/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp index a045a464dc53fbc9ae842057aa2102763b83af3d..7f6909ca198db3a06d5e354622ccc29027b70ffc 100644 --- a/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp +++ b/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp @@ -16,10 +16,8 @@ namespace app::alarmClock { NewEditAlarmModel::NewEditAlarmModel(app::ApplicationCommon *app, std::shared_ptr rRulePresenter, - std::shared_ptr alarmsRepository, - bool mode24H) - : application(app), alarmsRepository{std::move(alarmsRepository)}, rRulePresenter(rRulePresenter), - mode24H(mode24H) + std::shared_ptr alarmsRepository) + : application(app), alarmsRepository{std::move(alarmsRepository)}, rRulePresenter(rRulePresenter) {} unsigned int NewEditAlarmModel::requestRecordsCount() @@ -49,7 +47,6 @@ namespace app::alarmClock assert(app != nullptr); internalData.push_back(new gui::AlarmTimeItem( - mode24H, [app](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); }, [app]() { app->getCurrentWindow()->bottomBarRestoreFromTemporaryMode(); })); diff --git a/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp b/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp index a8b8db5a5a32540067648a82fe2091d0ccfdba30..111dfeb1581b6559647fe8adb961d64ccac8caa5 100644 --- a/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp +++ b/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp @@ -32,13 +32,11 @@ namespace app::alarmClock std::shared_ptr alarmsRepository; std::shared_ptr rRulePresenter; gui::AlarmInternalListItem *repeatOption = nullptr; - bool mode24H = false; public: NewEditAlarmModel(app::ApplicationCommon *app, std::shared_ptr rRulePresenter, - std::shared_ptr alarmsRepository, - bool mode24H = false); + std::shared_ptr alarmsRepository); void loadData(std::shared_ptr record) override; void saveData(std::shared_ptr alarm, AlarmAction action) override; diff --git a/module-apps/application-alarm-clock/widgets/AlarmTimeItem.cpp b/module-apps/application-alarm-clock/widgets/AlarmTimeItem.cpp index 66a88f6662994c99cc5970e5834208655f4ce54e..f61fbbb0e169eb27a80d1bd7d1eeb351b351c0af 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmTimeItem.cpp +++ b/module-apps/application-alarm-clock/widgets/AlarmTimeItem.cpp @@ -12,10 +12,9 @@ namespace gui { namespace timeItem = style::alarmClock::window::item::time; - AlarmTimeItem::AlarmTimeItem(bool mode24H, - std::function bottomBarTemporaryMode, + AlarmTimeItem::AlarmTimeItem(std::function bottomBarTemporaryMode, std::function bottomBarRestoreFromTemporaryMode) - : mode24H{mode24H}, bottomBarTemporaryMode(std::move(bottomBarTemporaryMode)), + : mode24H(!stm::api::isTimeFormat12h()), bottomBarTemporaryMode(std::move(bottomBarTemporaryMode)), bottomBarRestoreFromTemporaryMode(std::move(bottomBarRestoreFromTemporaryMode)) { setMinimumSize(timeItem::width, timeItem::height); @@ -113,13 +112,22 @@ namespace gui }; onSaveCallback = [&](std::shared_ptr record) { + using namespace utils::time; validateHour(); - auto hours = std::chrono::hours(std::stoi(hourInput->getText().c_str())); - auto minutes = std::chrono::minutes(std::stoi(minuteInput->getText().c_str())); - if (!mode24H) { - hours = date::make24(hours, isPm(mode12hInput->getText())); + const auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + const auto newTime = std::localtime(&now); + + if (mode24H) { + newTime->tm_hour = utils::toNumeric(hourInput->getText()); + } + else { + newTime->tm_hour = date::make24(std::chrono::hours{utils::toNumeric(hourInput->getText())}, + isPm(mode12hInput->getText())) + .count(); } - record->startDate = TimePointFromYearMonthDay(TimePointToYearMonthDay(TimePointNow())) + hours + minutes; + newTime->tm_min = utils::toNumeric(minuteInput->getText()); + + record->startDate = TimePointFloorMinutes(std::chrono::system_clock::from_time_t(std::mktime(newTime))); record->endDate = record->startDate; }; @@ -224,5 +232,4 @@ namespace gui minuteInput->setText("00"); } } - } /* namespace gui */ diff --git a/module-apps/application-alarm-clock/widgets/AlarmTimeItem.hpp b/module-apps/application-alarm-clock/widgets/AlarmTimeItem.hpp index 6ebbb3b08bbad2b2d70e0218d208c877166b00f5..c4953cce998938cc4b34f8101be5e09a9d2c2b00 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmTimeItem.hpp +++ b/module-apps/application-alarm-clock/widgets/AlarmTimeItem.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -24,12 +24,11 @@ namespace gui void applyInputCallbacks(); void onInputCallback(gui::Text &textItem); void prepareForTimeMode(); - bool isPm(const std::string &text) const; + [[nodiscard]] bool isPm(const std::string &text) const; void validateHour(); public: - AlarmTimeItem(bool mode24H, - std::function bottomBarTemporaryMode = nullptr, + AlarmTimeItem(std::function bottomBarTemporaryMode = nullptr, std::function bottomBarRestoreFromTemporaryMode = nullptr); }; diff --git a/module-utils/Utils.hpp b/module-utils/Utils.hpp index 82576bf1a2e372111e7fdba28e849ac4698972b7..ae39e2f286f01c0b63837229c83af96231ed93e3 100644 --- a/module-utils/Utils.hpp +++ b/module-utils/Utils.hpp @@ -170,6 +170,17 @@ namespace utils return true; } + static inline int toNumeric(const std::string &text) + { + try { + return std::stoi(text); + } + catch (const std::exception &e) { + LOG_ERROR("toNumeric exception %s", e.what()); + return 0; + } + } + static inline void findAndReplaceAll(std::string &data, const std::vector>> &values, std::function getReplaceString = nullptr)