diff --git a/external/mirai-core/include/mirai-core/Task.h b/external/mirai-core/include/mirai-core/Task.h index 77bce0a..acc7aac 100644 --- a/external/mirai-core/include/mirai-core/Task.h +++ b/external/mirai-core/include/mirai-core/Task.h @@ -25,6 +25,7 @@ class Task mirai::TaskState state() const; bool checked() const; bool hasEvent() const; + bool hasDate() const; void setTitle(const std::string &newTitle); void setDay(const Day &day); diff --git a/external/mirai-core/src/MarkdownDataProvider.Parser.cpp b/external/mirai-core/src/MarkdownDataProvider.Parser.cpp index 710470a..cfdeda9 100644 --- a/external/mirai-core/src/MarkdownDataProvider.Parser.cpp +++ b/external/mirai-core/src/MarkdownDataProvider.Parser.cpp @@ -128,9 +128,14 @@ std::string MarkdownDataProvider::toMarkdown() for (const auto &day : days) { auto &date = day.date; + auto tasks = getTasksByDayId(day.id); + auto events = getEventsByDate(date); + if (tasks.size() == 0 && events.size() == 0) { + continue; + } result += "## " + 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 &end = event.endsAt; result += "> " + @@ -144,7 +149,7 @@ std::string MarkdownDataProvider::toMarkdown() } result += '\n'; } - for (const auto &task : getTasksByDayId(day.id)) { + for (const auto &task : tasks) { result += taskToString(task) + '\n'; } result += '\n'; diff --git a/external/mirai-core/src/Source.cpp b/external/mirai-core/src/Source.cpp index 524fd29..75f48d2 100644 --- a/external/mirai-core/src/Source.cpp +++ b/external/mirai-core/src/Source.cpp @@ -29,8 +29,8 @@ void Source::createTask(const createTaskParams &task) auto day = data->getDayByDate(task.date.value()); if (!day.has_value() && task.date.has_value()) { day = data->insertDay({.id = generateUniqueId(), .date = task.date.value()}); - dayId = day->id; } + dayId = day->id; } if (task.event.has_value() && task.event->id()) { diff --git a/external/mirai-core/src/Task.cpp b/external/mirai-core/src/Task.cpp index 09e845d..01333a2 100644 --- a/external/mirai-core/src/Task.cpp +++ b/external/mirai-core/src/Task.cpp @@ -44,6 +44,11 @@ bool Task::hasEvent() const return task_.eventId.has_value(); } +bool Task::hasDate() const +{ + return task_.dayId.has_value(); +} + void Task::setTitle(const std::string &newTitle) { data_->updateTask(id(), {.title = newTitle}); diff --git a/external/mirai-core/src/View.cpp b/external/mirai-core/src/View.cpp index 783ad74..c980d0a 100644 --- a/external/mirai-core/src/View.cpp +++ b/external/mirai-core/src/View.cpp @@ -63,12 +63,15 @@ void View::update() for (auto day : source->getDays()) { // day's tasks auto sourceTasks = day.tasks() | std::ranges::views::filter([&](const Task &task) { + if (day.date() >= todayDate) { + return true; + } if (shouldHideCompletedTasks()) { return task.checked() == false; } return true; }); - if (std::ranges::distance(sourceTasks) > 0) { + if (day.date() >= todayDate || std::ranges::distance(sourceTasks) > 0) { if (!dates.contains(day.date())) { dates.insert_or_assign(day.date(), DateView{}); @@ -85,7 +88,7 @@ void View::update() }).has_value(); }); - if (std::ranges::distance(sourceEvents) > 0) { + if (day.date() >= todayDate || std::ranges::distance(sourceEvents) > 0) { if (!dates.contains(day.date())) { dates.insert_or_assign(day.date(), DateView{}); } diff --git a/src/UiState.cpp b/src/UiState.cpp index b346b54..77dcbcf 100644 --- a/src/UiState.cpp +++ b/src/UiState.cpp @@ -96,9 +96,13 @@ void UiState::setupCallbacks() assert(source); auto task = source->getTaskById(taskId); 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->getState() == mirai::DONE ? task->markAsUndone() : task->markAsDone(); miraiInstance_->save(); + view_.update(); + reloadTasks(); }); mainWindow_->global().on_source_clicked([&](int index) { @@ -156,6 +160,8 @@ void UiState::setupCallbacks() }); mainWindow_->global().on_create_task([&](ui::NewTaskData newTaskData) { + std::cout << "Task date: " << newTaskData.date.year << " " << newTaskData.date.day + << std::endl; std::optional date = std::nullopt; if (newTaskData.date.year != 0) { date = SlintDateToMiraiDate(newTaskData.date);