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