mirror of
https://github.com/openwrt/luci.git
synced 2025-02-12 01:11:06 +00:00
102 lines
2.3 KiB
JavaScript
102 lines
2.3 KiB
JavaScript
'use strict';
|
|
'require baseclass';
|
|
'require fs';
|
|
|
|
return baseclass.extend({
|
|
|
|
_mmcliBin: '/usr/bin/mmcli',
|
|
|
|
_emptyStringValue: '--',
|
|
|
|
_parseIndex: function (dbusPath) {
|
|
var index = dbusPath.split('/').slice(-1);
|
|
return parseInt(index);
|
|
},
|
|
|
|
_parseOutput: function (output) {
|
|
try {
|
|
return this._removeEmptyStrings(JSON.parse(output));
|
|
} catch (err) {
|
|
return null;
|
|
}
|
|
},
|
|
|
|
_removeEmptyStrings: function (obj) {
|
|
if (obj == null) {
|
|
return obj;
|
|
}
|
|
|
|
if (typeof obj == 'string') {
|
|
if (obj == this._emptyStringValue) {
|
|
obj = null;
|
|
}
|
|
} else if (Array.isArray()) {
|
|
obj = obj.map(L.bind(function (it) {
|
|
return this._removeEmptyStrings(it);
|
|
}, this));
|
|
} else {
|
|
var keys = Object.keys(obj);
|
|
keys.forEach(L.bind(function (key) {
|
|
obj[key] = this._removeEmptyStrings(obj[key]);
|
|
}, this));
|
|
}
|
|
|
|
return obj;
|
|
},
|
|
|
|
getModems: function () {
|
|
return fs.exec_direct(this._mmcliBin, [ '-L', '-J' ]).then(L.bind(function (res) {
|
|
var json = this._parseOutput(res);
|
|
if (json == null) {
|
|
return [];
|
|
}
|
|
var modems = json['modem-list'];
|
|
var tasks = [];
|
|
|
|
modems.forEach(L.bind(function (modem) {
|
|
var index = this._parseIndex(modem);
|
|
if (!isNaN(index)) {
|
|
tasks.push(this.getModem(index));
|
|
}
|
|
}, this));
|
|
return Promise.all(tasks);
|
|
}, this));
|
|
},
|
|
|
|
getModem: function (index) {
|
|
return fs.exec_direct(this._mmcliBin, [ '-m', index, '-J' ]).then(L.bind(function (modem) {
|
|
return this._parseOutput(modem);
|
|
}, this));
|
|
},
|
|
|
|
getModemSims: function (modem) {
|
|
var tasks = [];
|
|
var simSlots = modem.generic['sim-slots'];
|
|
var sim = modem.generic.sim;
|
|
if (sim != null && !simSlots.includes(sim)) {
|
|
simSlots.push(sim);
|
|
}
|
|
|
|
simSlots.forEach(L.bind(function (modem) {
|
|
var index = this._parseIndex(modem);
|
|
if (!isNaN(index)) {
|
|
tasks.push(this.getSim(index));
|
|
}
|
|
}, this));
|
|
return Promise.all(tasks);
|
|
},
|
|
|
|
getSim: function (index) {
|
|
return fs.exec_direct(this._mmcliBin, [ '-i', index, '-J' ]).then(L.bind(function (sim) {
|
|
return this._parseOutput(sim);
|
|
}, this));
|
|
},
|
|
|
|
getModemLocation: function (modem) {
|
|
var index = this._parseIndex(modem['dbus-path']);
|
|
return fs.exec_direct(this._mmcliBin, [ '-m', index, '--location-get', '-J' ]).then(L.bind(function (location) {
|
|
return this._parseOutput(location);
|
|
}, this));
|
|
}
|
|
});
|