diff --git a/external/mirai-core/src/markdown_data_provider.parser.cpp b/external/mirai-core/src/markdown_data_provider.parser.cpp index 76cd36c..c8f62d4 100644 --- a/external/mirai-core/src/markdown_data_provider.parser.cpp +++ b/external/mirai-core/src/markdown_data_provider.parser.cpp @@ -110,18 +110,20 @@ std::string markdown_data_provider::to_markdown() int next_task_index = 0; int next_event_index = 0; - std::sort(_data.tasks.begin(), _data.tasks.end(), [](const task_data &t1, const task_data &t2) { - if (!t1.due_date.has_value() && !t2.due_date.has_value()) { - return false; + std::stable_sort( + _data.tasks.begin(), _data.tasks.end(), [](const task_data &t1, const task_data &t2) { + if (!t1.due_date.has_value() && !t2.due_date.has_value()) { + return false; + } + if (t1.due_date.has_value() && !t2.due_date.has_value()) { + return true; + } + if (!t1.due_date.has_value() && t2.due_date.has_value()) { + return false; + } + return t1.due_date < t2.due_date; } - if (t1.due_date.has_value() && !t2.due_date.has_value()) { - return true; - } - if (!t1.due_date.has_value() && t2.due_date.has_value()) { - return false; - } - return t1.due_date < t2.due_date; - }); + ); while (next_event_index < _data.events.size() || next_task_index < _data.tasks.size()) { std::optional current_date = std::nullopt; diff --git a/external/mirai-core/src/task.cpp b/external/mirai-core/src/task.cpp index c095acd..26a1ad1 100644 --- a/external/mirai-core/src/task.cpp +++ b/external/mirai-core/src/task.cpp @@ -58,14 +58,13 @@ void task::set_title(const std::string &newTitle) void task::set_date(const date &date) { - auto emptyEventId = std::optional>(std::optional(std::nullopt)); data_->update_task(id(), {.due_date = date}); } void task::unschedule() { - auto emptyId = std::optional>(std::optional(std::nullopt)); - data_->update_task(id(), {.due_date = std::nullopt}); + const std::optional new_date = std::nullopt; + data_->update_task(id(), {.due_date = new_date}); } void task::set_checked(bool checked) diff --git a/src/app_logic.cpp b/src/app_logic.cpp index 11be666..13a689e 100644 --- a/src/app_logic.cpp +++ b/src/app_logic.cpp @@ -190,7 +190,11 @@ void app_logic::setup_callbacks() const mirai::date &date = slint_date_to_mirai_date(newTaskData.date); // const auto dayOpt = source->get_day_by_date(date); task->set_title(std::string(newTaskData.title)); - task->set_date(slint_date_to_mirai_date(newTaskData.date)); + if (newTaskData.date.day == 0) { + task->unschedule(); + } else { + task->set_date(slint_date_to_mirai_date(newTaskData.date)); + } _mirai_core->save(); update_views(); @@ -391,18 +395,20 @@ get_all_tasks_from_sources(std::vector> &sources) const auto &tasks = source->get_tasks(); all_tasks.insert(all_tasks.end(), tasks.begin(), tasks.end()); } - std::sort(all_tasks.begin(), all_tasks.end(), [](const mirai::task &t1, const mirai::task &t2) { - if (!t1.has_due_date() && !t2.has_due_date()) { - return false; + std::stable_sort( + all_tasks.begin(), all_tasks.end(), [](const mirai::task &t1, const mirai::task &t2) { + if (!t1.has_due_date() && !t2.has_due_date()) { + return false; + } + if (t1.has_due_date() && !t2.has_due_date()) { + return true; + } + if (!t1.has_due_date() && t2.has_due_date()) { + return false; + } + return t1.due_date() < t2.due_date(); } - if (t1.has_due_date() && !t2.has_due_date()) { - return true; - } - if (!t1.has_due_date() && t2.has_due_date()) { - return false; - } - return t1.due_date() < t2.due_date(); - }); + ); return all_tasks; }