FUNCT Integrate AGLJS library
authorHumberto Alfonso Díaz <humberto.alfonso@asvito.es>
Mon, 7 Oct 2019 11:18:06 +0000 (13:18 +0200)
committerLorenzo Tilve <ltilve@igalia.com>
Tue, 4 Feb 2020 08:42:15 +0000 (09:42 +0100)
package.json
src/index.js
src/js/AFB.js [deleted file]
src/js/app.js
src/js/sliders.js

index d75f535..54c8b2f 100644 (file)
@@ -36,6 +36,7 @@
         "zip-webpack-plugin": "^3.0.0"
     },
     "dependencies": {
-        "mustache": "^3.1.0"
+        "mustache": "^3.1.0",
+        "agl-js-api": "0.0.0"
     }
 }
index fa62684..37b78c4 100644 (file)
  */
 
 /* JS */
-import './js/AFB.js';
 import { init } from './js/app';
 import { increase, decrease, change } from './js/sliders';
 
 /* CSS */
 import './styles/app.scss';
 
+
 window.increase = increase;
 window.decrease = decrease;
 window.change = change;
diff --git a/src/js/AFB.js b/src/js/AFB.js
deleted file mode 100644 (file)
index d6e6bfa..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (C) 2017, 2018 "IoT.bzh"
- * Author: José Bollo <jose.bollo@iot.bzh>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-AFB = function(base, initialtoken){
-
-if (typeof base != "object")
-    base = { base: base, token: initialtoken };
-
-var initial = {
-    base: base.base || "api",
-    token: base.token || initialtoken || "HELLO",
-    host: base.host || window.location.host,
-    url: base.url || undefined
-};
-
-var urlws = initial.url || "ws://"+initial.host+"/"+initial.base;
-
-/*********************************************/
-/****                                     ****/
-/****             AFB_context             ****/
-/****                                     ****/
-/*********************************************/
-var AFB_context;
-{
-    var UUID = undefined;
-    var TOKEN = initial.token;
-
-    var context = function(token, uuid) {
-        this.token = token;
-        this.uuid = uuid;
-    }
-
-    context.prototype = {
-        get token() {return TOKEN;},
-        set token(tok) {if(tok) TOKEN=tok;},
-        get uuid() {return UUID;},
-        set uuid(id) {if(id) UUID=id;}
-    };
-
-    AFB_context = new context();
-}
-/*********************************************/
-/****                                     ****/
-/****             AFB_websocket           ****/
-/****                                     ****/
-/*********************************************/
-var AFB_websocket;
-{
-    var CALL = 2;
-    var RETOK = 3;
-    var RETERR = 4;
-    var EVENT = 5;
-
-    var PROTO1 = "x-afb-ws-json1";
-
-    AFB_websocket = function(on_open, on_abort) {
-        var u = urlws, p = '?';
-        if (AFB_context.token) {
-            u = u + '?x-afb-token=' + AFB_context.token;
-            p = '&';
-        }
-        if (AFB_context.uuid)
-            u = u + p + 'x-afb-uuid=' + AFB_context.uuid;
-        this.ws = new WebSocket(u, [ PROTO1 ]);
-        this.url = u;
-        this.pendings = {};
-        this.awaitens = {};
-        this.counter = 0;
-        this.ws.onopen = onopen.bind(this);
-        this.ws.onerror = onerror.bind(this);
-        this.ws.onclose = onclose.bind(this);
-        this.ws.onmessage = onmessage.bind(this);
-        this.onopen = on_open;
-        this.onabort = on_abort;
-    }
-
-    function onerror(event) {
-        var f = this.onabort;
-        if (f) {
-            delete this.onopen;
-            delete this.onabort;
-            f && f(this);
-        }
-        this.onerror && this.onerror(this);
-    }
-
-    function onopen(event) {
-        var f = this.onopen;
-        delete this.onopen;
-        delete this.onabort;
-        f && f(this);
-    }
-
-    function onclose(event) {
-        var err = {
-            jtype: 'afb-reply',
-            request: {
-                status:    'disconnected',
-                info: 'server hung up'
-            }
-        };
-        for (var id in this.pendings) {
-            try { this.pendings[id][1](err); } catch (x) {/*NOTHING*/}
-        }
-        this.pendings = {};
-        this.onclose && this.onclose();
-    }
-
-    function fire(awaitens, name, data) {
-        var a = awaitens[name];
-        if (a)
-            a.forEach(function(handler){handler(data);});
-        var i = name.indexOf("/");
-        if (i >= 0) {
-            a = awaitens[name.substring(0,i)];
-            if (a)
-                a.forEach(function(handler){handler(data);});
-        }
-        a = awaitens["*"];
-        if (a)
-            a.forEach(function(handler){handler(data);});
-    }
-
-    function reply(pendings, id, ans, offset) {
-        if (id in pendings) {
-            var p = pendings[id];
-            delete pendings[id];
-            try { p[offset](ans); } catch (x) {/*TODO?*/}
-        }
-    }
-
-    function onmessage(event) {
-        var obj = JSON.parse(event.data);
-        var code = obj[0];
-        var id = obj[1];
-        var ans = obj[2];
-        AFB_context.token = obj[3];
-        switch (code) {
-        case RETOK:
-            reply(this.pendings, id, ans, 0);
-            break;
-        case RETERR:
-            reply(this.pendings, id, ans, 1);
-            break;
-        case EVENT:
-        default:
-            fire(this.awaitens, id, ans);
-            break;
-        }
-    }
-
-    function close() {
-        this.ws.close();
-        this.ws.onopen =
-        this.ws.onerror =
-        this.ws.onclose =
-        this.ws.onmessage =
-        this.onopen =
-        this.onabort = function(){};
-    }
-
-    function call(method, request, callid) {
-        return new Promise((function(resolve, reject){
-            var id, arr;
-            if (callid) {
-                id = String(callid);
-                if (id in this.pendings)
-                    throw new Error("pending callid("+id+") exists");
-            } else {
-                do {
-                    id = String(this.counter = 4095 & (this.counter + 1));
-                } while (id in this.pendings);
-            }
-            this.pendings[id] = [ resolve, reject ];
-            arr = [CALL, id, method, request ];
-            if (AFB_context.token) arr.push(AFB_context.token);
-            this.ws.send(JSON.stringify(arr));
-        }).bind(this));
-    }
-
-    function onevent(name, handler) {
-        var id = name;
-        var list = this.awaitens[id] || (this.awaitens[id] = []);
-        list.push(handler);
-    }
-
-    AFB_websocket.prototype = {
-        close: close,
-        call: call,
-        onevent: onevent
-    };
-}
-/*********************************************/
-/****                                     ****/
-/****                                     ****/
-/****                                     ****/
-/*********************************************/
-return {
-    context: AFB_context,
-    ws: AFB_websocket
-};
-};
index 773e5b0..3b8ae97 100644 (file)
@@ -1,5 +1,6 @@
 import Mustache from 'mustache';
-import { init as init_sliders } from './sliders';
+import { audiomixer } from 'agl-js-api';
+import { setValue } from './sliders';
 
 var template;
 
@@ -15,15 +16,24 @@ export function init() {
     template = document.getElementById('slider-template').innerHTML;
     Mustache.parse(template);
 
-    var sliders =  [];
-    for( var i=0; i<10; i++) {
-        sliders.push({
-            id: i,
-            name: 'Volume '+i,
-            value: Math.floor(Math.random()*100)
-        });
-    }
+    audiomixer.list_controls().then(function(result) {
+        var sliders =  [];
+       for( var i=0; i<result.length; i++) {
+            sliders.push({
+                id: result[i].control,
+                name: result[i].control,
+                value: Math.floor(result[i].volume*100)
+            });
+        }
+
+        render_sliders(sliders);
+    }).catch(function(error) {
+        console.error('ERROR loading sliders', error);
+    });
 
-    init_sliders(sliders);
-    render_sliders(sliders);
+    audiomixer.on_volume_changed(function(data){
+        setValue(document.getElementById("slider-"+data.control), Math.ceil(data.value*100), true);
+    }).then(function(result) {
+        console.log("SUBSCRIBED TO VOLUME CHANGED");
+    });
 }
\ No newline at end of file
index 624e8e4..7208a85 100644 (file)
@@ -1,4 +1,4 @@
-this.sliders = {};
+import { audiomixer } from 'agl-js-api';
 
 function getRootNode(node) {
     while(!node.hasAttribute('slider-id') && node.parentNode) {
@@ -21,7 +21,7 @@ function getValue(node) {
     }
 }
 
-function setValue(node, value) {
+export function setValue(node, value, notUpdate) {
     node = getRootNode(node);
     if( node ){
         value = Math.max(Math.min(value, 100), 0);
@@ -29,28 +29,20 @@ function setValue(node, value) {
         node.getElementsByTagName('progress')[0].value = value;
         node.getElementsByTagName('input')[0].value = value;
         node.getElementsByClassName('value')[0].innerHTML = value+'%';
+        if( !notUpdate ) {
+            audiomixer.set_volume(node.getAttribute('slider-id'), value/100);
+        }
     }
 }
 
-function init(sliders) {
-    console.log(sliders);
-}
-
-function increase(node) {
+export function increase(node) {
     setValue(node, getValue(node)+5);
 }
 
-function decrease(node) {
+export function decrease(node) {
     setValue(node, getValue(node)-5);
 }
 
-function change(node) {
+export function change(node) {
     setValue(node, node.value);
-}
-
-module.exports = {
-    init: init,
-    increase: increase,
-    decrease: decrease,
-    change: change
 }
\ No newline at end of file