From e2cd994026e67506a0caaf93e761f15faf099894 Mon Sep 17 00:00:00 2001 From: Vyn Date: Wed, 6 Nov 2024 18:38:42 +0100 Subject: [PATCH] Add current time indicator of the current day on the Calendar --- .../mirai-core/include/mirai-core/DateTime.h | 3 +++ external/mirai-core/src/DateTime.cpp | 20 +++++++++++++++---- .../src/MarkdownDataProvider.Parser.cpp | 7 ++++--- external/mirai-core/src/View.cpp | 8 ++++++++ src/components/Calendar.slint | 9 +++++++++ src/components/EventGroup.slint | 1 + src/shared/Utils.cpp | 9 ++++++++- src/shared/Utils.slint | 3 +++ src/windows/AppWindow/views/TasksView.slint | 2 ++ 9 files changed, 54 insertions(+), 8 deletions(-) diff --git a/external/mirai-core/include/mirai-core/DateTime.h b/external/mirai-core/include/mirai-core/DateTime.h index e617b66..0984f3a 100644 --- a/external/mirai-core/include/mirai-core/DateTime.h +++ b/external/mirai-core/include/mirai-core/DateTime.h @@ -48,6 +48,9 @@ struct Date { struct Time { + explicit Time(int hour, int minute); + explicit Time(std::chrono::time_point tp); + bool operator==(const Time &other) const; bool operator<(const Time &other) const; bool operator>(const Time &other) const; diff --git a/external/mirai-core/src/DateTime.cpp b/external/mirai-core/src/DateTime.cpp index bd63249..2f3abe8 100644 --- a/external/mirai-core/src/DateTime.cpp +++ b/external/mirai-core/src/DateTime.cpp @@ -6,6 +6,7 @@ #include "DateTime.h" #include +#include #include #include #include @@ -54,10 +55,6 @@ Date::Date(std::chrono::year_month_day chronoDate) day = static_cast(chronoDate.day()); } -int year; -unsigned month; -unsigned day; - bool Date::operator==(const Date &other) const { return other.year == year && other.month == month && other.day == day; @@ -92,6 +89,21 @@ bool Date::operator<=(const Date &other) const return (*this < other) || (*this == other); } +Time::Time(int hour, int minute) : hour(hour), minute(minute) +{ +} + +Time::Time(std::chrono::time_point tp) +{ + auto localTp = std::chrono::zoned_time{std::chrono::current_zone(), tp}.get_local_time(); + auto chronoDate = std::chrono::floor(localTp); + auto chronoTime = + std::chrono::hh_mm_ss{std::chrono::duration_cast(localTp - chronoDate) + }; + hour = static_cast(chronoTime.hours().count()); + minute = static_cast(chronoTime.minutes().count()); +} + bool Time::operator==(const Time &other) const { return other.hour == hour && other.minute == minute; diff --git a/external/mirai-core/src/MarkdownDataProvider.Parser.cpp b/external/mirai-core/src/MarkdownDataProvider.Parser.cpp index 79603d8..e1bd7d4 100644 --- a/external/mirai-core/src/MarkdownDataProvider.Parser.cpp +++ b/external/mirai-core/src/MarkdownDataProvider.Parser.cpp @@ -61,9 +61,10 @@ Time stringToTime(const std::string &str) if (str[2] != 'h') { throw std::runtime_error("Malformated time range"); } - Time time{}; - std::from_chars(str.data(), str.data() + 2, time.hour); - std::from_chars(str.data() + 3, str.data() + 5, time.minute); + int hour, minute; + std::from_chars(str.data(), str.data() + 2, hour); + std::from_chars(str.data() + 3, str.data() + 5, minute); + Time time{hour, minute}; return time; } diff --git a/external/mirai-core/src/View.cpp b/external/mirai-core/src/View.cpp index 765305a..30471d3 100644 --- a/external/mirai-core/src/View.cpp +++ b/external/mirai-core/src/View.cpp @@ -6,6 +6,7 @@ #include "View.h" #include "utils.h" +#include #include #include #include @@ -104,6 +105,13 @@ void View::update() auto tasks = source->getUnscheduledTasks(); unscheduledTasks_.insert(unscheduledTasks_.end(), tasks.begin(), tasks.end()); } + + for (auto &date : dates) { + auto &events = date.second.events; + std::sort(events.begin(), events.end(), [](const Event &a, const Event &b) { + return a.startsAt() < b.startsAt(); + }); + } } void View::removeSources() diff --git a/src/components/Calendar.slint b/src/components/Calendar.slint index 10a2368..bd3f7a5 100644 --- a/src/components/Calendar.slint +++ b/src/components/Calendar.slint @@ -22,6 +22,8 @@ export enum CalendarDateDisplayFormat { export component Calendar inherits Rectangle { in property<[CalendarDay]> days; in property format; + in property current-date; + in property