mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-03 01:33:19 +00:00
[WIP] Fix everything
This commit is contained in:
parent
15bd0f58a7
commit
686d86df6f
10 changed files with 212 additions and 125 deletions
|
@ -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 ¤t_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 ¤t_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';
|
||||
}
|
||||
|
|
42
external/mirai-core/src/MarkdownDataProvider.cpp
vendored
42
external/mirai-core/src/MarkdownDataProvider.cpp
vendored
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue