mirai/external/mirai-core/include/mirai-core/MarkdownDataProvider.h
2025-06-29 20:07:11 +02:00

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