/* * Mirai. Copyright (C) 2024 Vyn * This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only) * The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt */ #include "Mirai.h" #include "TaskItem.h" #include "cpp-utils/debug.h" #include "utils.h" #include #include #include #include #include #include namespace mirai { void Mirai::loadResource(std::unique_ptr &&resource) { resource->load(); resources.push_back(std::move(resource)); reloadTags(); }; void Mirai::unloadAllResources() { resources.clear(); } void Mirai::save() { for (auto &resource : resources) { if (resource->isDirty()) { resource->save(); resource->setDirty(false); } } reloadTags(); } void Mirai::removeTask(const TaskItem *taskItem) { for (auto &resource : resources) { resource->removeTask(taskItem); } } std::vector> &Mirai::getResources() { return resources; } std::optional> Mirai::getResourceByName(const std::string &name ) { auto resourceIterator = std::ranges::find_if(resources, [&](const std::unique_ptr &resource) { return resource->getName() == name; }); if (resourceIterator == resources.end()) { return std::nullopt; } return *(resourceIterator->get()); } const std::vector &Mirai::getTags() { return tags; } void Mirai::reloadTags() { cpputils::debug::Timer reloadingTagsDuration; tags.clear(); for (auto &resource : resources) { for (auto &task : resource->getTasks()) { for (auto &tag : task->getTags()) { if (!vectorUtils::contains(tags, tag)) { tags.push_back(tag); } } } } reloadingTagsDuration.printTimeElapsed("ReloadingTags"); } } // namespace mirai