mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-02 09:23:18 +00:00
64 lines
1.4 KiB
C
64 lines
1.4 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
|
||
|
*/
|
||
|
|
||
|
#ifndef MIRAI_STD_FILE_RESOURCE_H
|
||
|
#define MIRAI_STD_FILE_RESOURCE_H
|
||
|
|
||
|
#include "core/BaseFileResource.h"
|
||
|
#include "core/TodoMd.h"
|
||
|
#include <fstream>
|
||
|
#include <string>
|
||
|
|
||
|
namespace mirai
|
||
|
{
|
||
|
|
||
|
class StdFileResource : public BaseFileResource
|
||
|
{
|
||
|
public:
|
||
|
StdFileResource(BaseFileResourceConstructor data) : BaseFileResource(data){};
|
||
|
StdFileResource(StdFileResource &) = delete;
|
||
|
StdFileResource(StdFileResource &&) = delete;
|
||
|
StdFileResource operator=(StdFileResource &) = delete;
|
||
|
StdFileResource operator=(StdFileResource &&) = delete;
|
||
|
|
||
|
~StdFileResource() override = default;
|
||
|
|
||
|
void save() override
|
||
|
{
|
||
|
std::ofstream file(getPath());
|
||
|
if (!file.is_open()) {
|
||
|
throw std::runtime_error("can't create " + getPath());
|
||
|
}
|
||
|
|
||
|
const std::string content = TodoMdFormat::stringifyTasks(getName(), getTasks());
|
||
|
|
||
|
file << content;
|
||
|
file.close();
|
||
|
};
|
||
|
|
||
|
void load() override
|
||
|
{
|
||
|
std::ifstream file(getPath());
|
||
|
if (!file.is_open()) {
|
||
|
return;
|
||
|
}
|
||
|
std::string content = "";
|
||
|
std::string line;
|
||
|
|
||
|
while (std::getline(file, line)) {
|
||
|
content += line + "\n";
|
||
|
}
|
||
|
file.close();
|
||
|
auto result = TodoMdFormat::parse(content);
|
||
|
for (const auto &task : result.tasks) {
|
||
|
addTask(task);
|
||
|
}
|
||
|
setName(result.name);
|
||
|
};
|
||
|
};
|
||
|
} // namespace mirai
|
||
|
#endif
|