diff --git a/src/core/Mirai.cpp b/src/core/Mirai.cpp index fa64d38..c76ddd1 100644 --- a/src/core/Mirai.cpp +++ b/src/core/Mirai.cpp @@ -22,16 +22,7 @@ void Mirai::loadFile(const std::string &path) { auto tasksFile = TodoMdFormat::readFile(path); files->push_back(std::move(tasksFile)); - tags.clear(); - for (auto &file : *files) { - for (auto &task : file->getTasks()) { - for (auto &tag : task->getTags()) { - if (!vectorUtils::contains(tags, tag)) { - tags.push_back(tag); - } - } - } - } + reloadTags(); } void Mirai::save() @@ -42,6 +33,7 @@ void Mirai::save() file->setDirty(false); } } + reloadTags(); } void Mirai::addTask(TaskItemData taskItem) @@ -103,4 +95,18 @@ const std::vector &Mirai::getTags() return tags; } +void Mirai::reloadTags() +{ + tags.clear(); + for (auto &file : *files) { + for (auto &task : file->getTasks()) { + for (auto &tag : task->getTags()) { + if (!vectorUtils::contains(tags, tag)) { + tags.push_back(tag); + } + } + } + } +} + } // namespace mirai diff --git a/src/core/Mirai.h b/src/core/Mirai.h index 23c3c5a..c6b1485 100644 --- a/src/core/Mirai.h +++ b/src/core/Mirai.h @@ -36,6 +36,8 @@ class Mirai std::weak_ptr getTasks(); const std::vector &getTags(); + void reloadTags(); + private: // The `TasksFile`s are shared to the views, their lifetime can outlive // this (Mirai) object diff --git a/src/core/TasksView.cpp b/src/core/TasksView.cpp index c0e6944..1077978 100644 --- a/src/core/TasksView.cpp +++ b/src/core/TasksView.cpp @@ -45,6 +45,15 @@ void TasksView::update() tasksToShow.push_back(task.get()); } } + + std::ranges::sort(tasksToShow, [](const TaskItem *t1, const TaskItem *t2) { + if (t1->hasDate() && !t2->hasDate()) { + return true; + } else if (!t1->hasDate() && t2->hasDate()) { + return false; + } + return t1->getDate() < t2->getDate(); + }); } void TasksView::addTagFilter(const std::string &tag)