diff options
author | Jens Georg <mail@jensge.org> | 2021-05-18 17:51:16 +0200 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2021-05-24 08:03:44 +0000 |
commit | 098687e9b498c1dd56bb8b8cf7a4d86805801b0b (patch) | |
tree | 65415aa218669d1374f3a33253ebd7251f243416 /examples | |
parent | 4c6416549e07e41a6e0a4f063a0431e1d125871b (diff) | |
download | gupnp-098687e9b498c1dd56bb8b8cf7a4d86805801b0b.tar.gz |
examples: Add get-volume.py
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/get-volume.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/examples/get-volume.py b/examples/get-volume.py new file mode 100755 index 0000000..ccbd162 --- /dev/null +++ b/examples/get-volume.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGE. + +import gi +gi.require_version('GUPnP', '1.2') + +from gi.repository import GUPnP +from gi.repository import GLib +from gi.repository import GObject + +RENDERING_CONTROL = "urn:schemas-upnp-org:service:RenderingControl:1" + +def do_quit(): + global l + + l.quit() + return False + +def on_service_introspection(proxy, res): + result = proxy.introspect_finish(res) + action_info = result.get_action('GetVolume') + state_variable_name = action_info.arguments[1].related_state_variable + + channel = result.get_state_variable(state_variable_name) + print (f'Calling GetVolume for channel {channel.allowed_values[0]}') + + action = GUPnP.ServiceProxyAction.new_from_list('GetVolume', ["InstanceID", "Channel"], [0, channel.allowed_values[0]]) + proxy.call_action (action, None) + success, [volume] = action.get_result_list (["CurrentVolume"], [GObject.TYPE_FLOAT]) + print(volume) + +def on_sp_available(cp, proxy): + print(f'Got ServiceProxy {proxy.get_id()} at {proxy.get_location()}') + print('Introspecting service...') + proxy.introspect_async(None, on_service_introspection) + +if __name__ == '__main__': + global l + print("Looking for renderers and querying volumes fo 10s") + + l = GLib.MainLoop() + context = GUPnP.Context.new ('wlp3s0', 0) + cp = GUPnP.ControlPoint.new (context, RENDERING_CONTROL) + cp.set_active (True) + + cp.connect ('service-proxy-available', on_sp_available) + GLib.timeout_add_seconds (10, do_quit) + l.run() |