luci/modules/luci-mod-system/htdocs/luci-static/resources/view/system/reboot.js
Rafał Miłecki 96bb528ccc luci-mod-system: use ubus method for reboot
It's more generic & convenient than hardcoding /sbin/reboot executable
path. procd provides "reboot" method since 2016.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2020-09-10 17:35:07 +02:00

65 lines
1.5 KiB
JavaScript

'use strict';
'require view';
'require rpc';
'require ui';
'require uci';
var callReboot = rpc.declare({
object: 'system',
method: 'reboot',
expect: { result: 0 }
});
return view.extend({
load: function() {
return uci.changes();
},
render: function(changes) {
var body = E([
E('h2', _('Reboot')),
E('p', {}, _('Reboots the operating system of your device'))
]);
for (var config in (changes || {})) {
body.appendChild(E('p', { 'class': 'alert-message warning' },
_('Warning: There are unsaved changes that will get lost on reboot!')));
break;
}
body.appendChild(E('hr'));
body.appendChild(E('button', {
'class': 'cbi-button cbi-button-action important',
'click': ui.createHandlerFn(this, 'handleReboot')
}, _('Perform reboot')));
return body;
},
handleReboot: function(ev) {
return callReboot().then(function(res) {
if (res != 0) {
L.ui.addNotification(null, E('p', _('The reboot command failed with code %d').format(res)));
L.raise('Error', 'Reboot failed');
}
L.ui.showModal(_('Rebooting…'), [
E('p', { 'class': 'spinning' }, _('Waiting for device...'))
]);
window.setTimeout(function() {
L.ui.showModal(_('Rebooting…'), [
E('p', { 'class': 'spinning alert-message warning' },
_('Device unreachable! Still waiting for device...'))
]);
}, 150000);
L.ui.awaitReconnect();
})
.catch(function(e) { L.ui.addNotification(null, E('p', e.message)) });
},
handleSaveApply: null,
handleSave: null,
handleReset: null
});