summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2016-02-05 22:57:15 +0100
committerJens Georg <mail@jensge.org>2016-02-05 22:57:15 +0100
commitb0c4c35ff5535c892c3b66ca1deab2950f97a830 (patch)
treeb2f3990a16afdb16c0e821ebf90c9fde9c5ab20b /examples
parent0946b67d3016c8fe37aaf70ed484ae36c15cbbf1 (diff)
downloadgupnp-b0c4c35ff5535c892c3b66ca1deab2950f97a830.tar.gz
Add some JavaScript examples
Signed-off-by: Jens Georg <mail@jensge.org>
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/browse.js84
-rwxr-xr-xexamples/get-volume.js54
-rwxr-xr-xexamples/last-change.js53
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');