/* * 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 "utils.h" #include #include #include #include #include #include namespace mirai { void Mirai::loadFile(const std::string &path) { auto tasksFile = TodoMdFormat::readFile(path); files->push_back(std::move(tasksFile)); reloadTags(); } void Mirai::save() { for (auto &file : *files) { if (file->isDirty()) { TodoMdFormat::writeFile(*file); file->setDirty(false); } } reloadTags(); } void Mirai::addTask(TaskItemData taskItem) { (*files)[0]->addTask(taskItem); for (auto &view : views) { view->update(); } } 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); for (auto &view : views) { view->update(); } } void Mirai::removeTask(const TaskItem *taskItem) { for (auto &file : *files) { file->removeTask(taskItem); } for (auto &view : views) { view->update(); } } std::vector> &Mirai::getFiles() { return *files.get(); } 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()); } std::weak_ptr Mirai::getTasks() { auto view = std::make_shared(files); views.push_back(view); return view; } 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