Change 'File' concept to a 'Resource' abstract concept

This commit is contained in:
Vyn 2024-05-09 14:39:10 +02:00
parent 7eb54cddce
commit ca34562a1c
23 changed files with 447 additions and 351 deletions

View file

@ -6,7 +6,6 @@
#include "Mirai.h"
#include "TaskItem.h"
#include "core/TasksFile.h"
#include "cpp-utils/debug.h"
#include "utils.h"
#include <algorithm>
@ -19,70 +18,53 @@
namespace mirai
{
void Mirai::loadFile(const std::string &path)
void Mirai::loadResource(std::unique_ptr<BaseResource> &&resource)
{
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;
}
}
resource->load();
resources.push_back(std::move(resource));
reloadTags();
};
void Mirai::unloadAllFiles()
void Mirai::unloadAllResources()
{
files.clear();
resources.clear();
}
void Mirai::save()
{
for (auto &file : files) {
if (file->isDirty()) {
file->sortByDate();
TodoMdFormat::writeFile(*file);
file->setDirty(false);
for (auto &resource : resources) {
if (resource->isDirty()) {
resource->save();
resource->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);
for (auto &resource : resources) {
resource->removeTask(taskItem);
}
}
std::vector<std::unique_ptr<TasksFile>> &Mirai::getFiles()
std::vector<std::unique_ptr<BaseResource>> &Mirai::getResources()
{
return files;
return resources;
}
std::optional<std::reference_wrapper<TasksFile>> Mirai::getFileByPath(const std::string &path)
std::optional<std::reference_wrapper<BaseResource>> Mirai::getResourceByName(const std::string &name
)
{
auto fileIterator = std::ranges::find_if(files, [&](const std::unique_ptr<TasksFile> &file) {
return file->getPath() == path;
});
auto resourceIterator =
std::ranges::find_if(resources, [&](const std::unique_ptr<BaseResource> &resource) {
return resource->getName() == name;
});
if (fileIterator == files.end()) {
if (resourceIterator == resources.end()) {
return std::nullopt;
}
return *(fileIterator->get());
return *(resourceIterator->get());
}
const std::vector<std::string> &Mirai::getTags()
@ -94,8 +76,8 @@ void Mirai::reloadTags()
{
cpputils::debug::Timer reloadingTagsDuration;
tags.clear();
for (auto &file : files) {
for (auto &task : file->getTasks()) {
for (auto &resource : resources) {
for (auto &task : resource->getTasks()) {
for (auto &tag : task->getTags()) {
if (!vectorUtils::contains(tags, tag)) {
tags.push_back(tag);