From 66c4048b606eec3de7e931ec35b3dcf3ce543641 Mon Sep 17 00:00:00 2001 From: Vyn Date: Mon, 20 May 2024 11:28:01 +0200 Subject: [PATCH] Add support for Android file system --- CMakeLists.txt | 1 + src/AndroidFileResource.h | 62 +++++++++++++++++++++++++++++++++++++ src/Backend.cpp | 5 +-- src/core/BaseFileResource.h | 3 -- src/core/BaseResource.h | 2 -- src/qml/AppLineEdit.qml | 16 +++++----- 6 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 src/AndroidFileResource.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d718e6a..9e717ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/src/AndroidFileResource.h b/src/AndroidFileResource.h new file mode 100644 index 0000000..07b7d2e --- /dev/null +++ b/src/AndroidFileResource.h @@ -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 diff --git a/src/Backend.cpp b/src/Backend.cpp index a10bb2e..3d5f605 100644 --- a/src/Backend.cpp +++ b/src/Backend.cpp @@ -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::BaseFileResourceConstructor{ + std::make_unique(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::BaseFileResourceConstructor{ + std::make_unique(mirai::BaseFileResourceConstructor{ .name = "[Can't load path]", .path = path.toStdString() }); mirai.loadResource(std::move(fileResource)); diff --git a/src/core/BaseFileResource.h b/src/core/BaseFileResource.h index 37c26d8..0629c06 100644 --- a/src/core/BaseFileResource.h +++ b/src/core/BaseFileResource.h @@ -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 diff --git a/src/core/BaseResource.h b/src/core/BaseResource.h index 2c7646a..cff2c15 100644 --- a/src/core/BaseResource.h +++ b/src/core/BaseResource.h @@ -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; diff --git a/src/qml/AppLineEdit.qml b/src/qml/AppLineEdit.qml index 12cf08f..851be0f 100644 --- a/src/qml/AppLineEdit.qml +++ b/src/qml/AppLineEdit.qml @@ -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 + } }