[WIP] Fix everything

This commit is contained in:
Vyn 2025-06-30 20:26:54 +02:00
parent 15bd0f58a7
commit 686d86df6f
Signed by: vyn
GPG key ID: E1B2BE34E7A971E7
10 changed files with 212 additions and 125 deletions

View file

@ -5,6 +5,7 @@
*/
#include "MarkdownDataProvider.h"
#include "DataProvider.h"
#include "cpp-utils/debug.h"
#include "utils.h"
#include <optional>
@ -109,6 +110,19 @@ std::string markdown_data_provider::to_markdown()
int next_task_index = 0;
int next_event_index = 0;
std::sort(_data.tasks.begin(), _data.tasks.end(), [](const task_data &t1, const task_data &t2) {
if (!t1.due_date.has_value() && !t2.due_date.has_value()) {
return false;
}
if (t1.due_date.has_value() && !t2.due_date.has_value()) {
return true;
}
if (!t1.due_date.has_value() && t2.due_date.has_value()) {
return false;
}
return t1.due_date < t2.due_date;
});
while (next_event_index < _data.events.size() || next_task_index < _data.tasks.size()) {
std::optional<Date> current_date = std::nullopt;
// First we find the lowest date between the events and the tasks
@ -117,7 +131,9 @@ std::string markdown_data_provider::to_markdown()
}
if (_data.tasks.size() > 0 && next_task_index < _data.tasks.size()) {
auto &task = _data.tasks.at(next_task_index);
if (task.due_date.has_value() && task.due_date < current_date.value()) {
if ((task.due_date.has_value() && current_date.has_value()
&& task.due_date < current_date)
|| !current_date.has_value()) {
current_date = _data.tasks.at(next_task_index).due_date;
}
}
@ -132,12 +148,13 @@ std::string markdown_data_provider::to_markdown()
} else {
result += "## Unscheduled\n\n";
}
bool should_add_newline_before_tasks = false;
while (next_event_index < _data.events.size()) {
auto &current_event = _data.events.at(next_event_index);
if (current_event.date != current_date) {
break;
}
should_add_newline_before_tasks = true;
auto &start = current_event.starts_at;
auto &end = current_event.ends_at;
result += "> "
@ -147,16 +164,19 @@ std::string markdown_data_provider::to_markdown()
)
+ "\n";
next_event_index++;
current_event = _data.events.at(next_event_index);
}
if (should_add_newline_before_tasks) {
result += "\n";
}
while (next_task_index < _data.tasks.size()) {
auto &current_task = _data.tasks.at(next_task_index);
if (current_task.due_date != current_date) {
break;
}
taskToString(current_task);
next_event_index++;
current_task = _data.tasks.at(next_task_index);
result += taskToString(current_task) + "\n";
next_task_index++;
}
result += '\n';
}

View file

@ -30,13 +30,13 @@ std::string markdown_data_provider::name() const
void markdown_data_provider::save()
{
const std::string content = to_markdown();
std::ofstream file(_file_path);
if (!file.is_open()) {
throw std::runtime_error("can't create " + _file_path);
}
const std::string content = to_markdown();
file << content;
file.close();
set_dirty(false);
@ -67,9 +67,8 @@ task_data markdown_data_provider::insert_task(const task_data &taskData)
void markdown_data_provider::update_task(int taskId, updatable_task_data updateData)
{
auto taskData = ptrFindFirst(_data.tasks, [&](const task_data &task) {
return task.id == taskId;
});
auto taskData =
ptrFindFirst(_data.tasks, [&](const task_data &task) { return task.id == taskId; });
assert(taskData != nullptr); // Shouldn't be possible
if (updateData.title.has_value()) {
taskData->title = updateData.title.value();
@ -85,23 +84,17 @@ void markdown_data_provider::update_task(int taskId, updatable_task_data updateD
std::optional<task_data> markdown_data_provider::get_task_by_id(int taskId)
{
return findFirst(_data.tasks, [&](const task_data &task) {
return task.id == taskId;
});
return findFirst(_data.tasks, [&](const task_data &task) { return task.id == taskId; });
}
std::vector<task_data> markdown_data_provider::get_tasks_without_date()
{
return findAll(_data.tasks, [](const task_data &t) {
return t.due_date == std::nullopt;
});
return findAll(_data.tasks, [](const task_data &t) { return t.due_date == std::nullopt; });
}
std::vector<task_data> markdown_data_provider::get_tasks_by_date(Date date)
{
return findAll(_data.tasks, [&](const task_data &t) {
return t.due_date == date;
});
return findAll(_data.tasks, [&](const task_data &t) { return t.due_date == date; });
}
std::vector<task_data> markdown_data_provider::get_tasks()
@ -114,9 +107,7 @@ void markdown_data_provider::remove_task_by_id(int taskId)
_data.tasks.erase(
std::remove_if(
_data.tasks.begin(), _data.tasks.end(),
[&](const task_data &task) {
return task.id == taskId;
}
[&](const task_data &task) { return task.id == taskId; }
),
_data.tasks.end()
);
@ -132,9 +123,8 @@ event_data markdown_data_provider::insertEvent(const event_data &eventData)
void markdown_data_provider::update_event(int eventId, updatable_event_data updateData)
{
auto eventData = ptrFindFirst(_data.events, [&](const event_data &event) {
return event.id == eventId;
});
auto eventData =
ptrFindFirst(_data.events, [&](const event_data &event) { return event.id == eventId; });
assert(eventData != nullptr); // Shouldn't be possible
if (updateData.title.has_value()) {
eventData->title = updateData.title.value();
@ -156,9 +146,7 @@ void markdown_data_provider::remove_event_by_id(int eventId)
_data.events.erase(
std::remove_if(
_data.events.begin(), _data.events.end(),
[&](const event_data &event) {
return event.id == eventId;
}
[&](const event_data &event) { return event.id == eventId; }
),
_data.events.end()
);
@ -167,16 +155,12 @@ void markdown_data_provider::remove_event_by_id(int eventId)
std::optional<event_data> markdown_data_provider::get_event_by_id(int eventId)
{
return findFirst(_data.events, [&](const event_data &event) {
return event.id == eventId;
});
return findFirst(_data.events, [&](const event_data &event) { return event.id == eventId; });
}
std::vector<event_data> markdown_data_provider::get_events_by_date(Date date)
{
return findAll(_data.events, [&](const event_data &event) {
return event.date == date;
});
return findAll(_data.events, [&](const event_data &event) { return event.date == date; });
}
std::vector<event_data> markdown_data_provider::get_events()