diff options
author | Jens Georg <mail@jensge.org> | 2016-02-05 22:57:15 +0100 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2016-02-05 22:57:15 +0100 |
commit | b0c4c35ff5535c892c3b66ca1deab2950f97a830 (patch) | |
tree | b2f3990a16afdb16c0e821ebf90c9fde9c5ab20b /examples | |
parent | 0946b67d3016c8fe37aaf70ed484ae36c15cbbf1 (diff) | |
download | gupnp-b0c4c35ff5535c892c3b66ca1deab2950f97a830.tar.gz |
Add some JavaScript examples
Signed-off-by: Jens Georg <mail@jensge.org>
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/browse.js | 84 | ||||
-rwxr-xr-x | examples/get-volume.js | 54 | ||||
-rwxr-xr-x | examples/last-change.js | 53 |
3 files changed, 191 insertions, 0 deletions
diff --git a/examples/browse.js b/examples/browse.js new file mode 100755 index 0000000..e7ec30e --- /dev/null +++ b/examples/browse.js @@ -0,0 +1,84 @@ +#!/usr/bin/gjs +// +// Copyright (c) 2016, Jens Georg <mail@jensge.org> +// +// All rights reserved. +// +// 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. + +const Mainloop = imports.mainloop; +const GUPnP = imports.gi.GUPnP; +const GObject = imports.gi.GObject; +const GLib = imports.gi.GLib; +const Soup = imports.gi.Soup; + +const MEDIA_SERVER = "urn:schemas-upnp-org:device:MediaServer:1"; +const CONTENT_DIR = "urn:schemas-upnp-org:service:ContentDirectory"; + +function _on_browse_ready (cd, action) +{ + let foo = [GObject.TYPE_STRING, GObject.TYPE_UINT, GObject.TYPE_UINT, GObject.TYPE_UINT]; + + let [a, b] = cd.end_action_list (action, ["Result", "NumberReturned", "TotalMatches", "UpdateID"], foo); + cd.unref(); + + if (a) { + print ("Number Returned:", b[1]); + print ("Total Matches:", b[2]); + print ("UpdateID:", b[3]); + } +} + +function _on_proxy_available (control_point, proxy) { + print ("-> Proxy available!", proxy.get_friendly_name ()); + var cd = proxy.get_service (CONTENT_DIR); + + // FIXME: This needs probably fixing on C side + cd.ref(); + + print ("-> Start browsing of", proxy.get_friendly_name ()); + cd.begin_action_list ("Search", + ["ContainerID", "Filter", "StartingIndex", "RequestedCount", "SortCriteria", "SearchCriteria"], + ["0", "*", 0, 10, "+dc:title", "upnp:class derivedFrom \"object.item\""], + _on_browse_ready) +} + +function _on_proxy_unavailable (control_point, proxy) { +} + +function _on_context_available (manager, context) { + + var dms_cp = new GUPnP.ControlPoint ( { 'client': context, 'target': MEDIA_SERVER } ); + print ("Attaching to", context.host_ip); + dms_cp.connect('device-proxy-available', _on_proxy_available); + dms_cp.connect('device-proxy-unavailable', _on_proxy_unavailable); + dms_cp.set_active (true); + + manager.manage_control_point (dms_cp); +} + + +var cm = GUPnP.ContextManager.create (0); +cm.connect('context-available', _on_context_available) + +Mainloop.run ('hello'); diff --git a/examples/get-volume.js b/examples/get-volume.js new file mode 100755 index 0000000..8f2939e --- /dev/null +++ b/examples/get-volume.js @@ -0,0 +1,54 @@ +#!/usr/bin/gjs +// +// Copyright (c) 2016, Jens Georg <mail@jensge.org> +// +// All rights reserved. +// +// 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. + + +const Mainloop = imports.mainloop; +const GUPnP = imports.gi.GUPnP; + +const CONTENT_DIR = "urn:schemas-upnp-org:service:RenderingControl:2"; + +function _on_ready () { +} + +function _on_sp_available (cp, proxy) { + print ("Got Proxy"); + for (var i = 0; i < 1000; ++i) { + proxy.send_action_list ("GetVolume", + ["InstanceId", "Channel"], + [0, 0], + [], + []); + } +} + +var context = new GUPnP.Context ( {'interface': "lo"}); +context.init(null); +var cp = new GUPnP.ControlPoint ( {'client': context, 'target' : CONTENT_DIR}); +cp.connect ("service-proxy-available", _on_sp_available); +cp.active = true; +Mainloop.run (""); diff --git a/examples/last-change.js b/examples/last-change.js new file mode 100755 index 0000000..a68e0d7 --- /dev/null +++ b/examples/last-change.js @@ -0,0 +1,53 @@ +#!/usr/bin/gjs +// +// Copyright (c) 2016, Jens Georg <mail@jensge.org> +// +// All rights reserved. +// +// 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. + +const Mainloop = imports.mainloop; +const GUPnP = imports.gi.GUPnP; +const GObject = imports.gi.GObject; + +const CONTENT_DIR = "urn:schemas-upnp-org:service:AVTransport:1"; + +function _on_last_change (proxy, variable, value) { + print (variable); + print (value); +} + +function _on_sp_available (cp, proxy) { + print ("Got Proxy, subscribing to LastChange"); + proxy.add_notify ("LastChange", + GObject.TYPE_STRING, + _on_last_change); + proxy.subscribed = true; +} + +var context = new GUPnP.Context ({ interface: "wlan0"}); +context.init (null); +var cp = new GUPnP.ControlPoint ( { 'client' : context, 'target' : CONTENT_DIR }); +cp.connect ("service-proxy-available", _on_sp_available); +cp.active = true; +Mainloop.run ('hello'); |