mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-28 03:01:54 +08:00
131 lines
4.7 KiB
JavaScript
131 lines
4.7 KiB
JavaScript
/*
|
|
* This is open source software, licensed under the MIT License.
|
|
*
|
|
* Copyright (C) 2024 BobbyUnknown
|
|
*
|
|
* Description:
|
|
* This software provides a RAM release scheduling application for OpenWrt.
|
|
* The application allows users to configure and automate the process of
|
|
* releasing RAM on their OpenWrt router at specified intervals, helping
|
|
* to optimize system performance and resource management through a
|
|
* user-friendly web interface.
|
|
*/
|
|
|
|
|
|
'use strict';
|
|
'require view';
|
|
'require rpc';
|
|
'require ui';
|
|
'require uci';
|
|
|
|
var callReboot = rpc.declare({
|
|
object: 'system',
|
|
method: 'reboot',
|
|
expect: { result: 0 }
|
|
});
|
|
|
|
var callForceReboot = rpc.declare({
|
|
object: 'system',
|
|
method: 'reboot',
|
|
params: [ '-f' ],
|
|
expect: { result: 0 }
|
|
});
|
|
|
|
return view.extend({
|
|
load: function() {
|
|
return uci.changes();
|
|
},
|
|
|
|
render: function(changes) {
|
|
var body = E([
|
|
E('h2', _('System 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', false)
|
|
}, _('Normal Reboot')));
|
|
|
|
body.appendChild(E('button', {
|
|
'class': 'cbi-button cbi-button-negative important',
|
|
'click': ui.createHandlerFn(this, 'handleReboot', true)
|
|
}, _('Force Reboot')));
|
|
|
|
body.appendChild(E('div', { 'style': 'text-align: center; padding: 10px; font-style: italic;' }, [
|
|
E('span', {}, [
|
|
_('© Dibuat oleh '),
|
|
E('a', {
|
|
'href': 'https://github.com/bobbyunknow',
|
|
'target': '_blank',
|
|
'style': 'text-decoration: none;'
|
|
}, 'BobbyUnknown')
|
|
])
|
|
]));
|
|
|
|
return body;
|
|
},
|
|
|
|
handleReboot: function(ev, force) {
|
|
var rebootCall = force ? callForceReboot : callReboot;
|
|
var rebootType = force ? _('Force Reboot') : _('Normal Reboot');
|
|
|
|
ui.showModal(_('Confirm Reboot'), [
|
|
E('h4', { style: 'color: #d9534f; text-align: center;' }, _('Are you absolutely sure you want to reboot the system?')),
|
|
E('p', { style: 'text-align: center;' }, _('This will restart your device. All running processes will be stopped.')),
|
|
E('div', { class: 'right' }, [
|
|
E('button', {
|
|
'class': 'btn',
|
|
'click': ui.hideModal
|
|
}, _('Cancel')),
|
|
' ',
|
|
E('button', {
|
|
'class': 'btn btn-danger',
|
|
'click': ui.createHandlerFn(this, function() {
|
|
ui.hideModal();
|
|
return rebootCall().then(function(res) {
|
|
if (res != 0) {
|
|
ui.addNotification(null, E('p', _('The reboot command failed with code %d').format(res)));
|
|
throw new Error('Reboot failed');
|
|
}
|
|
|
|
ui.showModal(_('Rebooting…'), [
|
|
E('p', { 'class': 'spinning' }, _('Waiting for device...'))
|
|
]);
|
|
|
|
var checkInterval = window.setInterval(function() {
|
|
fetch(window.location.href, { method: 'HEAD', cache: 'no-cache' })
|
|
.then(function() {
|
|
window.clearInterval(checkInterval);
|
|
window.location.reload();
|
|
})
|
|
.catch(function() {});
|
|
}, 5000);
|
|
|
|
window.setTimeout(function() {
|
|
ui.showModal(_('Rebooting…'), [
|
|
E('p', { 'class': 'spinning alert-message warning' },
|
|
_('Device unreachable! Still waiting for device...'))
|
|
]);
|
|
}, 150000);
|
|
}).catch(function(e) {
|
|
ui.addNotification(null, E('p', e.message));
|
|
});
|
|
})
|
|
}, rebootType)
|
|
])
|
|
]);
|
|
},
|
|
|
|
handleSaveApply: null,
|
|
handleSave: null,
|
|
handleReset: null
|
|
});
|