~aleteoryx/muditaos

ref: eda92600a7df852e18bdb44388966248a4af3c77 muditaos/module-services/service-db/agents/quotes/RandomizedQuoteModel.hpp -rw-r--r-- 1.7 KiB
eda92600 — Maciej Gibowicz [BH-2095] Add quote interval setting 1 year, 19 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 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 <AsyncTask.hpp>
#include <ApplicationCommon.hpp>
#include <service-db/Settings.hpp>
#include <service-db/QuotesMessages.hpp>
#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<unsigned>::max();
        static constexpr auto quotesChangingInterval = duration_cast<seconds>(24h).count();

        app::ApplicationCommon *app = nullptr;
        std::unique_ptr<settings::Settings> settings;
        Database *predefinedQuotesDB = nullptr;
        Database *customQuotesDB     = nullptr;
        void populateList(std::unique_ptr<QuotesList> predefinedQuotesList,
                          std::unique_ptr<QuotesList> customQuotesList,
                          ListUpdateMode updateMode = ListUpdateMode::Normal);
        void shiftIdList();
        auto isIdExpired() -> bool;
        void randomize(IdList &list);
        std::unique_ptr<QuotesSettingsSerializer> serializer;
        std::unique_ptr<std::mt19937> rngEngine;

      public:
        RandomizedQuoteModel(std::unique_ptr<settings::Settings> settings,
                             Database *predefinedQuotesDB,
                             Database *customQuotesDB);
        void updateList(ListUpdateMode updateMode);
        [[nodiscard]] auto getId() -> QuoteID;
    };

} // namespace Quotes