[gupnp] Add some JavaScript examples



commit b0c4c35ff5535c892c3b66ca1deab2950f97a830
Author: Jens Georg <mail jensge org>
Date:   Fri Feb 5 22:57:15 2016 +0100

    Add some JavaScript examples
    
    Signed-off-by: Jens Georg <mail jensge org>

 examples/browse.js      |   84 +++++++++++++++++++++++++++++++++++++++++++++++
 examples/get-volume.js  |   54 ++++++++++++++++++++++++++++++
 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');


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