audio linux implemented

This commit is contained in:
Sebastian Hildebrandt 2021-01-14 07:46:30 +01:00
parent 636e3f6b50
commit e1b34727a6

View File

@ -14,7 +14,7 @@
// ---------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------
const exec = require('child_process').exec; const exec = require('child_process').exec;
// const execSync = require('child_process').execSync; const execSync = require('child_process').execSync;
const util = require('./util'); const util = require('./util');
// const fs = require('fs'); // const fs = require('fs');
@ -38,29 +38,44 @@ const winPrinterStatus = {
7: 'Offline', 7: 'Offline',
} }
function parseLinuxCupsHeader(lines) { function getLinuxAudioPci() {
const result = {} let cmd = 'lspci -v 2>/dev/null'
if (lines && lines.length) { let result = [];
if (lines[0].indexOf(' CUPS v') > 0) { try {
const parts = lines[0].split(' CUPS v'); const parts = execSync(cmd).toString().split('\n\n');
result.cupsVersion = parts[1]; for (let i = 0; i < parts.length; i++) {
const lines = parts[i].split('\n');
if (lines && lines.length && lines[0].toLowerCass().indexOf('audio') >= 0) {
const audio = {};
audio.slotId = lines[0].split(' ')[0];
audio.driver = util.getValue(lines, 'Kernel driver in use', ':', true) || util.getValue(lines, 'Kernel modules', ':', true)
result.push(audio);
}
} }
return result;
} catch (e) {
return result;
} }
return result;
} }
function parseLinuxCupsPrinter(lines) { function parseLinuxAudioPciMM(lines, audioPCI) {
const result = {}; const result = {};
const printerId = util.getValue(lines, 'PrinterId', ' '); const slotId = util.getValue(lines, 'Slot');
result.id = printerId ? parseInt(printerId, 10) : null;
result.name = util.getValue(lines, 'Info', ' '); const pciMatch = audioPCI.filter(function (item) { return item.slotId === slotId })
result.model = lines.length > 0 && lines[0] ? lines[0].split(' ')[0] : '';
result.uri = util.getValue(lines, 'DeviceURI', ' '); result.id = slotId;
result.uuid = util.getValue(lines, 'UUID', ' '); result.name = util.getValue(lines, 'SDevice');
result.status = util.getValue(lines, 'State', ' '); result.type = util.getValue(lines, 'Class');
result.local = util.getValue(lines, 'Location', ' ').toLowerCase().startsWith('local'); result.manufacturer = util.getValue(lines, 'SVendor');
result.builtIn = null;
result.default = null; result.default = null;
result.shared = util.getValue(lines, 'Shared', ' ').toLowerCase().startsWith('yes'); result.revision = util.getValue(lines, 'Revision');
result.driver = pciMatch && pciMatch.length === 1 && pciMatch[0].driver ? pciMatch[0].driver : '';
result.channel = null;
result.in = null;
result.out = null;
result.status = 'online';
return result; return result;
} }
@ -80,6 +95,7 @@ function parseLinuxLpstatPrinter(lines, id) {
return result; return result;
} }
// id
// name // name
// type // type
// manufacturer // manufacturer
@ -147,17 +163,18 @@ function audio(callback) {
process.nextTick(() => { process.nextTick(() => {
let result = []; let result = [];
if (_linux || _freebsd || _openbsd || _netbsd) { if (_linux || _freebsd || _openbsd || _netbsd) {
let cmd = 'cat /etc/cups/printers.conf 2>/dev/null' let cmd = 'lspci -vmm 2>/dev/null'
exec(cmd, function (error, stdout) { exec(cmd, function (error, stdout) {
// printers.conf // PCI
if (!error) { if (!error) {
const parts = stdout.toString().split('<Printer '); const audioPCI = getLinuxAudioPci();
const printerHeader = parseLinuxCupsHeader(parts[0]); const parts = stdout.toString().split('\n\n');
for (let i = 1; i < parts.length; i++) { for (let i = 0; i < parts.length; i++) {
const printers = parseLinuxCupsPrinter(parts[i].split('\n')); const lines = parts[i].split('\n');
printers.engine = 'CUPS'; if (util.getValue(lines, 'class', ':', true).toLowerCase().indexOf('audio') >= 0) {
printers.engineVersion = printerHeader.cupsVersion; const audio = parseLinuxAudioPciMM(lines, audioPCI);
result.push(printers); result.push(audio);
}
} }
} }
if (result.length === 0) { if (result.length === 0) {
@ -195,9 +212,9 @@ function audio(callback) {
if (!error) { if (!error) {
try { try {
const outObj = JSON.parse(stdout.toString()); const outObj = JSON.parse(stdout.toString());
if (outObj.SPAudioDataType && outObj.SPAudioDataType.length) { if (outObj.SPAudioDataType && outObj.SPAudioDataType.length && outObj.SPAudioDataType[0] && outObj.SPAudioDataType[0]['_items'] && outObj.SPAudioDataType[0]['_items'].length) {
for (let i = 0; i < outObj.SPAudioDataType.length; i++) { for (let i = 0; i < outObj.SPAudioDataType[0]['_items'].length; i++) {
const audio = parseDarwinAudio(outObj.SPAudioDataType[i], i); const audio = parseDarwinAudio(outObj.SPAudioDataType[0]['_items'][i], i);
result.push(audio); result.push(audio);
} }
} }