[gupnp/wip/phako/46: 6/7] examples: Add get-volume.py




commit 098687e9b498c1dd56bb8b8cf7a4d86805801b0b
Author: Jens Georg <mail jensge org>
Date:   Tue May 18 17:51:16 2021 +0200

    examples: Add get-volume.py

 examples/get-volume.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)
---
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()


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]