summaryrefslogtreecommitdiffstats
path: root/src/AtomWriter.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-03-19 13:26:38 +0100
committerDavid Robillard <d@drobilla.net>2017-03-20 02:58:56 +0100
commitf1c793f7e2148b10610a09a459d9e89b39d2d87b (patch)
treeb898407dce08af0f2f978d59a85d4887d8555b54 /src/AtomWriter.cpp
parentefc0fe0a973db706d9409b345ad6fae585f4388c (diff)
downloadingen-f1c793f7e2148b10610a09a459d9e89b39d2d87b.tar.gz
ingen-f1c793f7e2148b10610a09a459d9e89b39d2d87b.tar.bz2
ingen-f1c793f7e2148b10610a09a459d9e89b39d2d87b.zip
Fix round-trip preservation of property contexts
Diffstat (limited to 'src/AtomWriter.cpp')
-rw-r--r--src/AtomWriter.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/AtomWriter.cpp b/src/AtomWriter.cpp
index 2fc3ee18..54dcd0a2 100644
--- a/src/AtomWriter.cpp
+++ b/src/AtomWriter.cpp
@@ -165,6 +165,22 @@ AtomWriter::forge_request(LV2_Atom_Forge_Frame* frame, LV2_URID type)
}
}
+void
+AtomWriter::forge_context(Resource::Graph ctx)
+{
+ switch (ctx) {
+ case Resource::Graph::EXTERNAL:
+ lv2_atom_forge_key(&_forge, _uris.patch_context);
+ forge_uri(_uris.ingen_externalContext);
+ break;
+ case Resource::Graph::INTERNAL:
+ lv2_atom_forge_key(&_forge, _uris.patch_context);
+ forge_uri(_uris.ingen_internalContext);
+ break;
+ default: break;
+ }
+}
+
/** @page protocol
* @section methods Methods
* @subsection Put
@@ -196,6 +212,7 @@ AtomWriter::put(const Raul::URI& uri,
{
LV2_Atom_Forge_Frame msg;
forge_request(&msg, _uris.patch_Put);
+ forge_context(ctx);
lv2_atom_forge_key(&_forge, _uris.patch_subject);
forge_uri(uri);
lv2_atom_forge_key(&_forge, _uris.patch_body);
@@ -238,10 +255,12 @@ AtomWriter::put(const Raul::URI& uri,
void
AtomWriter::delta(const Raul::URI& uri,
const Properties& remove,
- const Properties& add)
+ const Properties& add,
+ Resource::Graph ctx)
{
LV2_Atom_Forge_Frame msg;
forge_request(&msg, _uris.patch_Patch);
+ forge_context(ctx);
lv2_atom_forge_key(&_forge, _uris.patch_subject);
forge_uri(uri);
@@ -371,10 +390,12 @@ AtomWriter::del(const Raul::URI& uri)
void
AtomWriter::set_property(const Raul::URI& subject,
const Raul::URI& predicate,
- const Atom& value)
+ const Atom& value,
+ Resource::Graph ctx)
{
LV2_Atom_Forge_Frame msg;
forge_request(&msg, _uris.patch_Set);
+ forge_context(ctx);
lv2_atom_forge_key(&_forge, _uris.patch_subject);
forge_uri(subject);
lv2_atom_forge_key(&_forge, _uris.patch_property);