diff --git a/client/js/options.js b/client/js/options.js index b4eaaaa1..cbf6724d 100644 --- a/client/js/options.js +++ b/client/js/options.js @@ -18,6 +18,7 @@ const noCSSparamReg = /[?&]nocss/; // Will be assigned when `initialize` is called. let $syncWarningOverride; let $syncWarningBase; +let $forceSyncButton; let $warningUnsupported; let $warningBlocked; @@ -76,7 +77,7 @@ module.exports = { highlightsRE: null, settings, shouldOpenMessagePreview, - noServerSettings, + syncAllSettings, processSetting, initialize, }; @@ -102,6 +103,7 @@ function updateDesktopNotificationStatus() { function applySetting(name, value) { if (name === "syncSettings" && value) { $syncWarningOverride.hide(); + $forceSyncButton.hide(); } else if (name === "motd") { $chat.toggleClass("hide-" + name, !value); } else if (name === "statusMessages") { @@ -198,8 +200,10 @@ function updateSetting(name, value, sync) { socket.emit("setting:get"); $syncWarningOverride.hide(); $syncWarningBase.hide(); + $forceSyncButton.hide(); } else if (name === "syncSettings") { $syncWarningOverride.show(); + $forceSyncButton.show(); } if (settings.syncSettings && !noSync.includes(name) && sync) { @@ -210,9 +214,9 @@ function updateSetting(name, value, sync) { } } -function noServerSettings() { - // Sync is enabled but the server has no settings so we sync all settings from this client. - if (settings.syncSettings) { +function syncAllSettings(force = false) { + // Sync all settings if sync is enabled or force is true. + if (settings.syncSettings || force) { for (const name in settings) { if (!noSync.includes(name)) { settingSetEmit(name, settings[name]); @@ -223,8 +227,10 @@ function noServerSettings() { $syncWarningOverride.hide(); $syncWarningBase.hide(); + $forceSyncButton.hide(); } else { $syncWarningOverride.hide(); + $forceSyncButton.hide(); $syncWarningBase.show(); } } @@ -262,6 +268,7 @@ function initialize() { $syncWarningOverride = $settings.find(".sync-warning-override"); $syncWarningBase = $settings.find(".sync-warning-base"); + $forceSyncButton = $settings.find(".force-sync-button"); $warningBlocked.hide(); module.exports.initialized = true; @@ -300,6 +307,10 @@ function initialize() { } }); + $settings.on("click", "#forceSync", () => { + syncAllSettings(true); + }); + // Local init is done, let's sync // We always ask for synced settings even if it is disabled. // Settings can be mandatory to sync and it is used to determine sync base state. diff --git a/client/js/socket-events/setting.js b/client/js/socket-events/setting.js index f8a2eb17..6a97cd6d 100644 --- a/client/js/socket-events/setting.js +++ b/client/js/socket-events/setting.js @@ -19,7 +19,7 @@ socket.on("setting:new", function(data) { socket.on("setting:all", function(settings) { if (Object.keys(settings).length === 0) { - options.noServerSettings(); + options.syncAllSettings(); } else { for (const name in settings) { evaluateSetting(name, settings[name]); diff --git a/client/views/windows/settings.tpl b/client/views/windows/settings.tpl index cf414f4b..821a9512 100644 --- a/client/views/windows/settings.tpl +++ b/client/views/windows/settings.tpl @@ -28,6 +28,10 @@
Warning Checking this box will override the settings of this client with those stored on the server.
Warning No settings have been synced before. Enabling this will sync all settings of this client as the base for other clients.
+ {{/unless}}