// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #pragma once #include #include #include #include #include "QuotesSettingsSerializer.hpp" namespace Quotes { using namespace std::chrono; enum class ListUpdateMode { Normal, Forced }; class RandomizedQuoteModel { private: static constexpr auto zeroOffset = 0; static constexpr auto maxLimit = std::numeric_limits::max(); static constexpr auto quotesChangingInterval = duration_cast(24h).count(); app::ApplicationCommon *app = nullptr; std::unique_ptr settings; Database *predefinedQuotesDB = nullptr; Database *customQuotesDB = nullptr; void populateList(std::unique_ptr predefinedQuotesList, std::unique_ptr customQuotesList, ListUpdateMode updateMode = ListUpdateMode::Normal); void shiftIdList(); auto isIdExpired() -> bool; void randomize(IdList &list); std::unique_ptr serializer; std::unique_ptr rngEngine; public: RandomizedQuoteModel(std::unique_ptr settings, Database *predefinedQuotesDB, Database *customQuotesDB); void updateList(ListUpdateMode updateMode); [[nodiscard]] auto getId() -> QuoteID; }; } // namespace Quotes