'use strict';
'require baseclass';
'require form';
'require fs';
'require view';
'require uci';
'require ui';
'require tools.widgets as widgets';
/*
Copyright 2025-2026 Rafał Wabik - IceG - From eko.one.pl forum
MIT License
*/
let pkg = {
get Name() { return 'modemdata'; },
get URL() { return 'https://openwrt.org/packages/pkgdata/' + pkg.Name + '/'; },
// Package Manager
get pkgMgrURINew() { return 'admin/system/package-manager'; },
// opkg
get pkgMgrURIOld() { return 'admin/system/opkg'; },
get modemdefURI() { return 'admin/modem/modemdata/modemdefine'; },
bestPkgMgrURI: function () {
return L.resolveDefault(
fs.stat('/www/luci-static/resources/view/system/package-manager.js'), null
).then(st => {
if (st && st.type === 'file')
return pkg.pkgMgrURINew;
return L.resolveDefault(fs.stat('/usr/libexec/package-manager-call'), null)
.then(st2 => (st2 ? pkg.pkgMgrURINew : pkg.pkgMgrURIOld));
}).catch(() => pkg.pkgMgrURIOld);
},
openInstallerSearch: function (query) {
return pkg.bestPkgMgrURI().then(uri => {
let q = query ? ('?query=' + encodeURIComponent(query)) : '';
window.open(L.url(uri) + q, '_blank', 'noopener');
});
}
};
return view.extend({
option_install_curl: function () {
return pkg.openInstallerSearch('curl');
},
checkPackages: function () {
return fs.exec_direct('/usr/bin/opkg', ['list-installed'], 'text')
.catch(function () {
return fs.exec_direct('/usr/libexec/opkg-call', ['list-installed'], 'text')
.catch(function () {
return fs.exec_direct('/usr/libexec/package-manager-call', ['list-installed'], 'text')
.catch(function () { return ''; });
});
})
.then(function (data) {
data = (data || '').trim();
return data ? data.split('\n') : [];
});
},
load: function () {
return Promise.all([
this.checkPackages()
]);
},
render: function (data) {
let installedList = Array.isArray(data[0]) ? data[0] : [];
let curlInstalled = installedList.some(function (s) { return s && s.indexOf('curl') !== -1; });
let m, s, o;
m = new form.Map('modemdata', _('Configuration'),
_('Configuration panel for modemdata and gui application.')
);
s = m.section(form.TypedSection, 'modemdata', '', null);
s.anonymous = true;
o = s.option(form.ListValue, 'updtime', _('Refresh rate'),
_('Set how often the data should be refreshed in the Modem(s) tab. \
Important \
Not every modem / protocol can communicate quickly with scripts. Too high a polling rate can freeze the modem. \
ModemManager and uqmi need more time to respond.')
);
o.value('-1', _('Disabled'));
o.value('5', _('5 seconds'));
o.value('10', _('10 seconds'));
o.value('30', _('30 seconds'));
o.value('45', _('45 seconds'));
o.default = '5';
o.rmempty = false;
o = s.option(form.DynamicList, 'hide_data', _('Add data to hide'),
_('Enter the data you would like to hide, e.g. IMEI, IMSI.')
);
o.rmempty = true;
s = m.section(form.TypedSection, 'modemdata', null);
s.anonymous = true;
s.addremove = false;
s.tab('bts1', _('BTS search settings'));
s.anonymous = true;
o = s.taboption('bts1', form.DummyValue, '_dummy');
o.rawhtml = true;
o.default =
'