audio linux implemented
This commit is contained in:
parent
636e3f6b50
commit
e1b34727a6
77
lib/audio.js
77
lib/audio.js
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user