Add Unscheduled tasks

This commit is contained in:
Vyn 2024-10-08 16:36:01 +02:00
parent 07081bb27b
commit 53b1280115
13 changed files with 134 additions and 12 deletions

View file

@ -36,6 +36,7 @@ UiState::UiState(mirai::Mirai *miraiInstance) : miraiInstance_(miraiInstance), v
{
sources_ = std::make_shared<slint::VectorModel<slint::SharedString>>();
days_ = std::make_shared<slint::VectorModel<Day>>();
unscheduledTasks_ = std::make_shared<slint::VectorModel<TaskData>>();
tags_ = std::make_shared<slint::VectorModel<slint::SharedString>>();
taskWindow_->global<Backend>().set_sources(sources_);
@ -86,7 +87,7 @@ void UiState::setupTaskWindowCallbacks()
mirai::TodoMdFormat::stringToTask("- [ ] " + std::string(newTaskData.title), dateStr);
task->setText(taskData.text);
if (task->day()->getDate() != SlintDateToMiraiDate(date)) {
if (task->day() && task->day()->getDate() != SlintDateToMiraiDate(date)) {
auto newDate = source->day(SlintDateToMiraiDate(date));
newDate->createTask({
.text = taskData.text,
@ -109,7 +110,9 @@ void UiState::setupTaskWindowCallbacks()
auto task =
mirai::TodoMdFormat::stringToTask("- [ ] " + std::string(newTaskData.title), dateStr);
if (newTaskData.eventId == -1) {
if (!newTaskData.scheduled) {
source->addUnscheduledTask(task);
} else if (newTaskData.eventId == -1) {
auto day = source->day(SlintDateToMiraiDate(date));
assert(day);
day->createTask(task);
@ -280,7 +283,12 @@ void UiState::setupCallbacks()
taskWindow_->set_taskSourceIndex(sourceId);
taskWindow_->set_taskId(task->id());
taskWindow_->set_taskTitle(slint::SharedString(task->getText()));
taskWindow_->set_taskDate(MiraiDateToSlintDate(task->day()->getDate()));
if (task->day() != nullptr) {
taskWindow_->set_scheduled(true);
taskWindow_->set_taskDate(MiraiDateToSlintDate(task->day()->getDate()));
} else {
taskWindow_->set_scheduled(false);
}
taskWindow_->show();
});
@ -411,6 +419,26 @@ void UiState::reloadTasks()
}
days_ = slintDays;
mainWindow_->global<Backend>().set_visible_tasks(days_);
unscheduledTasks_->clear();
for (int taskIndex = 0; taskIndex < view_.filteredUnscheduledTasks().size(); ++taskIndex) {
auto &task = view_.filteredUnscheduledTasks().at(taskIndex);
std::vector<slint::SharedString> tags;
std::transform(
task->getTags().begin(), task->getTags().end(), std::back_inserter(tags),
[&](const std::string &tag) {
return slint::SharedString(tag);
}
);
unscheduledTasks_->push_back({
.sourceId = task->source()->id(),
.id = task->id(),
.title = slint::SharedString(task->getText()),
.checked = task->getState() == mirai::DONE,
.tags = std::make_shared<slint::VectorModel<slint::SharedString>>(tags),
});
}
mainWindow_->global<Backend>().set_unscheduled_tasks(unscheduledTasks_);
}
void UiState::reloadSources()