fix(tor-shield): Preset selection now immediately activates preset

- Clicking a preset card now enables/restarts Tor with that preset
- Previously it only selected the preset for next toggle
- Added better error handling for toggle and preset changes
- Page reloads after successful preset change

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-01-28 15:12:46 +01:00
parent 2ebc06f2ce
commit 87f3dab30a
2 changed files with 32 additions and 6 deletions

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-tor-shield
PKG_VERSION:=1.0.0
PKG_RELEASE:=7
PKG_RELEASE:=8
PKG_ARCH:=all
PKG_LICENSE:=MIT

View File

@ -19,6 +19,7 @@ return view.extend({
handleToggle: function() {
var self = this;
// Show loading while fetching current status
ui.showModal(_('Please wait...'), [
E('p', { 'class': 'spinning' }, _('Checking current status...'))
@ -38,10 +39,13 @@ return view.extend({
ui.hideModal();
if (result.success) {
ui.addNotification(null, E('p', _('Tor Shield disabled. Your traffic is no longer anonymized.')), 'warning');
window.location.reload();
setTimeout(function() { window.location.reload(); }, 1000);
} else {
ui.addNotification(null, E('p', result.error || _('Failed to disable')), 'error');
}
}).catch(function(err) {
ui.hideModal();
ui.addNotification(null, E('p', _('Disable error: %s').format(err.message || String(err))), 'error');
});
} else {
// Enable Tor with selected preset
@ -53,27 +57,49 @@ return view.extend({
ui.hideModal();
if (result.success) {
ui.addNotification(null, E('p', _('Tor Shield is starting. Please wait for bootstrap to complete.')), 'info');
window.location.reload();
setTimeout(function() { window.location.reload(); }, 1000);
} else {
ui.addNotification(null, E('p', result.error || _('Failed to enable')), 'error');
}
}).catch(function(err) {
ui.hideModal();
ui.addNotification(null, E('p', _('Enable error: %s').format(err.message || String(err))), 'error');
});
}
}).catch(function(err) {
ui.hideModal();
ui.addNotification(null, E('p', _('Error: %s').format(err.message || err)), 'error');
ui.addNotification(null, E('p', _('Status error: %s').format(err.message || String(err))), 'error');
});
},
// Handle preset selection
// Handle preset selection - immediately activates the preset
handlePresetSelect: function(presetId) {
var self = this;
this.currentPreset = presetId;
// Update UI
// Update UI immediately
var presets = document.querySelectorAll('.tor-preset');
presets.forEach(function(p) {
p.classList.toggle('active', p.dataset.preset === presetId);
});
// Enable/restart with selected preset
ui.showModal(_('Applying Preset'), [
E('p', { 'class': 'spinning' }, _('Activating %s preset...').format(presetId))
]);
api.enable(presetId).then(function(result) {
ui.hideModal();
if (result.success) {
ui.addNotification(null, E('p', _('Preset %s activated').format(presetId)), 'info');
setTimeout(function() { window.location.reload(); }, 1000);
} else {
ui.addNotification(null, E('p', result.error || _('Failed to apply preset')), 'error');
}
}).catch(function(err) {
ui.hideModal();
ui.addNotification(null, E('p', _('Error: %s').format(err.message || String(err))), 'error');
});
},
// Handle new identity request