summaryrefslogtreecommitdiffstats
path: root/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js')
-rw-r--r--src/js/AFB.js215
-rw-r--r--src/js/app.js32
-rw-r--r--src/js/sliders.js24
3 files changed, 29 insertions, 242 deletions
diff --git a/src/js/AFB.js b/src/js/AFB.js
deleted file mode 100644
index d6e6bfa..0000000
--- a/src/js/AFB.js
+++ /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
-};
-};
diff --git a/src/js/app.js b/src/js/app.js
index 773e5b0..3b8ae97 100644
--- a/src/js/app.js
+++ b/src/js/app.js
@@ -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
diff --git a/src/js/sliders.js b/src/js/sliders.js
index 624e8e4..7208a85 100644
--- a/src/js/sliders.js
+++ b/src/js/sliders.js
@@ -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