mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-01 08:53:20 +00:00
68 lines
1.8 KiB
C++
68 lines
1.8 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
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "DataProvider.h"
|
|
#include "DateTime.h"
|
|
#include <algorithm>
|
|
#include <fstream>
|
|
#include <iterator>
|
|
#include <optional>
|
|
#include <ranges>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace mirai
|
|
{
|
|
|
|
struct markdown_data {
|
|
std::string name;
|
|
std::vector<task_data> tasks;
|
|
std::vector<event_data> events;
|
|
};
|
|
|
|
class markdown_data_provider final : public data_provider
|
|
{
|
|
public:
|
|
markdown_data_provider(const std::string &file_path) : _file_path(file_path), data_provider()
|
|
{
|
|
}
|
|
|
|
std::string to_markdown();
|
|
markdown_data parse_markdown(const std::string &content);
|
|
|
|
std::string path() const;
|
|
|
|
void save() override;
|
|
void load() override;
|
|
|
|
std::string name() const override;
|
|
|
|
// Tasks
|
|
task_data insert_task(const task_data &task) override;
|
|
void remove_task_by_id(int taskId) override;
|
|
std::optional<task_data> get_task_by_id(int taskId) override;
|
|
std::vector<task_data> get_tasks_by_date(Date date) override;
|
|
std::vector<task_data> get_tasks_without_date() override;
|
|
std::vector<task_data> get_tasks() override;
|
|
void update_task(int taskId, updatable_task_data updateData) override;
|
|
|
|
// Events
|
|
event_data insertEvent(const event_data &task) override;
|
|
void remove_event_by_id(int eventId) override;
|
|
std::optional<event_data> get_event_by_id(int eventId) override;
|
|
std::vector<event_data> get_events() override;
|
|
std::vector<event_data> get_events_by_date(Date date) override;
|
|
void update_event(int eventId, updatable_event_data updateData) override;
|
|
|
|
private:
|
|
std::string _name;
|
|
std::string _file_path;
|
|
markdown_data _data;
|
|
};
|
|
|
|
} // namespace mirai
|