osjs-hardware-provider
Version:
A service provider that adds hardware acces.
86 lines (83 loc) • 4.21 kB
JavaScript
const {EventEmitter} = require('@osjs/event-emitter');
class ServiceProvider {
constructor(core,options={}) {
this.core = core;
this.options = options;
}
provides() {
return [
'hw'
];
}
async init() {
const callbackWrapper = (promise,cb) => {
const isError = result => result.type == 'error';
if(typeof(cb) == 'function') {
return promise
.then(result => isError(result) ? cb(new Error.result.message) : cb(null,typeof(result.value) == 'undefined' ? result : result.value))
.catch(error => cb(error));
}
return promise.then(result => isError(result) ? Promise.reject(result.message) : typeof(result.value) == 'undefined' ? result : result.value);
};
const req = (name,cb) => {
const promise = this.core.request(this.core.url('hardware/'+name),{},'json');
return callbackWrapper(promise,cb);
};
this.core.singleton('hw',() => ({
audio: {
getCards: cb => req('audio/getCards',cb),
getClients: cb => req('audio/getClients',cb),
getModules: cb => req('audio/getModules',cb),
getSinks: cb => req('audio/getSinks',cb),
getSinkInputByIndex: (index,cb) => req('audio/getSinkInputByIndex/'+index,cb),
getSources: cb => req('audio/getSources',cb),
getSourceOutputByIndex: (index,cb) => req('audio/getSourceOutputByIndex/'+index,cb),
setSinkVolumes: (index,vol,cb) => req('audio/setSinkVolumes/'+index+'?value='+vol,cb),
setSourceVolumes: (index,vol,cb) => req('audio/setSourceVolumes/'+index+'?value='+vol,cb),
setSinkMute: (index,enable,cb) => req('audio/setSinkMute/'+index+'/'+(enable ? 'true' : 'false'),cb),
setSourceMute: (index,enable,cb) => req('audio/setSourceMute/'+index+'/'+(enable ? 'true' : 'false'),cb),
setSinkSuspend: (index,enable,cb) => req('audio/setSinkSuspend/'+index+'/'+(enable ? 'true' : 'false'),cb),
setSourceSuspend: (index,enable,cb) => req('audio/setSourceSuspend/'+index+'/'+(enable ? 'true' : 'false'),cb),
setDefaultSinkByName: (name,cb) => req('audio/setDefaultSinkByName/'+name,cb),
setDefaultSourceByName: (name,cb) => req('audio/setDefaultSourceByName/'+name,cb),
killClientByIndex: (index,cb) => req('audio/killClientByIndex/'+index,cb),
killSinkInputByIndex: (index,cb) => req('audio/killSinkInputByIndex/'+index,cb),
killSourceOutputByIndex: (index,cb) => req('audio/killSourceOutputByIndex/'+index,cb),
moveSinkInput: (index,dest,cb) => req('audio/moveSinkInput/'+index+'/'+dest,cb),
moveSourceOutput: (index,dest,cb) => req('audio/moveSourceOutput/'+index+'/'+dest,cb),
setSinkPort: (index,name,cb) => req('audio/setSinkPort/'+index+'/'+name,cb),
setSourcePort: (index,name,cb) => req('audio/setSourcePort/'+index+'/'+name,cb),
setCardProfile: (index,name,cb) => req('audio/setCardProfile/'+index+'/'+name,cb),
updateClientProperties: (props,mode,cb) => req('audio/updateClientProperties/'+JSON.stringify(props)+'/'+mode,cb),
removeClientProperties: (props,mode,cb) => req('audio/updateClientProperties/'+props.join(','),cb),
pactl: (commands,cb) => req('audio/pactl?cmd='+commands,cb)
},
battery: { get: cb => req('battery/get',cb) },
cpu: {
get: cb => req('cpu/get',cb),
flags: cb => req('cpu/flags',cb),
speed: cb => req('cpu/speed',cb),
temp: cb => req('cpu/temp',cb)
},
graphics: { get: cb => req('graphics/get',cb) },
net: {
connections: cb => req('net/connections',cb),
interfaces: cb => req('net/interfaces',cb),
getDefaultInterfaceName: cb => req('net/getDefaultInterfaceName',cb),
stats: (iface,cb) => req('net/stats/'+iface,cb)
},
mem: { get: cb => req('mem/get',cb), get: cb => req('mem/layout',cb) },
storage: {
devices: cb => req('storage/devices',cb),
fs: cb => req('storage/fs',cb),
layout: cb => req('storage/layout',cb),
io: cb => req('storage/io',cb),
stat: cb => req('storage/stat',cb)
},
sys: { get: cb => req('sys/get',cb), bios: cb => req('sys/bios',cb), baseboard: cb => req('sys/baseboard',cb) }
}));
}
start() {}
destroy() {}
}
module.exports = ServiceProvider;