From 5a4705e9b06e284dd56379b4153d32c8e14b1db9 Mon Sep 17 00:00:00 2001 From: HighImKevin Date: Sun, 18 Oct 2026 14:22:51 -0400 Subject: [PATCH] Add Reset All Users and Restore Defaults to the Manage KefinTweaks modal --- injector.js | 20 ++++++++++- scripts/configuration.js | 73 ++++++++++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 15 deletions(-) diff --git a/injector.js b/injector.js index eee85a8..faed3b2 100644 --- a/injector.js +++ b/injector.js @@ -5,7 +5,25 @@ (function() { 'use strict'; - console.log('[KefinTweaks Injector] Initializing...'); + console.log('[KefinTweaks Injector] Initializing...'); + + // Check for global configuration reset (admin "Reset All Users Local Settings") + try { + const config = window.KefinTweaksConfig || {}; + const remoteVersion = config.configVersion || 0; + const localVersion = parseInt(localStorage.getItem('kefinTweaks_lastResetVersion') || '0', 10); + + if (remoteVersion > localVersion && remoteVersion > 0) { + console.log('[KefinTweaks] Global reset detected. Clearing user configuration.'); + Object.keys(localStorage) + .filter(key => key.startsWith('kefinTweaks')) + .forEach(key => localStorage.removeItem(key)); + localStorage.setItem('kefinTweaks_lastResetVersion', remoteVersion.toString()); + } + } catch (e) { + console.error('[KefinTweaks] Error checking for global reset:', e); + } + // Cache for resolved root URL (to avoid multiple API calls) let resolvedRootCache = null; // Cached Jellyfin major (10 / 11 / 12 …); null until resolved or if unavailable diff --git a/scripts/configuration.js b/scripts/configuration.js index 17ac4ef..022c27d 100644 --- a/scripts/configuration.js +++ b/scripts/configuration.js @@ -885,7 +885,7 @@ - @@ -2494,15 +2494,12 @@ `; - // Create footer with save, export, and import buttons + // Create footer with save (reset actions live in Manage) const footer = document.createElement('div'); footer.style.display = 'flex'; footer.style.gap = '0.75em'; footer.style.alignItems = 'center'; footer.innerHTML = ` - @@ -4758,12 +4755,7 @@ }); } - const resetBtn = modalInstance.dialogFooter?.querySelector('#resetConfigBtn'); - if (resetBtn) { - resetBtn.addEventListener('click', () => handleResetConfig(modalInstance)); - } - - // Manage button handler (Backups / Export / Import) + // Manage button handler (Backups / Export / Import / Resets) const manageBtn = modalInstance.dialog?.querySelector('#manageConfigBtn'); if (manageBtn) { manageBtn.addEventListener('click', () => openManageConfigModal(config, modalInstance)); @@ -5356,10 +5348,12 @@ }, content: `
-
+
+ +
@@ -5397,6 +5391,16 @@ btn.addEventListener('click', () => setTab(btn.dataset.manageTab)); }); + content.querySelector('#manageRestoreDefaultsBtn')?.addEventListener('click', async () => { + const didReset = await handleResetConfig(parentModalInstance || manageModal); + if (didReset) { + manageModal.close(); + } + }); + content.querySelector('#manageResetAllUsersBtn')?.addEventListener('click', () => { + handleResetAllUsersConfig(); + }); + // Export panel const exportTa = content.querySelector('#manageExportConfigTextarea'); if (exportTa) { @@ -6077,16 +6081,19 @@ } } + /** + * @returns {Promise} true if defaults were restored + */ async function handleResetConfig(modalInstance) { const userIsAdmin = await isAdmin(); if (!userIsAdmin) { alert('You must be an administrator to reset configuration.'); - return; + return false; } const confirmed = confirm('This will restore the KefinTweaks configuration to its defaults. It cannot be undone. Are you sure you want to continue?'); if (!confirmed) { - return; + return false; } try { @@ -6114,6 +6121,7 @@ modalInstance.close(); } openConfigurationModal(); + return true; } catch (error) { console.error('[KefinTweaks Configuration] Error resetting config:', error); if (window.KefinTweaksToaster && window.KefinTweaksToaster.toast) { @@ -6121,6 +6129,43 @@ } else { alert(`Error resetting configuration: ${error.message}`); } + return false; + } + } + + /** + * Bump configVersion so clients clear kefinTweaks* localStorage on next load (see injector.js). + */ + async function handleResetAllUsersConfig() { + const userIsAdmin = await isAdmin(); + if (!userIsAdmin) { + alert('You must be an administrator to reset configuration for all users.'); + return; + } + + const confirmed = confirm('WARNING: This will force ALL users to reset their KefinTweaks local settings on their next visit. This action cannot be undone. Are you sure you want to continue?'); + if (!confirmed) { + return; + } + + try { + const config = await getKefinTweaksConfig(); + config.configVersion = Date.now(); + + await KefinTweaksUtils.saveConfigToJavaScriptInjector(config); + + if (window.KefinTweaksToaster && window.KefinTweaksToaster.toast) { + window.KefinTweaksToaster.toast('Reset signal sent. All users will be reset on next load.'); + } else { + alert('Reset signal sent. All users will be reset on next load.'); + } + } catch (error) { + console.error('[KefinTweaks Configuration] Error resetting all users config:', error); + if (window.KefinTweaksToaster && window.KefinTweaksToaster.toast) { + window.KefinTweaksToaster.toast(`Error resetting configuration: ${error.message}`, '5'); + } else { + alert(`Error resetting configuration: ${error.message}`); + } } }