// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "Table.hpp" #include "Record.hpp" #include #include #include #include struct EventsTableRow : public Record { std::string UID; std::string title; TimePoint date_from = TIME_POINT_INVALID; TimePoint date_till = TIME_POINT_INVALID; uint32_t reminder = 0; uint32_t repeat = 0; TimePoint reminder_fired = TIME_POINT_INVALID; std::string provider_type; std::string provider_id; std::string provider_iCalUid; }; enum class EventsTableFields { date_from, date_till }; class EventsTable : public Table { public: EventsTable(Database *db); ~EventsTable() override = default; bool create() override final; bool add(EventsTableRow entry) override final; bool addDaily(EventsTableRow entry); bool addWeekly(EventsTableRow entry); bool addTwoWeeks(EventsTableRow entry); bool addMonth(EventsTableRow entry); bool addYear(EventsTableRow entry); std::vector parseOptions(uint32_t repeatOptionValue); bool addCustom(EventsTableRow entry); bool removeById(uint32_t id) override final; bool removeByUID(const std::string &UID); bool removeByField(EventsTableFields field, const char *str) override final; bool update(EventsTableRow entry) override final; bool updateByUID(EventsTableRow entry); bool drop(); EventsTableRow getByUID(const std::string &UID); EventsTableRow getById(uint32_t id) override final; std::vector selectByDatePeriod(TimePoint filter_from, TimePoint filter_till, uint32_t offset, uint32_t limit); uint32_t count() override final; uint32_t countFromFilter(TimePoint from, TimePoint till); uint32_t countByFieldId(const char *field, uint32_t id) override final; std::vector getLimitOffset(uint32_t offset, uint32_t limit) override final; std::vector getLimitOffsetByField(uint32_t offset, uint32_t limit, EventsTableFields field, const char *str) override final; std::vector getLimitOffsetByDate(uint32_t offset, uint32_t limit); std::vector SelectFirstUpcoming(TimePoint filter_from, TimePoint filter_till); private: const char *createTableQuery = "CREATE TABLE IF NOT EXISTS events(" "_id INTEGER PRIMARY KEY AUTOINCREMENT," "uid TEXT," "title TEXT," "date_from DATETIME," "date_till DATETIME," "reminder INTEGER," "repeat INTEGER," "reminder_fired DATETIME," "provider_type TEXT," "provider_id TEXT," "provider_iCalUid TEXT," "UNIQUE (title, date_from, date_till));"; };