data.data = &entry;
data.size = sizeof(entry);
- if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0)
+ pa_log_debug("Client %s changes entry %s.",
+ pa_strnull(pa_proplist_gets(pa_native_connection_get_client(c)->proplist, PA_PROP_APPLICATION_PROCESS_BINARY)),
+ name);
+
- || (entry.volume_valid
- && (!pa_cvolume_equal(&entry.volume, &old->volume) || !pa_channel_map_equal(&entry.channel_map, &old->channel_map))))
+ if (pa_database_set(u->database, &key, &data, mode == PA_UPDATE_REPLACE) == 0) {
+#ifdef HAVE_DBUS
+ struct dbus_entry *de;
+
+ if (old) {
+ pa_assert_se((de = pa_hashmap_get(u->dbus_entries, name)));
+
+ if ((old->device_valid != entry.device_valid)
+ || (entry.device_valid && !pa_streq(entry.device, old->device)))
+ send_device_updated_signal(de, &entry);
+
+ if ((old->volume_valid != entry.volume_valid)
++ || (entry.volume_valid && (!pa_cvolume_equal(&entry.volume, &old->volume)
++ || !pa_channel_map_equal(&entry.channel_map, &old->channel_map))))
+ send_volume_updated_signal(de, &entry);
+
+ if (!old->muted_valid || (entry.muted != old->muted))
+ send_mute_updated_signal(de, &entry);
+
+ } else {
+ de = dbus_entry_new(u, name);
+ pa_assert_se(pa_hashmap_put(u->dbus_entries, de->entry_name, de));
+ send_new_entry_signal(de);
+ }
+#endif
+
if (apply_immediately)
apply_entry(u, name, &entry);
+ }
+
+#ifdef HAVE_DBUS
+ if (old)
+ pa_xfree(old);
+#endif
}
trigger_save(u);