From 816bbe7993adf4a41ace7bae06bfe6a5921308b8 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Wed, 10 Nov 2021 20:44:52 -0800 Subject: Switch more IO to use DataArchive --- core/src/Model/Workflow/Workflow_Main.cpp | 48 ++++++++++++++----------------- 1 file changed, 22 insertions(+), 26 deletions(-) (limited to 'core/src/Model/Workflow') 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 @@ -754,17 +755,14 @@ void WorkflowAssetList::DiscoverFiles(const std::function& 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); - - std::ofstream ofs(path); - if (!ofs) return false; - ofs << (uint64_t)assetInfo.Name.size(); - ofs << assetInfo.Name; - - if (auto workflow = static_cast(asset)) { - workflow->WriteTo(ofs); + auto res = DataArchive::SaveFile(path); + if (!res) return false; + auto& stream = res.value(); + + stream.WriteObject(assetInfo); + // This cast is fine: calls to this class will always be wrapped in TypedAssetList, which will ensure `asset` points to some Workflow + if (auto workflow = static_cast(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 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(); - if (workflow->ReadFrom(ifs) != Workflow::RR_Success) { - return nullptr; - } + stream.ReadObject(*workflow); return workflow; } -- cgit v1.3.1