// Depends on: core/utils.js ($), core/state.js (settings, SETTINGS_DEFAULTS), ui/toast.js (showToast) function updateSettingsUI() { $('toggleNotify')?.classList.toggle('active', settings.notifyOnDisconnect === true); $('toggleNotifyTunnelError')?.classList.toggle('active', settings.notifyOnTunnelError !== false); $('toggleTunnelAutoReconnect')?.classList.toggle('active', settings.tunnelAutoReconnect === true); $('toggleDebug')?.classList.toggle('active', settings.debug === true); $('toggleDisableFileUrls')?.classList.toggle('active', settings.disableOnFileUrls === true); $('toggleTheme')?.classList.toggle('active', document.documentElement.getAttribute('data-theme') === 'light'); const proxyPortEl = $('proxyPort'); const readyTimeoutMsEl = $('readyTimeoutMs'); const backupRetentionEl = $('backupRetention'); const backupIntervalEl = $('backupIntervalHours'); if (proxyPortEl) proxyPortEl.value = settings.proxyPort ?? SETTINGS_DEFAULTS.proxyPort; if (readyTimeoutMsEl) readyTimeoutMsEl.value = settings.readyTimeoutMs ?? SETTINGS_DEFAULTS.readyTimeoutMs; if (backupRetentionEl) backupRetentionEl.value = settings.backupRetention ?? SETTINGS_DEFAULTS.backupRetention; if (backupIntervalEl) backupIntervalEl.value = settings.backupIntervalHours ?? SETTINGS_DEFAULTS.backupIntervalHours; } function saveSettings() { settings.notifyOnDisconnect = $('toggleNotify')?.classList.contains('active') ?? SETTINGS_DEFAULTS.notifyOnDisconnect; settings.notifyOnTunnelError = $('toggleNotifyTunnelError')?.classList.contains('active') ?? SETTINGS_DEFAULTS.notifyOnTunnelError; settings.tunnelAutoReconnect = $('toggleTunnelAutoReconnect')?.classList.contains('active') ?? SETTINGS_DEFAULTS.tunnelAutoReconnect; settings.debug = $('toggleDebug')?.classList.contains('active') ?? SETTINGS_DEFAULTS.debug; settings.disableOnFileUrls = $('toggleDisableFileUrls')?.classList.contains('active') ?? SETTINGS_DEFAULTS.disableOnFileUrls; settings.proxyPort = parseInt($('proxyPort')?.value, 10) || SETTINGS_DEFAULTS.proxyPort; settings.readyTimeoutMs = parseInt($('readyTimeoutMs')?.value, 10) || SETTINGS_DEFAULTS.readyTimeoutMs; settings.backupRetention = Math.max(1, parseInt($('backupRetention')?.value, 10) || SETTINGS_DEFAULTS.backupRetention); settings.backupIntervalHours = Math.max(0, parseInt($('backupIntervalHours')?.value, 10) || 0); chrome.runtime.sendMessage( { target: 'holesail-native', action: 'send', payload: { type: 'updateSettings', payload: { ...settings } } }, (response) => { if (chrome.runtime.lastError) { showToast('Settings save failed: ' + chrome.runtime.lastError.message, 'error'); return; } if (response && response.ok) { if (response.settings) settings = { ...SETTINGS_DEFAULTS, ...response.settings }; if (response.requiresRestart) { showToast('Settings saved — restart the native host for proxy port changes to take effect', 'warning'); } else { showToast('Settings saved', 'success'); } } else { showToast(response?.error || 'Failed to save settings', 'error'); } } ); }