From 39b44ff439bfb9ce5d0221921866bb0c9f162003 Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Thu, 8 Feb 2024 14:48:39 -0800 Subject: [PATCH] Desktop: Disable built-in copy of Simple Backup by default in Joplin Portable (#9907) --- .../services/plugins/defaultPluginsUtils.ts | 28 +++++++++++++++++++ .../lib/services/plugins/PluginService.ts | 1 + .../defaultPlugins/defaultPluginsUtils.ts | 5 ++++ .../desktopDefaultPluginsInfo.ts | 6 ++++ 4 files changed, 40 insertions(+) diff --git a/packages/app-cli/tests/services/plugins/defaultPluginsUtils.ts b/packages/app-cli/tests/services/plugins/defaultPluginsUtils.ts index 51d50d3ef1..900a617f16 100644 --- a/packages/app-cli/tests/services/plugins/defaultPluginsUtils.ts +++ b/packages/app-cli/tests/services/plugins/defaultPluginsUtils.ts @@ -172,6 +172,34 @@ describe('defaultPluginsUtils', () => { expect(Setting.value('plugin-io.github.jackgruber.backup.path')).toBe('initial-path'); }); + it('should support disabled-by-default plugins', async () => { + const service = newPluginService(); + + const plugin = await service.loadPluginFromJsBundle('', sampleJsBundlePlugin); + plugin.builtIn = false; + await service.runPlugin(plugin); + + const defaultPluginsInfo: DefaultPluginsInfo = { + 'joplin.plugin.ambrt.backlinksToNote': { + enabled: false, + }, + 'org.joplinapp.plugins.ToggleSidebars': {}, + }; + Setting.setValue('installedDefaultPlugins', []); + + const { pluginSettings } = await getDefaultPluginPathsAndSettings( + testDefaultPluginsDir, defaultPluginsInfo, {}, service, + ); + + expect(pluginSettings).toMatchObject({ + 'joplin.plugin.ambrt.backlinksToNote': { + enabled: false, + deleted: false, + }, + 'org.joplinapp.plugins.ToggleSidebars': defaultPluginSetting(), + }); + }); + it('should not throw error on missing setting key', async () => { const service = newPluginService(); diff --git a/packages/lib/services/plugins/PluginService.ts b/packages/lib/services/plugins/PluginService.ts index 79b6a87fe5..6784c0338a 100644 --- a/packages/lib/services/plugins/PluginService.ts +++ b/packages/lib/services/plugins/PluginService.ts @@ -34,6 +34,7 @@ export interface SettingAndValue { export interface DefaultPluginSettings { settings?: SettingAndValue; + enabled?: boolean; } export interface DefaultPluginsInfo { diff --git a/packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.ts b/packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.ts index 61a95fef96..a642d70760 100644 --- a/packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.ts +++ b/packages/lib/services/plugins/defaultPlugins/defaultPluginsUtils.ts @@ -65,6 +65,11 @@ export const getDefaultPluginPathsAndSettings = async ( // As such, we recreate the plugin state if necessary. if (!draft[pluginId]) { draft[pluginId] = defaultPluginSetting(); + + const enabledByDefault = defaultPluginsInfo[pluginId].enabled; + if (typeof enabledByDefault === 'boolean') { + draft[pluginId].enabled = enabledByDefault; + } } }); } diff --git a/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts b/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts index 6f36aec74d..ff7daae62d 100644 --- a/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts +++ b/packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.ts @@ -1,5 +1,6 @@ import { DefaultPluginsInfo } from '../PluginService'; import Setting from '../../../models/Setting'; +import shim from '../../../shim'; const getDefaultPluginsInfo = (): DefaultPluginsInfo => { const defaultPlugins = { @@ -7,6 +8,11 @@ const getDefaultPluginsInfo = (): DefaultPluginsInfo => { settings: { 'path': `${Setting.value('profileDir')}`, }, + + // Joplin Portable is more likely to run on a device with low write speeds + // and memory. Because Simple Backup has auto-backup enabled by default, + // we disable it in Joplin Portable. + enabled: !shim.isPortable(), }, }; return defaultPlugins;