diff options
author | David Robillard <d@drobilla.net> | 2016-10-06 15:51:11 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2016-10-06 15:51:11 -0400 |
commit | 77f6e9e63ce9ad329b43c92e8a9556aff8e78f2f (patch) | |
tree | 50dca5900274ca2f95c3d06069b7fe0bd285e46b /src/Serialiser.cpp | |
parent | a513af4218d0a62a45960d04ff6ddeecb8d3d4f5 (diff) | |
download | ingen-77f6e9e63ce9ad329b43c92e8a9556aff8e78f2f.tar.gz ingen-77f6e9e63ce9ad329b43c92e8a9556aff8e78f2f.tar.bz2 ingen-77f6e9e63ce9ad329b43c92e8a9556aff8e78f2f.zip |
Add plugin state saving
This only works with a server-side save, so the GUI now uses that if the
server is not running remotely, where "remotely" is defined as "via
TCP". This isn't perfect, since running ingen via TCP locally is a
perfectly valid thing to do, but it will do for now.
Diffstat (limited to 'src/Serialiser.cpp')
-rw-r--r-- | src/Serialiser.cpp | 16 |
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()); |