mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-02 01:13:19 +00:00
166 lines
3.3 KiB
C++
166 lines
3.3 KiB
C++
/*
|
|
* Mirai. Copyright (C) 2024 Vyn
|
|
* This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only)
|
|
* The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt
|
|
*/
|
|
|
|
#include "Source.h"
|
|
#include "DataProvider.h"
|
|
#include "utils.h"
|
|
#include <algorithm>
|
|
#include <iterator>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace mirai
|
|
{
|
|
|
|
void Source::save()
|
|
{
|
|
data->save();
|
|
}
|
|
|
|
void Source::createTask(const createTaskParams &task)
|
|
{
|
|
std::optional<int> dayId = std::nullopt;
|
|
std::optional<int> eventId = std::nullopt;
|
|
|
|
if (!task.event.has_value() && task.date.has_value()) {
|
|
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;
|
|
}
|
|
|
|
if (task.event.has_value() && task.event->id()) {
|
|
eventId = task.event.value().id();
|
|
}
|
|
|
|
data->insertTask({
|
|
.id = generateUniqueId(),
|
|
.title = task.title,
|
|
.state = TODO,
|
|
.dayId = dayId,
|
|
.eventId = eventId,
|
|
});
|
|
};
|
|
|
|
std::vector<Day> Source::getDays()
|
|
{
|
|
auto daysData = data->getDays();
|
|
std::vector<Day> days;
|
|
std::transform(
|
|
daysData.begin(), daysData.end(), std::back_inserter(days),
|
|
[&](const DayData &dayData) {
|
|
return Day{data, dayData};
|
|
}
|
|
);
|
|
return days;
|
|
}
|
|
|
|
std::optional<Day> Source::getDayByDate(Date date)
|
|
{
|
|
auto day = data->getDayByDate(date);
|
|
if (!day.has_value()) {
|
|
return std::nullopt;
|
|
}
|
|
return Day{data, day.value()};
|
|
}
|
|
|
|
void Source::createEvent(const createEventParams &eventToCreate)
|
|
{
|
|
std::optional<int> dayId = std::nullopt;
|
|
|
|
auto day = data->getDayByDate(eventToCreate.date);
|
|
if (!day.has_value()) {
|
|
day = data->insertDay({.id = generateUniqueId(), .date = eventToCreate.date});
|
|
dayId = day->id;
|
|
}
|
|
|
|
data->insertEvent({
|
|
.id = generateUniqueId(),
|
|
.dayId = day.value().id,
|
|
.title = eventToCreate.title,
|
|
.startsAt = eventToCreate.startsAt,
|
|
.endsAt = eventToCreate.endsAt,
|
|
});
|
|
};
|
|
|
|
std::optional<Event> Source::getEventById(int evendId)
|
|
{
|
|
auto event = data->getEventById(evendId);
|
|
if (!event.has_value()) {
|
|
return std::nullopt;
|
|
}
|
|
return Event{data, event.value()};
|
|
}
|
|
|
|
void Source::removeEvent(const Event &event)
|
|
{
|
|
data->removeEventById(event.id());
|
|
}
|
|
|
|
void Source::removeTask(const Task &task)
|
|
{
|
|
data->removeTaskById(task.id());
|
|
}
|
|
|
|
std::optional<Task> Source::getTaskById(int taskId)
|
|
{
|
|
auto taskData = data->getTaskById(taskId);
|
|
if (!taskData.has_value()) {
|
|
return std::nullopt;
|
|
}
|
|
Task task{data, taskData.value()};
|
|
return task;
|
|
}
|
|
|
|
std::vector<Task> Source::getTasks()
|
|
{
|
|
auto tasksData = data->getTasks();
|
|
std::vector<Task> tasks;
|
|
std::transform(
|
|
tasksData.begin(), tasksData.end(), std::back_inserter(tasks),
|
|
[&](const TaskData &taskData) {
|
|
return Task{data, taskData};
|
|
}
|
|
);
|
|
return tasks;
|
|
}
|
|
|
|
std::vector<Task> Source::getUnscheduledTasks()
|
|
{
|
|
auto tasksData = data->getTasksWithoutDate();
|
|
std::vector<Task> tasks;
|
|
std::transform(
|
|
tasksData.begin(), tasksData.end(), std::back_inserter(tasks),
|
|
[&](const TaskData &taskData) {
|
|
return Task{data, taskData};
|
|
}
|
|
);
|
|
return tasks;
|
|
}
|
|
|
|
std::string Source::name() const
|
|
{
|
|
return name_;
|
|
}
|
|
|
|
void Source::setName(const std::string &name)
|
|
{
|
|
name_ = name;
|
|
}
|
|
|
|
std::string Source::type() const
|
|
{
|
|
// There is only 1 type for now
|
|
return type_;
|
|
}
|
|
|
|
DataProvider *Source::dataProvider()
|
|
{
|
|
return data;
|
|
}
|
|
} // namespace mirai
|