/*
* GPII Node.js ALSA Volume Bridge
*
* Copyright 2013 Emergya
*
* Licensed under the New BSD license. You may not use this file except in
* compliance with this License.
*
* You may obtain a copy of the License at
* https://github.com/GPII/linux/blob/master/LICENSE.txt
*
* The research leading to these results has received funding from the European Union's
* Seventh Framework Programme (FP7/2007-2013)
* under grant agreement no. 289016.
*/
"use strict";
var fluid = require("universal");
var gpii = fluid.registerNamespace("gpii");
var alsa = require("./nodealsa/build/Release/nodealsa.node");
fluid.registerNamespace("gpii.alsa");
fluid.defaults("gpii.alsa.getSystemVolume", {
gradeNames: "fluid.function",
argumentMap: {
}
});
fluid.defaults("gpii.alsa.setSystemVolume", {
gradeNames: "fluid.function",
argumentMap: {
value: 0
}
});
fluid.defaults("gpii.alsa.get", {
gradeNames: "fluid.function",
argumentMap: {
payload: 0
}
});
fluid.defaults("gpii.alsa.set", {
gradeNames: "fluid.function",
argumentMap: {
payload: 0
}
});
gpii.alsa.getSystemVolume = function () {
return alsa.getSystemVolume();
};
gpii.alsa.setSystemVolume = function (value) {
return alsa.setSystemVolume(value);
};
// TODO: http://issues.gpii.net/browse/GPII-1028
// This mechanism has been literaly copied/pasted from XRandR's settings
// handler, which looks like a good approach to deal with this kind of
// settings handler. The use of this approach should be consolidated
// as an utility inside the GPII.
//
gpii.alsa.allSettings = {
masterVolume: {
get: "gpii.alsa.getSystemVolume",
set: "gpii.alsa.setSystemVolume"
}
};
gpii.alsa.getImpl = function (settingsRequest) {
settingsRequest = settingsRequest || gpii.alsa.allSettings;
var settings = fluid.transform(settingsRequest, function (value, key) {
var funcEntry = gpii.alsa.allSettings[key];
Eif (funcEntry) {
return fluid.invokeGlobalFunction(funcEntry.get);
} else {
fluid.fail("Invalid key to ALSA settings handler - " +
key + " - valid choices are " + JSON.stringify(fluid.keys(gpii.alsa.allSettings)));
}
});
return settings;
};
gpii.alsa.get = function (payload) {
var app = fluid.copy(payload);
for (var appId in app) {
for (var j = 0; j < app[appId].length; j++) {
var settings = gpii.alsa.getImpl(app[appId][j].settings);
var noOptions = { settings: settings };
app[appId][j] = noOptions;
}
}
return app;
};
gpii.alsa.set = function (payload) {
var app = fluid.copy(payload);
var settings = app["org.alsa-project"][0].settings;
var oldValue = alsa.getSystemVolume();
alsa.setSystemVolume(settings.masterVolume);
var newSettingsResponse = {};
newSettingsResponse.masterVolume = {
"oldValue": oldValue,
"newValue": settings.masterVolume
};
var noOptions = {settings: newSettingsResponse};
fluid.set(app, ["org.alsa-project", 0], noOptions);
return app;
};
|