summaryrefslogtreecommitdiffstats
path: root/src/AtomReader.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-01-10 06:20:39 +0000
committerDavid Robillard <d@drobilla.net>2013-01-10 06:20:39 +0000
commit4b480bf87cd496446491e3880d867d7fa92c6c49 (patch)
tree1e67b31180eb6125b3704914c7acd7d248af69d0 /src/AtomReader.cpp
parent67067320cb53f3c84bb7901e446f3d1798667e57 (diff)
downloadingen-4b480bf87cd496446491e3880d867d7fa92c6c49.tar.gz
ingen-4b480bf87cd496446491e3880d867d7fa92c6c49.tar.bz2
ingen-4b480bf87cd496446491e3880d867d7fa92c6c49.zip
Update for latest changes to LV2 patch extension (compact patch:Set message).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4911 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/AtomReader.cpp')
-rw-r--r--src/AtomReader.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/AtomReader.cpp b/src/AtomReader.cpp
index 63f493a7..55e88427 100644
--- a/src/AtomReader.cpp
+++ b/src/AtomReader.cpp
@@ -199,22 +199,30 @@ AtomReader::write(const LV2_Atom* msg)
_iface.put(Raul::URI(subject_uri), props);
}
} else if (obj->body.otype == _uris.patch_Set) {
- const LV2_Atom_Object* body = NULL;
- lv2_atom_object_get(obj, (LV2_URID)_uris.patch_body, &body, 0);
- if (!body) {
- _log.warn("Set message has no body\n");
- return false;
- } else if (!subject_uri) {
+ if (!subject_uri) {
_log.warn("Set message has no subject\n");
return false;
}
- LV2_ATOM_OBJECT_FOREACH(body, p) {
- Raul::Atom val;
- get_atom(&p->value, val);
- _iface.set_property(Raul::URI(subject_uri),
- Raul::URI(_map.unmap_uri(p->key)), val);
+ const LV2_Atom_URID* prop = NULL;
+ lv2_atom_object_get(obj, (LV2_URID)_uris.patch_property, &prop, 0);
+ if (!prop || ((LV2_Atom*)prop)->type != _uris.atom_URID) {
+ _log.warn("Set message missing property\n");
+ return false;
}
+
+ const LV2_Atom* value = NULL;
+ lv2_atom_object_get(obj, (LV2_URID)_uris.patch_value, &value, 0);
+ if (!value) {
+ _log.warn("Set message missing value\n");
+ return false;
+ }
+
+ Raul::Atom atom;
+ get_atom(value, atom);
+ _iface.set_property(Raul::URI(subject_uri),
+ Raul::URI(_map.unmap_uri(prop->body)),
+ atom);
} else if (obj->body.otype == _uris.patch_Patch) {
if (!subject) {
_log.warn("Patch message has no subject\n");