// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace sys { class Service; } // namespace sys namespace stm { constexpr static auto eventTimerMinSkipInterval = 100ms; CalendarTimeEvents::CalendarTimeEvents(sys::Service *service) : TimeEvents(service) {} bool CalendarTimeEvents::sendNextEventQuery() { TimePoint filterFrom = TimePointNow(); TimePoint filterTill = filterFrom; if (startTP != TIME_POINT_INVALID) { filterFrom = std::min(startTP, filterFrom); filterTill = filterFrom; } return DBServiceAPI::GetQuery(service(), db::Interface::Name::Events, std::make_unique(filterFrom, filterTill)); } uint32_t CalendarTimeEvents::calcToNextEventInterval(std::unique_ptr nextEventQueryResult) { auto firstUpcomingQuery = dynamic_cast(nextEventQueryResult.get()); if (firstUpcomingQuery == nullptr) { return 0; } std::unique_ptr> records = firstUpcomingQuery->getResult(); if (records->size() == 0) { return 0; } eventRecord = records->at(0); startTP = eventRecord.date_from - minutes{eventRecord.reminder}; auto duration = eventRecord.date_from - std::chrono::minutes{eventRecord.reminder} - TimePointNow(); if (duration.count() <= 0) { duration = std::chrono::milliseconds(eventTimerMinSkipInterval); } return std::chrono::duration_cast(duration).count(); } bool CalendarTimeEvents::sendEventFiredQuery() { eventRecord.reminder_fired = TimePointNow(); return DBServiceAPI::GetQuery( service(), db::Interface::Name::Events, std::make_unique(eventRecord)); } void CalendarTimeEvents::invokeEvent() { std::unique_ptr eventData = std::make_unique(); eventData->setDescription(style::window::calendar::name::event_reminder_window); auto event = std::make_shared(eventRecord); eventData->setData(event); app::manager::Controller::switchApplication( service(), app::name_calendar, style::window::calendar::name::event_reminder_window, std::move(eventData)); } } // namespace stm