summaryrefslogtreecommitdiffstats
path: root/src/client/OSCEngineSender.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-05-19 20:44:19 +0000
committerDavid Robillard <d@drobilla.net>2011-05-19 20:44:19 +0000
commit8f01b24d7a258d0e717eedcbb3618258bfe9883e (patch)
treee76f0306c67c67e616d86eed348d04615e702cd5 /src/client/OSCEngineSender.cpp
parent4d365e0c45e69d2a0ace0faec50547d37588bf0c (diff)
downloadingen-8f01b24d7a258d0e717eedcbb3618258bfe9883e.tar.gz
ingen-8f01b24d7a258d0e717eedcbb3618258bfe9883e.tar.bz2
ingen-8f01b24d7a258d0e717eedcbb3618258bfe9883e.zip
Fix delta via OSC (OSC bindings should be fully functional again).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3285 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/client/OSCEngineSender.cpp')
-rw-r--r--src/client/OSCEngineSender.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/client/OSCEngineSender.cpp b/src/client/OSCEngineSender.cpp
index 9c3b836c..49b20df1 100644
--- a/src/client/OSCEngineSender.cpp
+++ b/src/client/OSCEngineSender.cpp
@@ -117,11 +117,37 @@ OSCEngineSender::put(const Raul::URI& path,
}
void
-OSCEngineSender::delta(const Raul::URI& path,
+OSCEngineSender::delta(const Raul::URI& path,
const Resource::Properties& remove,
const Resource::Properties& add)
{
- warn << "FIXME: OSC DELTA" << endl;
+ typedef Resource::Properties::const_iterator iterator;
+
+ const bool bundle = !_bundle;
+ if (bundle)
+ bundle_begin();
+
+ const int32_t id = next_id();
+ send("/delta_begin", "is", id, path.c_str(), LO_ARGS_END);
+
+ for (iterator i = remove.begin(); i != remove.end(); ++i) {
+ lo_message m = lo_message_new();
+ lo_message_add_string(m, i->first.c_str());
+ Raul::AtomLiblo::lo_message_add_atom(m, i->second);
+ send_message("/delta_remove", m);
+ }
+
+ for (iterator i = add.begin(); i != add.end(); ++i) {
+ lo_message m = lo_message_new();
+ lo_message_add_string(m, i->first.c_str());
+ Raul::AtomLiblo::lo_message_add_atom(m, i->second);
+ send_message("/delta_add", m);
+ }
+
+ send("/delta_end", "i", id, LO_ARGS_END);
+
+ if (bundle)
+ bundle_end();
}
void