mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-03 10:13:42 +00:00
Add Unscheduled tasks
This commit is contained in:
parent
07081bb27b
commit
53b1280115
13 changed files with 134 additions and 12 deletions
16
external/mirai-core/src/BaseSource.cpp
vendored
16
external/mirai-core/src/BaseSource.cpp
vendored
|
@ -46,12 +46,23 @@ std::vector<std::unique_ptr<Day>> *BaseSource::days()
|
|||
return &days_;
|
||||
}
|
||||
|
||||
std::vector<std::unique_ptr<TaskItem>> *BaseSource::unscheduledTasks()
|
||||
{
|
||||
return &unscheduledTasks_;
|
||||
}
|
||||
|
||||
void BaseSource::addDay(const DayData &dayData)
|
||||
{
|
||||
days_.push_back(std::make_unique<Day>(this, dayData));
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
void BaseSource::addUnscheduledTask(const TaskItemData &taskData)
|
||||
{
|
||||
unscheduledTasks_.push_back(std::make_unique<TaskItem>(this, nullptr, taskData));
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
TaskItem *BaseSource::getTaskById(int taskId)
|
||||
{
|
||||
for (auto &day : days_) {
|
||||
|
@ -68,6 +79,11 @@ TaskItem *BaseSource::getTaskById(int taskId)
|
|||
}
|
||||
}
|
||||
}
|
||||
for (auto &task : *unscheduledTasks()) {
|
||||
if (task->id() == taskId) {
|
||||
return task.get();
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
5
external/mirai-core/src/StdFileSource.cpp
vendored
5
external/mirai-core/src/StdFileSource.cpp
vendored
|
@ -21,7 +21,7 @@ void StdFileSource::save()
|
|||
throw std::runtime_error("can't create " + getPath());
|
||||
}
|
||||
|
||||
const std::string content = TodoMdFormat::stringify(getName(), *days());
|
||||
const std::string content = TodoMdFormat::stringify(*this);
|
||||
|
||||
file << content;
|
||||
file.close();
|
||||
|
@ -53,6 +53,9 @@ void StdFileSource::load()
|
|||
TaskItem *newTask = newDay->createTask(taskData);
|
||||
}
|
||||
}
|
||||
for (const auto &taskData : result.unscheduledTasks) {
|
||||
addUnscheduledTask(taskData);
|
||||
}
|
||||
setName(result.name);
|
||||
};
|
||||
} // namespace mirai
|
||||
|
|
16
external/mirai-core/src/TasksView.cpp
vendored
16
external/mirai-core/src/TasksView.cpp
vendored
|
@ -36,6 +36,11 @@ FilteredDay &TasksView::operator[](int index)
|
|||
return filteredDays.at(index);
|
||||
}
|
||||
|
||||
std::vector<TaskItem *> &TasksView::filteredUnscheduledTasks()
|
||||
{
|
||||
return filteredUnscheduledTasks_;
|
||||
}
|
||||
|
||||
size_t TasksView::count() const
|
||||
{
|
||||
return filteredDays.size();
|
||||
|
@ -45,12 +50,23 @@ void TasksView::update()
|
|||
{
|
||||
auto todayDate = std::format("{:%Y-%m-%d}", std::chrono::system_clock::now());
|
||||
filteredDays.clear();
|
||||
filteredUnscheduledTasks_.clear();
|
||||
|
||||
for (auto &file : mirai->getSources()) {
|
||||
if (resourcesFilter.size() > 0 &&
|
||||
!vectorUtils::contains(resourcesFilter, file->getName())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (auto &task : *file->unscheduledTasks()) {
|
||||
if (shouldHideCompletedTasks() && task->getState() == DONE) {
|
||||
continue;
|
||||
}
|
||||
if (tagsFilter.size() > 0 && !vectorUtils::containsAll(tagsFilter, task->getTags())) {
|
||||
continue;
|
||||
}
|
||||
filteredUnscheduledTasks_.push_back(task.get());
|
||||
}
|
||||
for (auto &day : *file->days()) {
|
||||
FilteredDay filteredDay{.day = day.get()};
|
||||
for (auto &task : *day->tasks()) {
|
||||
|
|
23
external/mirai-core/src/TodoMd.cpp
vendored
23
external/mirai-core/src/TodoMd.cpp
vendored
|
@ -132,13 +132,14 @@ std::string TodoMdFormat::taskToString(const TaskItem &task)
|
|||
return str;
|
||||
}
|
||||
|
||||
std::string
|
||||
TodoMdFormat::stringify(const std::string &name, const std::vector<std::unique_ptr<Day>> &days)
|
||||
std::string TodoMdFormat::stringify(BaseSource &source)
|
||||
{
|
||||
const std::string &name = source.getName();
|
||||
const std::vector<std::unique_ptr<Day>> *days = source.days();
|
||||
std::string result = "# " + name + "\n\n";
|
||||
std::string currentDate = "";
|
||||
|
||||
for (const auto &day : days) {
|
||||
for (const auto &day : *days) {
|
||||
auto &date = day->getDate();
|
||||
result +=
|
||||
"## " + std::format("{:02d}-{:02d}-{:02d}", date.year, date.month, date.day) + "\n\n";
|
||||
|
@ -162,6 +163,13 @@ TodoMdFormat::stringify(const std::string &name, const std::vector<std::unique_p
|
|||
result += '\n';
|
||||
}
|
||||
|
||||
if (source.unscheduledTasks()->size() > 0) {
|
||||
result += "## Unscheduled\n\n";
|
||||
for (const auto &task : *(source.unscheduledTasks())) {
|
||||
result += taskToString(*task) + '\n';
|
||||
}
|
||||
result += '\n';
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
|
@ -181,6 +189,7 @@ MiraiMarkdownFormatParseResult TodoMdFormat::parse(const std::string &content)
|
|||
std::string currentDateString = "";
|
||||
|
||||
std::vector<mirai::DayData> daysData;
|
||||
std::vector<mirai::TaskItemData> unscheduledTasks;
|
||||
mirai::DayData *currentDay = nullptr;
|
||||
mirai::EventData *currentEvent = nullptr;
|
||||
|
||||
|
@ -190,6 +199,10 @@ MiraiMarkdownFormatParseResult TodoMdFormat::parse(const std::string &content)
|
|||
while (std::getline(contentStream, line)) {
|
||||
if (std::string_view{line.data(), 3} == "## ") {
|
||||
currentDateString = line.substr(3);
|
||||
if (currentDateString == "Unscheduled") {
|
||||
currentDay = nullptr;
|
||||
continue;
|
||||
}
|
||||
auto dateOpt = mirai::stringToDate(currentDateString);
|
||||
if (!dateOpt.has_value()) {
|
||||
throw std::runtime_error("Malformated date");
|
||||
|
@ -210,6 +223,8 @@ MiraiMarkdownFormatParseResult TodoMdFormat::parse(const std::string &content)
|
|||
currentEvent->tasks.push_back(taskItemData);
|
||||
} else if (currentDay) {
|
||||
currentDay->tasks.push_back(taskItemData);
|
||||
} else {
|
||||
unscheduledTasks.push_back(taskItemData);
|
||||
}
|
||||
} else if (cpputils::string::trim(line) == "") {
|
||||
currentEvent = nullptr;
|
||||
|
@ -219,6 +234,6 @@ MiraiMarkdownFormatParseResult TodoMdFormat::parse(const std::string &content)
|
|||
gelinesDuration.printTimeElapsed("getlinesDuration");
|
||||
stringToTaskDuration.printTimeElapsed("stringToTaskDuration");
|
||||
readMdFormatDuration.printTimeElapsed("Reading MD File duration");
|
||||
return {.name = name, .days = daysData};
|
||||
return {.name = name, .days = daysData, .unscheduledTasks = unscheduledTasks};
|
||||
}
|
||||
} // namespace mirai
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue