aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Workflow
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Model/Workflow')
-rw-r--r--core/src/Model/Workflow/Workflow_Main.cpp46
1 files changed, 21 insertions, 25 deletions
diff --git a/core/src/Model/Workflow/Workflow_Main.cpp b/core/src/Model/Workflow/Workflow_Main.cpp
index d502413..1f00b19 100644
--- a/core/src/Model/Workflow/Workflow_Main.cpp
+++ b/core/src/Model/Workflow/Workflow_Main.cpp
@@ -4,6 +4,7 @@
#include "Model/Project.hpp"
#include "UI/UI.hpp"
#include "Utils/I18n.hpp"
+#include "Utils/IO/Archive.hpp"
#include "Utils/UUID.hpp"
#include <imgui.h>
@@ -754,17 +755,14 @@ void WorkflowAssetList::DiscoverFiles(const std::function<void(SavedAsset)>& cal
std::string WorkflowAssetList::RetrieveNameFromFile(const fs::path& file) const
{
- std::ifstream ifs(file);
- if (!ifs) return "";
+ auto res = DataArchive::LoadFile(file);
+ if (!res) return "";
+ auto& stream = res.value();
- uint64_t len;
- ifs >> len;
+ SavedAsset assetInfo;
+ stream.ReadObject(assetInfo);
- std::string name;
- name.reserve(len);
- std::copy_n(std::istreambuf_iterator(ifs), len, std::back_inserter(name));
-
- return name;
+ return assetInfo.Name;
}
uuids::uuid WorkflowAssetList::RetrieveUuidFromFile(const fs::path& file) const
@@ -781,14 +779,14 @@ fs::path WorkflowAssetList::RetrievePathFromAsset(const SavedAsset& asset) const
bool WorkflowAssetList::SaveInstance(const SavedAsset& assetInfo, const Asset* asset) const
{
auto path = RetrievePathFromAsset(assetInfo);
+ auto res = DataArchive::SaveFile(path);
+ if (!res) return false;
+ auto& stream = res.value();
- std::ofstream ofs(path);
- if (!ofs) return false;
- ofs << (uint64_t)assetInfo.Name.size();
- ofs << assetInfo.Name;
-
- if (auto workflow = static_cast<const Workflow*>(asset)) {
- workflow->WriteTo(ofs);
+ stream.WriteObject(assetInfo);
+ // This cast is fine: calls to this class will always be wrapped in TypedAssetList<T>, which will ensure `asset` points to some Workflow
+ if (auto workflow = static_cast<const Workflow*>(asset)) { // NOLINT(cppcoreguidelines-pro-type-static-cast-downcast)
+ stream.WriteObject(*workflow);
}
return true;
@@ -796,18 +794,16 @@ bool WorkflowAssetList::SaveInstance(const SavedAsset& assetInfo, const Asset* a
static std::unique_ptr<Workflow> LoadWorkflowFromFile(const fs::path& path)
{
- std::ifstream ifs(path);
- if (!ifs) return nullptr;
+ auto res = DataArchive::LoadFile(path);
+ if (!res) return nullptr;
+ auto& stream = res.value();
- // TODO fix serialization
- uint64_t nameSize;
- ifs >> nameSize;
- ifs.seekg(nameSize, std::ios::end);
+ // TODO this is currently unused
+ SavedAsset assetInfo;
+ stream.ReadObject(assetInfo);
auto workflow = std::make_unique<Workflow>();
- if (workflow->ReadFrom(ifs) != Workflow::RR_Success) {
- return nullptr;
- }
+ stream.ReadObject(*workflow);
return workflow;
}