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 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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user