From 0b4bfb783c5c9a0840e5044d23449b3f3ba6dffa Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 30 Jul 2021 15:07:07 +0200 Subject: [PATCH] LIB: Basic ScriptStore --- src/Lib/AbstractDocument.hh | 2 ++ src/Lib/Document/VivyDocument.hh | 2 +- src/Lib/Document/VivyDocumentStore.hh | 2 +- src/Lib/Script/ScriptDocument.cc | 6 ++++++ src/Lib/Script/ScriptDocument.hh | 1 + src/Lib/Script/ScriptStore.cc | 18 ++++++++++++++++++ src/Lib/Script/ScriptStore.hh | 5 +++-- 7 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 src/Lib/Script/ScriptStore.cc diff --git a/src/Lib/AbstractDocument.hh b/src/Lib/AbstractDocument.hh index bb367d88..495f6c17 100644 --- a/src/Lib/AbstractDocument.hh +++ b/src/Lib/AbstractDocument.hh @@ -6,6 +6,7 @@ #endif #include "Utils.hh" +#include "Uuid.hh" #include <QFileInfo> #include <QDir> @@ -44,6 +45,7 @@ protected: public: virtual bool rename(const QString &) noexcept = 0; virtual QString getName() const noexcept = 0; + virtual Uuid getUuid() const noexcept = 0; signals: void documentChanged(); diff --git a/src/Lib/Document/VivyDocument.hh b/src/Lib/Document/VivyDocument.hh index 6e7f3b33..eefaa11d 100644 --- a/src/Lib/Document/VivyDocument.hh +++ b/src/Lib/Document/VivyDocument.hh @@ -69,8 +69,8 @@ public: std::shared_ptr<AssSubDocument> getAssSubDocument() const noexcept; QString getName() const noexcept override; - Uuid getUuid() const noexcept; QString getDocumentCapabilitiesString() const noexcept; + Uuid getUuid() const noexcept override; bool checkDocumentCapabilities(Capabilities) const noexcept; bool checkDocumentOption(Options) const noexcept; diff --git a/src/Lib/Document/VivyDocumentStore.hh b/src/Lib/Document/VivyDocumentStore.hh index b319ef7d..79929f2c 100644 --- a/src/Lib/Document/VivyDocumentStore.hh +++ b/src/Lib/Document/VivyDocumentStore.hh @@ -20,7 +20,7 @@ class VivyDocumentStore final : public CRTPStore<VivyDocumentStore, VivyDocument public: explicit VivyDocumentStore() noexcept = default; - /* Create/load documents */ + // Create/load documents std::shared_ptr<VivyDocument> loadDocument(const QString &file); std::shared_ptr<VivyDocument> newDocument(VivyDocument::Options opt = VivyDocument::NoOption); }; diff --git a/src/Lib/Script/ScriptDocument.cc b/src/Lib/Script/ScriptDocument.cc index 486bda6a..a74328f0 100644 --- a/src/Lib/Script/ScriptDocument.cc +++ b/src/Lib/Script/ScriptDocument.cc @@ -25,3 +25,9 @@ ScriptDocument::getName() const noexcept { return name; } + +Vivy::Uuid +ScriptDocument::getUuid() const noexcept +{ + return uuid; +} diff --git a/src/Lib/Script/ScriptDocument.hh b/src/Lib/Script/ScriptDocument.hh index c7436d4a..f5394514 100644 --- a/src/Lib/Script/ScriptDocument.hh +++ b/src/Lib/Script/ScriptDocument.hh @@ -15,6 +15,7 @@ public: bool rename(const QString &) noexcept override; QString getName() const noexcept override; + Uuid getUuid() const noexcept override; private: QString name{}; diff --git a/src/Lib/Script/ScriptStore.cc b/src/Lib/Script/ScriptStore.cc new file mode 100644 index 00000000..959935a5 --- /dev/null +++ b/src/Lib/Script/ScriptStore.cc @@ -0,0 +1,18 @@ +#include "ScriptStore.hh" +#include "../Uuid.hh" + +using namespace Vivy::Script; + +std::shared_ptr<ScriptDocument> +ScriptStore::loadDocument(const QString &file) +{ + try { + auto ret = std::make_shared<ScriptDocument>(file); + const Uuid uuid = ret->getUuid(); + documents[uuid] = ret; + return ret; + } catch (const std::runtime_error &e) { + qCritical() << "Failed to create the Script document with:" << e.what(); + return std::shared_ptr<ScriptDocument>(nullptr); + } +} diff --git a/src/Lib/Script/ScriptStore.hh b/src/Lib/Script/ScriptStore.hh index ed8f33b9..f42d84a0 100644 --- a/src/Lib/Script/ScriptStore.hh +++ b/src/Lib/Script/ScriptStore.hh @@ -1,15 +1,16 @@ #pragma once #include "../CRTPStore.hh" +#include "ScriptDocument.hh" namespace Vivy::Script { -class ScriptDocument; - class ScriptStore final : public CRTPStore<ScriptStore, ScriptDocument> { VIVY_STORAGE_CLASS(ScriptStore, ScriptDocument) public: explicit ScriptStore() noexcept = default; + + std::shared_ptr<ScriptDocument> loadDocument(const QString &file); }; } -- GitLab