From eda92600a7df852e18bdb44388966248a4af3c77 Mon Sep 17 00:00:00 2001 From: Maciej Gibowicz Date: Mon, 10 Feb 2025 08:47:13 +0100 Subject: [PATCH] [BH-2095] Add quote interval setting Modifying the time after which new quotes are displayed on the Harmony screen. --- module-services/service-db/DBServiceAPI.cpp | 6 ++++ .../agents/settings/SystemSettings.hpp | 1 + .../include/service-db/DBServiceAPI.hpp | 1 + .../include/service-db/QuotesMessages.hpp | 13 ++++++++ .../include/endpoints/JsonKeyNames.hpp | 2 +- .../services/db/agents/QuotesAgent.cpp | 18 +++++++++++ .../services/db/agents/QuotesAgent.hpp | 1 + .../services/db/agents/ShuffleQuoteModel.cpp | 30 +++++++++++++++---- .../services/db/agents/ShuffleQuoteModel.hpp | 1 + .../b6dd0dff_Add_quote_interval_setting/.meta | 6 ++++ .../down.sql | 10 +++++++ .../up.sql | 11 +++++++ .../desktop/endpoints/quotes/QuotesHelper.cpp | 2 +- test/custom_quotes.py | 2 +- 14 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 products/BellHybrid/services/db/databases/migration/settings_bell/current/b6dd0dff_Add_quote_interval_setting/.meta create mode 100644 products/BellHybrid/services/db/databases/migration/settings_bell/current/b6dd0dff_Add_quote_interval_setting/down.sql create mode 100644 products/BellHybrid/services/db/databases/migration/settings_bell/current/b6dd0dff_Add_quote_interval_setting/up.sql diff --git a/module-services/service-db/DBServiceAPI.cpp b/module-services/service-db/DBServiceAPI.cpp index 38dbc1d6d2fc7e467c63bc5e237f0a59be8ee9e2..bf83bbf7c7066baba8c17648cf83effcf558edcf 100644 --- a/module-services/service-db/DBServiceAPI.cpp +++ b/module-services/service-db/DBServiceAPI.cpp @@ -356,6 +356,12 @@ void DBServiceAPI::QuotesGroupChanged(sys::Service *serv, const std::string &gro DBServiceAPI::GetQuery(serv, db::Interface::Name::Quotes, std::move(query)); } +void DBServiceAPI::QuotesIntervalChanged(sys::Service *serv, const std::string &interval) +{ + auto query = std::make_unique(interval); + DBServiceAPI::GetQuery(serv, db::Interface::Name::Quotes, std::move(query)); +} + auto DBServiceAPI::hasContactSameNumbers(sys::Service *serv, const ContactRecord &rec) -> bool { std::shared_ptr msg = diff --git a/module-services/service-db/agents/settings/SystemSettings.hpp b/module-services/service-db/agents/settings/SystemSettings.hpp index d942c5ba9360ef75fea67115daf470ad7cf45c35..8cd6143e281cb4e5a6c232ca82f54e405c5dca77 100644 --- a/module-services/service-db/agents/settings/SystemSettings.hpp +++ b/module-services/service-db/agents/settings/SystemSettings.hpp @@ -82,6 +82,7 @@ namespace settings inline constexpr auto randomQuotesList = "quotes_random_list"; inline constexpr auto randomQuoteIDUpdateTime = "quotes_random_id_update_time"; inline constexpr auto selectedGroup = "quotes_group"; + inline constexpr auto selectedInterval = "quotes_interval"; } // namespace Quotes namespace Display diff --git a/module-services/service-db/include/service-db/DBServiceAPI.hpp b/module-services/service-db/include/service-db/DBServiceAPI.hpp index 00fbe0d3172d864502106e671975c99c1febc995..016a859efa7fb47cfc71988715dd3868038cc970 100644 --- a/module-services/service-db/include/service-db/DBServiceAPI.hpp +++ b/module-services/service-db/include/service-db/DBServiceAPI.hpp @@ -139,4 +139,5 @@ class DBServiceAPI std::unique_ptr &&listener); static bool QuotesDeleteEntry(sys::Service *serv, std::uint32_t id, std::unique_ptr &&listener); static void QuotesGroupChanged(sys::Service *serv, const std::string &group); + static void QuotesIntervalChanged(sys::Service *serv, const std::string &interval); }; diff --git a/module-services/service-db/include/service-db/QuotesMessages.hpp b/module-services/service-db/include/service-db/QuotesMessages.hpp index dbbcd5e7e74436a6ece2442b96af9b315e75ae0a..c5991b1bf3d5a52c87b5783b5fd5a910523fe460 100644 --- a/module-services/service-db/include/service-db/QuotesMessages.hpp +++ b/module-services/service-db/include/service-db/QuotesMessages.hpp @@ -432,6 +432,19 @@ namespace Quotes } }; + class InformIntervalChanged : public db::Query + { + public: + explicit InformIntervalChanged(const std::string &interval) : Query(Query::Type::Read), interval(interval) + {} + const std::string interval; + + auto debugInfo() const -> std::string + { + return "InformIntervalChanged"; + } + }; + class WriteQuoteRequest : public db::Query { public: diff --git a/module-services/service-desktop/endpoints/include/endpoints/JsonKeyNames.hpp b/module-services/service-desktop/endpoints/include/endpoints/JsonKeyNames.hpp index 5947e191352e3d979f72cc329de529d899e18ff7..a9ad3edbf3a8cb129d4eaa0a426658bf4c1dc1c7 100644 --- a/module-services/service-desktop/endpoints/include/endpoints/JsonKeyNames.hpp +++ b/module-services/service-desktop/endpoints/include/endpoints/JsonKeyNames.hpp @@ -130,7 +130,7 @@ namespace sdesktop::endpoints::json inline constexpr auto author = "author"; inline constexpr auto group = "group"; inline constexpr auto interval = "interval"; - inline constexpr auto quoteID = "quoteID"; + inline constexpr auto quoteID = "quoteID"; } // namespace quotes } // namespace sdesktop::endpoints::json diff --git a/products/BellHybrid/services/db/agents/QuotesAgent.cpp b/products/BellHybrid/services/db/agents/QuotesAgent.cpp index 77074b8738c967e1ec89adb57c757786b9b137b1..aef3256101f37656b6e52b1cbb961631b581fafd 100644 --- a/products/BellHybrid/services/db/agents/QuotesAgent.cpp +++ b/products/BellHybrid/services/db/agents/QuotesAgent.cpp @@ -36,6 +36,9 @@ namespace Quotes else if (typeid(*query) == typeid(Messages::InformGroupChanged)) { return handleGroupChanged(query); } + else if (typeid(*query) == typeid(Messages::InformIntervalChanged)) { + return handleIntervalChanged(query); + } return nullptr; } @@ -149,4 +152,19 @@ namespace Quotes shuffleQuoteModel.updateList(ListUpdateMode::Forced); return std::make_unique(true); } + + auto QuotesAgent::handleIntervalChanged(std::shared_ptr query) -> std::unique_ptr + { + const auto request = std::dynamic_pointer_cast(query); + if (request == nullptr) { + return std::make_unique(false); + } + if (!utils::is_number(request->interval) && request->interval != atMidnight) { + return std::make_unique(false); + } + + settings->setValue(settings::Quotes::selectedInterval, request->interval, settings::SettingsScope::Global); + shuffleQuoteModel.updateList(ListUpdateMode::Forced); + return std::make_unique(true); + } } // namespace Quotes diff --git a/products/BellHybrid/services/db/agents/QuotesAgent.hpp b/products/BellHybrid/services/db/agents/QuotesAgent.hpp index 754f596726a92256157ef5d6ad296bd525cf9687..073c1d3f93b820793443789bc88831f8456775f8 100644 --- a/products/BellHybrid/services/db/agents/QuotesAgent.hpp +++ b/products/BellHybrid/services/db/agents/QuotesAgent.hpp @@ -34,5 +34,6 @@ namespace Quotes auto handleEditEntry(std::shared_ptr query) -> std::unique_ptr; auto handleDeleteEntry(std::shared_ptr query) -> std::unique_ptr; auto handleGroupChanged(std::shared_ptr query) -> std::unique_ptr; + auto handleIntervalChanged(std::shared_ptr query) -> std::unique_ptr; }; } // namespace Quotes diff --git a/products/BellHybrid/services/db/agents/ShuffleQuoteModel.cpp b/products/BellHybrid/services/db/agents/ShuffleQuoteModel.cpp index badec75f57a922ef5215c8107df78e84ba372e0c..3bb6262a389ad9656a2e8e7c2b4648a2be82ec6f 100644 --- a/products/BellHybrid/services/db/agents/ShuffleQuoteModel.cpp +++ b/products/BellHybrid/services/db/agents/ShuffleQuoteModel.cpp @@ -7,6 +7,7 @@ #include #include #include +#include