~aleteoryx/muditaos

ref: f2381600d5ade802e6de3b75d21a3c308e42a534 muditaos/module-db/Interface/EventRecord.hpp -rw-r--r-- 1.9 KiB
f2381600 — Pawel Olejniczak [EGD-7697] Change deafult bt device name to Mudita Pure 4 years 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "Record.hpp"

#include <module-db/Common/Common.hpp>
#include <Tables/Record.hpp>
#include <Tables/EventsTable.hpp>

#include <time/dateCommon.hpp>

#include <utf8/UTF8.hpp>

#include <stdint.h>
#include <string>

struct EventInfo
{
    UTF8 name;
    TimePoint startDate{TIME_POINT_INVALID};
    TimePoint endDate{TIME_POINT_INVALID};
    uint32_t duration{0};
    bool isAllDay{false};

    EventInfo() = default;
    EventInfo(const UTF8 &name, TimePoint startDate, TimePoint endDate, uint32_t duration, bool isAllDay)
        : name{name}, startDate{TimePointFloorMinutes(startDate)}, endDate{TimePointFloorMinutes(endDate)},
          duration{duration}, isAllDay{isAllDay} {};

    auto isValid() const -> bool;
};

struct SingleEventRecord;

struct EventRecord : public Record, public EventInfo
{
    std::string rruleText{""};

    EventRecord() = default;
    EventRecord(uint32_t id,
                const UTF8 &name,
                TimePoint startDate,
                uint32_t duration,
                bool isAllDay,
                const std::string &rruleText);

    virtual ~EventRecord(){};
    explicit EventRecord(EventRecord *record);

    auto generateSingleEvents(TimePoint from, TimePoint to, uint32_t count) -> std::vector<SingleEventRecord>;
    auto getNextSingleEvent(TimePoint from) -> SingleEventRecord;
    auto isValid() const -> bool;

    virtual std::shared_ptr<EventRecord> getCopy();
};

struct SingleEventRecord : public Record, public EventInfo
{
    std::shared_ptr<EventRecord> parent;

    virtual ~SingleEventRecord() = default;

    SingleEventRecord() = default;
    SingleEventRecord(std::shared_ptr<EventRecord> parent, TimePoint startDate, TimePoint endDate)
        : EventInfo{parent->name, startDate, endDate, parent->duration, parent->isAllDay}, parent{parent} {};
};