summaryrefslogtreecommitdiffstats
path: root/src/Serialiser.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-05-25 09:12:44 +0000
committerDavid Robillard <d@drobilla.net>2015-05-25 09:12:44 +0000
commitccb7d738d37fb21245a563cd41727f2609f0bc07 (patch)
treef13f750311b3b768b87b6dd64b47cd82584a6262 /src/Serialiser.cpp
parent4f00b8a2ae7148b3a13fd6af0e79eb9b6abf5634 (diff)
downloadingen-ccb7d738d37fb21245a563cd41727f2609f0bc07.tar.gz
ingen-ccb7d738d37fb21245a563cd41727f2609f0bc07.tar.bz2
ingen-ccb7d738d37fb21245a563cd41727f2609f0bc07.zip
Use ingen:/ as base URI on the wire.
This allows referring to non-graph items, which are converted to bundle-relative URIs on save, resolving issue #1049. Change root graph URI to ingen:/graph. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5687 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/Serialiser.cpp')
-rw-r--r--src/Serialiser.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/Serialiser.cpp b/src/Serialiser.cpp
index d5e54f3d..4ef8eaed 100644
--- a/src/Serialiser.cpp
+++ b/src/Serialiser.cpp
@@ -516,10 +516,22 @@ Serialiser::Impl::serialise_properties(Sord::Node id,
for (const auto& p : props) {
const Sord::URI key(_model->world(), p.first);
if (!skip_property(_world.uris(), key)) {
- sratom_write(_sratom, unmap, 0,
- sord_node_to_serd_node(id.c_obj()),
- sord_node_to_serd_node(key.c_obj()),
- p.second.type(), p.second.size(), p.second.get_body());
+ if (p.second.type() == _world.uris().atom_URI &&
+ !strncmp((const char*)p.second.get_body(), "ingen:/", 7)) {
+ /* Value is an ingen:/ URI, relative to the running engine.
+ Chop the prefix and save the path relative to the bundle.
+ This allows saving references to bundle resources. */
+ sratom_write(_sratom, unmap, 0,
+ sord_node_to_serd_node(id.c_obj()),
+ sord_node_to_serd_node(key.c_obj()),
+ p.second.type(), p.second.size(),
+ (const char*)p.second.get_body() + 7);
+ } else {
+ sratom_write(_sratom, unmap, 0,
+ sord_node_to_serd_node(id.c_obj()),
+ sord_node_to_serd_node(key.c_obj()),
+ p.second.type(), p.second.size(), p.second.get_body());
+ }
}
}