summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2021-05-18 17:51:16 +0200
committerJens Georg <mail@jensge.org>2021-05-24 08:03:44 +0000
commit098687e9b498c1dd56bb8b8cf7a4d86805801b0b (patch)
tree65415aa218669d1374f3a33253ebd7251f243416 /examples
parent4c6416549e07e41a6e0a4f063a0431e1d125871b (diff)
downloadgupnp-098687e9b498c1dd56bb8b8cf7a4d86805801b0b.tar.gz
examples: Add get-volume.py
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/get-volume.py69
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()