summaryrefslogtreecommitdiff
path: root/libjack/metadata.c
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-09-30 22:09:12 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-09-30 22:09:12 -0400
commit3057fcf15717a3dd58ea4916f52e4e0b4e584671 (patch)
tree12cda8b2aa526da7d805337cbb9f5d6b40198a00 /libjack/metadata.c
parentdee55cbc0757fef391b9073df8565bbd435d0ff6 (diff)
downloadjack1-3057fcf15717a3dd58ea4916f52e4e0b4e584671.tar.gz
add property change notifications
Diffstat (limited to 'libjack/metadata.c')
-rw-r--r--libjack/metadata.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/libjack/metadata.c b/libjack/metadata.c
index ff1b45f..a5692d8 100644
--- a/libjack/metadata.c
+++ b/libjack/metadata.c
@@ -72,9 +72,22 @@ jack_properties_uninit ()
void
jack_free_description(jack_description_t* desc)
{
+ /* XXX iterate over each property, free values, then free desc itself */
return;
}
+static int
+jack_property_change_notify (jack_client_t* client, jack_uuid_t uuid, const char* key, jack_property_change_t change)
+{
+ jack_request_t req;
+ req.type = PropertyChangeNotify;
+ req.x.property.change = change;
+ jack_uuid_copy (req.x.property.uuid, uuid);
+ req.x.property.keylen = key ? strlen (key) + 1 : 0;
+ req.x.property.key = key;
+ return jack_client_deliver_request (client, &req);
+}
+
static void
make_key_dbt (DBT* dbt, jack_uuid_t subject, const char* key)
{
@@ -138,6 +151,8 @@ jack_set_property (jack_client_t* client,
return -1;
}
+ jack_property_change_notify (client, subject, key, PropertyChanged);
+
return 0;
}
@@ -404,6 +419,9 @@ jack_remove_property (jack_client_t* client, jack_uuid_t subject, const char* ke
jack_error ("Cannot delete key %s (%s)", key, db_strerror (ret));
return -1;
}
+
+ jack_property_change_notify (client, subject, key, PropertyDeleted);
+
return 0;
}
@@ -465,6 +483,8 @@ jack_remove_properties (jack_client_t* client, jack_uuid_t subject)
cursor->close (cursor);
+ jack_property_change_notify (client, subject, NULL, PropertyDeleted);
+
return retval;
}
@@ -472,6 +492,7 @@ int
jack_remove_all_properties (jack_client_t* client)
{
int ret;
+ jack_uuid_t empty_uuid;
if (jack_property_init (NULL)) {
return -1;
@@ -482,5 +503,8 @@ jack_remove_all_properties (jack_client_t* client)
return -1;
}
+ jack_uuid_clear (empty_uuid);
+ jack_property_change_notify (client, empty_uuid, NULL, PropertyDeleted);
+
return 0;
}