mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-03 18:23:19 +00:00
Support multiple files
This commit is contained in:
parent
f8f49233dc
commit
689eea07a7
22 changed files with 528 additions and 131 deletions
|
@ -6,7 +6,11 @@
|
|||
|
||||
#include "TasksFile.h"
|
||||
#include "TaskItem.h"
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <ostream>
|
||||
|
||||
namespace mirai
|
||||
{
|
||||
|
@ -14,11 +18,28 @@ namespace mirai
|
|||
TasksFile::TasksFile(TasksFileConstructor params) : name(params.name), path(params.path)
|
||||
{
|
||||
for (const auto &task : params.tasks) {
|
||||
tasks.push_back(std::make_unique<TaskItem>(task));
|
||||
auto taskPtr = std::make_unique<TaskItem>(task);
|
||||
tasks.push_back(std::move(taskPtr));
|
||||
}
|
||||
sortByDate();
|
||||
}
|
||||
|
||||
void TasksFile::onTaskChanged(TaskItem &taskItem)
|
||||
{
|
||||
std::cout << "THIS PTR: " << this << std::endl;
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
void TasksFile::setDirty(bool shouldBeDirty)
|
||||
{
|
||||
isDirty_ = shouldBeDirty;
|
||||
}
|
||||
|
||||
bool TasksFile::isDirty() const
|
||||
{
|
||||
return isDirty_;
|
||||
}
|
||||
|
||||
const std::string &TasksFile::getName() const
|
||||
{
|
||||
return name;
|
||||
|
@ -34,38 +55,47 @@ TasksPtrs &TasksFile::getTasks()
|
|||
return tasks;
|
||||
}
|
||||
|
||||
void TasksFile::addTask(TaskItem taskItem)
|
||||
void TasksFile::addTask(TaskItemData taskItem)
|
||||
{
|
||||
tasks.push_back(std::make_unique<TaskItem>(taskItem));
|
||||
tasks.push_back(std::make_unique<TaskItem>(this, taskItem));
|
||||
setDirty(true);
|
||||
sortByDate();
|
||||
}
|
||||
|
||||
void TasksFile::addTask(std::string text, std::string date)
|
||||
{
|
||||
auto newTask = std::make_unique<TaskItem>(
|
||||
TaskItem{.text = text, .state = TODO, .date = date == "" ? "No date" : date});
|
||||
TaskItem{this, {.text = text, .state = TODO, .date = date == "" ? "No date" : date}}
|
||||
);
|
||||
tasks.push_back(std::move(newTask));
|
||||
sortByDate();
|
||||
}
|
||||
|
||||
void TasksFile::removeTask(const TaskItem *taskToRemove)
|
||||
{
|
||||
tasks.erase(std::remove_if(tasks.begin(), tasks.end(),
|
||||
[&](const std::unique_ptr<TaskItem> &taskInFilter) {
|
||||
return taskInFilter.get() == taskToRemove;
|
||||
}));
|
||||
auto findFunction = [&](const std::unique_ptr<TaskItem> &taskInFilter) {
|
||||
return taskInFilter.get() == taskToRemove;
|
||||
};
|
||||
auto taskToDelete = std::remove_if(tasks.begin(), tasks.end(), findFunction);
|
||||
if (taskToDelete == tasks.end()) {
|
||||
return;
|
||||
}
|
||||
tasks.erase(taskToDelete);
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
void TasksFile::sortByDate()
|
||||
{
|
||||
std::sort(tasks.begin(), tasks.end(),
|
||||
[](const std::unique_ptr<TaskItem> &t1, const std::unique_ptr<TaskItem> &t2) {
|
||||
if (t1->hasDate() && !t2->hasDate()) {
|
||||
return true;
|
||||
} else if (!t1->hasDate() && t2->hasDate()) {
|
||||
return false;
|
||||
}
|
||||
return t1->date < t2->date;
|
||||
});
|
||||
std::sort(
|
||||
tasks.begin(), tasks.end(),
|
||||
[](const std::unique_ptr<TaskItem> &t1, const std::unique_ptr<TaskItem> &t2) {
|
||||
if (t1->hasDate() && !t2->hasDate()) {
|
||||
return true;
|
||||
} else if (!t1->hasDate() && t2->hasDate()) {
|
||||
return false;
|
||||
}
|
||||
return t1->getDate() < t2->getDate();
|
||||
}
|
||||
);
|
||||
}
|
||||
} // namespace mirai
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue