/* * 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 "core/TasksFile.h" #include "cpp-utils/debug.h" #include "utils.h" #include #include #include #include #include #include namespace mirai { void Mirai::loadFile(const std::string &path) { try { auto tasksFile = TodoMdFormat::readFile(path); files.push_back(std::move(tasksFile)); reloadTags(); } catch (std::exception &e) { std::cout << "Cannot load file " << path << " : " << e.what() << std::endl; } } void Mirai::unloadAllFiles() { files.clear(); } void Mirai::save() { for (auto &file : files) { if (file->isDirty()) { file->sortByDate(); TodoMdFormat::writeFile(*file); file->setDirty(false); } } reloadTags(); } void Mirai::addTask(TaskItemData taskItem) { files[0]->addTask(taskItem); } void Mirai::addTask(std::string text, std::string date) { /*std::time_t t = std::time(nullptr);*/ /*std::tm tm = *std::localtime(&t);*/ /*std::stringstream ssCreationDate;*/ /*ssCreationDate << std::put_time(&tm, "%Y-%m-%d");*/ files[0]->addTask(text, date); } void Mirai::removeTask(const TaskItem *taskItem) { for (auto &file : files) { file->removeTask(taskItem); } } std::vector> &Mirai::getFiles() { return files; } std::optional> Mirai::getFileByPath(const std::string &path) { auto fileIterator = std::ranges::find_if(files, [&](const std::unique_ptr &file) { return file->getPath() == path; }); if (fileIterator == files.end()) { return std::nullopt; } return *(fileIterator->get()); } const std::vector &Mirai::getTags() { return tags; } void Mirai::reloadTags() { cpputils::debug::Timer reloadingTagsDuration; 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); } } } } reloadingTagsDuration.printTimeElapsed("ReloadingTags"); } } // namespace mirai