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