71 lines
1.7 KiB
JavaScript
71 lines
1.7 KiB
JavaScript
const nativeCode = require('bindings')('miccontrol.node');
|
|
const {promisify} = require("util");
|
|
let connectionStarted = false;
|
|
let connected = false;
|
|
let queuedRequests = [];
|
|
|
|
let aAddon = [
|
|
"connectToPulse",
|
|
//"getSources"
|
|
].reduce((obj, fn) => {
|
|
obj[fn] = promisify(nativeCode[fn]);
|
|
return obj;
|
|
}, {});
|
|
|
|
module.exports = () => {
|
|
console.log("Starting connection");
|
|
if(!connectionStarted) {
|
|
nativeCode.connectToPulse((e) => {
|
|
console.log("CONNECTED!");
|
|
if(e) {
|
|
connectionStarted = false;
|
|
} else {
|
|
connected = true;
|
|
}
|
|
queuedRequests.forEach(f => f(e));
|
|
queuedRequests = [];
|
|
});
|
|
connectionStarted = true;
|
|
}
|
|
|
|
const miccontrol = {
|
|
getSources: () => {
|
|
return new Promise(async (res, rej) => {
|
|
if(!connected) {
|
|
return queuedRequests.push(e => e ? rej(e) : res(miccontrol.getSources()));
|
|
}
|
|
const sources = await aAddon.getSources();
|
|
|
|
const sourceControllers = sources.map((source) => {
|
|
let {id, description, isDefault} = source;
|
|
return {
|
|
id,
|
|
description,
|
|
isDefault,
|
|
mute: async () => {
|
|
return aAddon.muteSource(id);
|
|
},
|
|
unmute: async () => {
|
|
return aAddon.unmuteSource(id);
|
|
},
|
|
isMuted: async () => {
|
|
return aAddon.isSourceMuted(id);
|
|
},
|
|
toggleMute: async () => {
|
|
if(await aAddon.isSourceMuted(id)) {
|
|
return aAddon.unmuteSource(id);
|
|
}
|
|
return aAddon.muteSource(id);
|
|
}
|
|
};
|
|
});
|
|
|
|
res(sourceControllers)
|
|
});
|
|
}
|
|
};
|
|
|
|
return miccontrol;
|
|
}
|
|
|