Fix tasks being unscheduled if the day for the task already exists

This commit is contained in:
Vyn 2024-10-16 11:04:30 +02:00
parent dee7a6fa42
commit 3e7c9b150a
6 changed files with 26 additions and 6 deletions

View file

@ -25,6 +25,7 @@ class Task
mirai::TaskState state() const; mirai::TaskState state() const;
bool checked() const; bool checked() const;
bool hasEvent() const; bool hasEvent() const;
bool hasDate() const;
void setTitle(const std::string &newTitle); void setTitle(const std::string &newTitle);
void setDay(const Day &day); void setDay(const Day &day);

View file

@ -128,9 +128,14 @@ std::string MarkdownDataProvider::toMarkdown()
for (const auto &day : days) { for (const auto &day : days) {
auto &date = day.date; auto &date = day.date;
auto tasks = getTasksByDayId(day.id);
auto events = getEventsByDate(date);
if (tasks.size() == 0 && events.size() == 0) {
continue;
}
result += result +=
"## " + std::format("{:02d}-{:02d}-{:02d}", date.year, date.month, date.day) + "\n\n"; "## " + std::format("{:02d}-{:02d}-{:02d}", date.year, date.month, date.day) + "\n\n";
for (auto event : getEventsByDate(date)) { for (auto event : events) {
auto &start = event.startsAt; auto &start = event.startsAt;
auto &end = event.endsAt; auto &end = event.endsAt;
result += "> " + result += "> " +
@ -144,7 +149,7 @@ std::string MarkdownDataProvider::toMarkdown()
} }
result += '\n'; result += '\n';
} }
for (const auto &task : getTasksByDayId(day.id)) { for (const auto &task : tasks) {
result += taskToString(task) + '\n'; result += taskToString(task) + '\n';
} }
result += '\n'; result += '\n';

View file

@ -29,8 +29,8 @@ void Source::createTask(const createTaskParams &task)
auto day = data->getDayByDate(task.date.value()); auto day = data->getDayByDate(task.date.value());
if (!day.has_value() && task.date.has_value()) { if (!day.has_value() && task.date.has_value()) {
day = data->insertDay({.id = generateUniqueId(), .date = task.date.value()}); day = data->insertDay({.id = generateUniqueId(), .date = task.date.value()});
dayId = day->id;
} }
dayId = day->id;
} }
if (task.event.has_value() && task.event->id()) { if (task.event.has_value() && task.event->id()) {

View file

@ -44,6 +44,11 @@ bool Task::hasEvent() const
return task_.eventId.has_value(); return task_.eventId.has_value();
} }
bool Task::hasDate() const
{
return task_.dayId.has_value();
}
void Task::setTitle(const std::string &newTitle) void Task::setTitle(const std::string &newTitle)
{ {
data_->updateTask(id(), {.title = newTitle}); data_->updateTask(id(), {.title = newTitle});

View file

@ -63,12 +63,15 @@ void View::update()
for (auto day : source->getDays()) { for (auto day : source->getDays()) {
// day's tasks // day's tasks
auto sourceTasks = day.tasks() | std::ranges::views::filter([&](const Task &task) { auto sourceTasks = day.tasks() | std::ranges::views::filter([&](const Task &task) {
if (day.date() >= todayDate) {
return true;
}
if (shouldHideCompletedTasks()) { if (shouldHideCompletedTasks()) {
return task.checked() == false; return task.checked() == false;
} }
return true; return true;
}); });
if (std::ranges::distance(sourceTasks) > 0) { if (day.date() >= todayDate || std::ranges::distance(sourceTasks) > 0) {
if (!dates.contains(day.date())) { if (!dates.contains(day.date())) {
dates.insert_or_assign(day.date(), DateView{}); dates.insert_or_assign(day.date(), DateView{});
@ -85,7 +88,7 @@ void View::update()
}).has_value(); }).has_value();
}); });
if (std::ranges::distance(sourceEvents) > 0) { if (day.date() >= todayDate || std::ranges::distance(sourceEvents) > 0) {
if (!dates.contains(day.date())) { if (!dates.contains(day.date())) {
dates.insert_or_assign(day.date(), DateView{}); dates.insert_or_assign(day.date(), DateView{});
} }

View file

@ -96,9 +96,13 @@ void UiState::setupCallbacks()
assert(source); assert(source);
auto task = source->getTaskById(taskId); auto task = source->getTaskById(taskId);
assert(task); assert(task);
if (!task->checked() && !task->hasDate() && !task->hasEvent()) {
task->setDate(mirai::Date(mirai::Date(std::chrono::system_clock::now())));
}
task->setChecked(!task->checked()); task->setChecked(!task->checked());
// task->getState() == mirai::DONE ? task->markAsUndone() : task->markAsDone();
miraiInstance_->save(); miraiInstance_->save();
view_.update();
reloadTasks();
}); });
mainWindow_->global<ui::Backend>().on_source_clicked([&](int index) { mainWindow_->global<ui::Backend>().on_source_clicked([&](int index) {
@ -156,6 +160,8 @@ void UiState::setupCallbacks()
}); });
mainWindow_->global<ui::Backend>().on_create_task([&](ui::NewTaskData newTaskData) { mainWindow_->global<ui::Backend>().on_create_task([&](ui::NewTaskData newTaskData) {
std::cout << "Task date: " << newTaskData.date.year << " " << newTaskData.date.day
<< std::endl;
std::optional<mirai::Date> date = std::nullopt; std::optional<mirai::Date> date = std::nullopt;
if (newTaskData.date.year != 0) { if (newTaskData.date.year != 0) {
date = SlintDateToMiraiDate(newTaskData.date); date = SlintDateToMiraiDate(newTaskData.date);