summaryrefslogtreecommitdiffstats
path: root/src/Serialiser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Serialiser.cpp')
-rw-r--r--src/Serialiser.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/Serialiser.cpp b/src/Serialiser.cpp
index 37bd20c0..da88559c 100644
--- a/src/Serialiser.cpp
+++ b/src/Serialiser.cpp
@@ -445,9 +445,23 @@ Serialiser::Impl::serialise_block(SPtr<const Node> block,
Sord::URI(_model->world(), uris.lv2_prototype),
class_id);
- const Node::Properties props = block->properties();
+ // Serialise properties, but remove possibly stale state:state (set again below)
+ Node::Properties props = block->properties();
+ props.erase(uris.state_state);
serialise_properties(block_id, props);
+ if (_base_uri.substr(0, 5) == "file:") {
+ const std::string base = Glib::filename_from_uri(_base_uri);
+ const std::string graph_dir = Glib::path_get_dirname(base);
+ const std::string state_dir = Glib::build_filename(graph_dir, block->symbol());
+ const std::string state_file = Glib::build_filename(state_dir, "state.ttl");
+ if (block->save_state(state_dir)) {
+ _model->add_statement(block_id,
+ Sord::URI(_model->world(), uris.state_state),
+ Sord::URI(_model->world(), Glib::filename_to_uri(state_file)));
+ }
+ }
+
for (uint32_t i = 0; i < block->num_ports(); ++i) {
Node* const p = block->port(i);
const Sord::Node port_id = path_rdf_node(p->path());