1. DBus Iface RFC
Currently, the gsmartmix DBus iface are not stabilized/clean/standard at all.
Here is an attempt to define some cleaner interfaces.
There is no more Register/GetSinkList mechanism, GetProperties (beurk), SinkAdded/SinkRemoved signals and so on. This facilities are provided by DBus somehow (list of Queued Owners, Introspection.). The only issue I see is that there is no "Changed" signal to be notified when a property is changed (or when we would like to signal it).
<?xml version="1.0" encoding="UTF-8" ?> <node name="/org/gnome/GSmartMix/AudioManager"> <interface name="org.gnome.GSmartMix.AudioManager"> <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="gsmm_audio_manager"/> <method name="RequestState"> <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> <arg type="s" name="state" direction="in"/> <arg type="b" name="granted" direction="out"/> </method> <method name="RequestBackend"> <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> <arg type="s" name="backend" direction="out"/> <arg type="b" name="granted" direction="out"/> </method> <method name="RequestVolumeLevel"> <annotation name="org.freedesktop.DBus.GLib.Async" value=""/> <arg type="d" name="volume_level" direction="in"/> <arg type="b" name="granted" direction="out"/> </method> </interface> </node> <node name="/org/gnome/GSmartMix/AudioSink"> <interface name="org.gnome.GSmartMix.AudioSink"> <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="gsmm_audio_sink"/> <!-- (would be good to have notify=yes) or annotation? --> <!-- Application properties (should be move somewhere else!) --> <!-- uid can be get form the message bus api with name --> <property name="Prgname" type="s" access="read" /> <property name="Version" type="s" access="read" /> <property name="ApplicationName" type="s" access="read" /> <property name="HostName" type="s" access="read" /> <property name="CurrentTime" type="s" access="read" /> <!-- iso8601 --> <method name="Quit" /> <!-- Sound output properties (backend is not simple, survival time is a trick) --> <property name="SlideTime" type="u" access="readwrite" /> <property name="VolumeLevel" type="d" access="readwrite"/> <property name="Backend" type="s" access="readwrite"/> <property name="ClassName" type="s" access="readwrite"/> <property name="SurvivalTime" type="u" access="readwrite"/> <!-- playback interface (should be move and conform with the future common media player iface)--> <property name="State" type="s" access="readwrite"/> <property name="Position" type="u" access="readwrite"/> </interface> </node>