Add support for Android file system

This commit is contained in:
Vyn 2024-05-20 11:28:01 +02:00
parent ca34562a1c
commit 66c4048b60
6 changed files with 74 additions and 15 deletions

View file

@ -67,6 +67,7 @@ qt_add_qml_module(mirai
src/TaskItem.h src/TaskItem.cpp
src/Tag.h src/Tag.cpp
src/TasksFile.h src/TasksFile.cpp
src/AndroidFileResource.h
RESOURCES
src/images/calendar.png
src/images/add.png

62
src/AndroidFileResource.h Normal file
View file

@ -0,0 +1,62 @@
/*
* 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_ANDROID_FILE_RESOURCE_H
#define MIRAI_ANDROID_FILE_RESOURCE_H
#include "QFile"
#include "QDebug"
#include "core/BaseFileResource.h"
#include "core/TodoMd.h"
namespace mirai
{
class AndroidFileResource : public BaseFileResource
{
public:
AndroidFileResource(BaseFileResourceConstructor data) : BaseFileResource(data){};
AndroidFileResource(AndroidFileResource &) = delete;
AndroidFileResource(AndroidFileResource &&) = delete;
AndroidFileResource operator=(AndroidFileResource &) = delete;
AndroidFileResource operator=(AndroidFileResource &&) = delete;
~AndroidFileResource() override = default;
void save() override
{
QFile file(QString::fromStdString(getPath()));
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
throw std::runtime_error("can't create " + getPath());
}
const std::string content = TodoMdFormat::stringifyTasks(getName(), getTasks());
file.write(content.c_str());
file.close();
};
void load() override
{
qDebug() << "Reading " << QString::fromStdString(getPath());
QFile file(QString::fromStdString(getPath()));
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "Can't read";
return;
}
QString content = file.readAll();
qDebug() << "Content " << content;
file.close();
auto result = TodoMdFormat::parse(content.toStdString());
for (const auto &task : result.tasks) {
addTask(task);
}
setName(result.name);
};
};
} // namespace mirai
#endif

View file

@ -5,6 +5,7 @@
*/
#include "Backend.h"
#include "AndroidFileResource.h"
#include "TaskItem.h"
#include "core/StdFileResource.h"
#include "core/TaskItem.h"
@ -50,7 +51,7 @@ Backend::Backend() : todoView(&mirai)
for (const QJsonValueRef &filePath : jsonFilesPath.toArray()) {
cpputils::debug::Timer loadingFileDuration;
auto fileResource =
std::make_unique<mirai::StdFileResource>(mirai::BaseFileResourceConstructor{
std::make_unique<mirai::AndroidFileResource>(mirai::BaseFileResourceConstructor{
.name = "[Can't load path]", .path = filePath.toString().toStdString()
});
mirai.loadResource(std::move(fileResource));
@ -306,7 +307,7 @@ void Backend::saveFilesPath(QVariant modifiedFilesPath)
continue;
}
auto fileResource =
std::make_unique<mirai::StdFileResource>(mirai::BaseFileResourceConstructor{
std::make_unique<mirai::AndroidFileResource>(mirai::BaseFileResourceConstructor{
.name = "[Can't load path]", .path = path.toStdString()
});
mirai.loadResource(std::move(fileResource));

View file

@ -25,9 +25,6 @@ class BaseFileResource : public BaseResource
BaseFileResource(BaseFileResource &) = delete;
BaseFileResource(BaseFileResource &&) = delete;
BaseFileResource operator=(BaseFileResource &) = delete;
BaseFileResource operator=(BaseFileResource &&) = delete;
~BaseFileResource() override = default;
const std::string &getPath() const

View file

@ -21,8 +21,6 @@ class BaseResource
BaseResource(std::string name) : name(name){};
BaseResource(BaseResource &) = delete;
BaseResource(BaseResource &&) = delete;
BaseResource operator=(BaseResource &) = delete;
BaseResource operator=(BaseResource &&) = delete;
virtual ~BaseResource() = default;
virtual void save() = 0;

View file

@ -10,13 +10,13 @@ import QtQuick.Controls
import Mirai
TextField {
color: MiraiColorPalette.text
placeholderTextColor: MiraiColorPalette.textPlaceholder
leftPadding: 10
implicitHeight: 32
color: MiraiColorPalette.text
placeholderTextColor: MiraiColorPalette.textPlaceholder
leftPadding: 10
implicitHeight: 32
background: Rectangle {
color: MiraiColorPalette.fieldBackground
radius: 4
}
background: Rectangle {
color: MiraiColorPalette.fieldBackground
radius: 4
}
}