From 59213173bc3635cfee69ea6bea3749aa85fe7fe9 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Mon, 14 Feb 2022 18:26:21 +0800 Subject: [PATCH 1/2] chore: delete enable in plugin infra --- packages/dashboard/src/initialization/PluginHost.ts | 6 ------ packages/mask/src/plugin-infra/host.ts | 6 ------ packages/plugin-infra/src/manager/manage.ts | 12 +++++------- packages/plugin-infra/src/types.ts | 10 ---------- 4 files changed, 5 insertions(+), 29 deletions(-) diff --git a/packages/dashboard/src/initialization/PluginHost.ts b/packages/dashboard/src/initialization/PluginHost.ts index 2744acf44b97..ab3a0eff3ce9 100644 --- a/packages/dashboard/src/initialization/PluginHost.ts +++ b/packages/dashboard/src/initialization/PluginHost.ts @@ -8,12 +8,6 @@ import i18n from 'i18next' import { InMemoryStorages, PersistentStorages } from '../utils/kv-storage' const PluginHost: Plugin.__Host.Host = { - enabled: { - // Due to MASK-391, we don't have a user configurable "disabled" plugin. - // All plugins are always loaded but it might be displayed in the invisible mode. - isEnabled: () => true, - events: new Emitter(), - }, minimalMode: { events: new Emitter(), isEnabled: (id) => { diff --git a/packages/mask/src/plugin-infra/host.ts b/packages/mask/src/plugin-infra/host.ts index d4dc1dd8b308..1fea2750a5f1 100644 --- a/packages/mask/src/plugin-infra/host.ts +++ b/packages/mask/src/plugin-infra/host.ts @@ -24,12 +24,6 @@ export function createPluginHost( return { signal, - // Due to MASK-391, we don't have a user configurable "disabled" plugin. - // All plugins are always loaded but it might be displayed in the summary mode. - enabled: { - events: new Emitter(), - isEnabled: () => true, - }, minimalMode, addI18NResource(plugin, resource) { createI18NBundle(plugin, resource)(i18nNextInstance) diff --git a/packages/plugin-infra/src/manager/manage.ts b/packages/plugin-infra/src/manager/manage.ts index ab1bfbf74a94..4c37cc0f84c0 100644 --- a/packages/plugin-infra/src/manager/manage.ts +++ b/packages/plugin-infra/src/manager/manage.ts @@ -1,4 +1,4 @@ -import { Emitter, ALL_EVENTS } from '@servie/events' +import { Emitter } from '@servie/events' import { noop } from 'lodash-unified' import type { Plugin } from '../types' import { getPluginDefine, registeredPluginIDs, registeredPlugins } from './store' @@ -50,19 +50,18 @@ export function createManager< function startDaemon(host: Plugin.__Host.Host, extraCheck?: (id: string) => boolean) { _host = host - const { enabled, signal, addI18NResource, minimalMode } = _host - const removeListener1 = enabled.events.on(ALL_EVENTS, checkRequirementAndStartOrStop) - const removeListener2 = minimalMode.events.on('enabled', (id) => { + const { signal, addI18NResource, minimalMode } = _host + const removeListener1 = minimalMode.events.on('enabled', (id) => { minimalModePluginIDs.add(id) events.emit('minimalModeChanged', id, true) }) - const removeListener3 = minimalMode.events.on('disabled', (id) => { + const removeListener2 = minimalMode.events.on('disabled', (id) => { minimalModePluginIDs.delete(id) events.emit('minimalModeChanged', id, false) }) signal?.addEventListener('abort', () => [...activated.keys()].forEach(stopPlugin)) - signal?.addEventListener('abort', () => void [removeListener1(), removeListener2(), removeListener3()]) + signal?.addEventListener('abort', () => void [removeListener1(), removeListener2()]) for (const plugin of registeredPlugins) { plugin.i18n && addI18NResource(plugin.ID, plugin.i18n) @@ -78,7 +77,6 @@ export function createManager< async function meetRequirement(id: string) { const define = getPluginDefine(id) if (!define) return false - if (!(await enabled.isEnabled(id))) return false if (extraCheck && !extraCheck(id)) return false return true } diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index 949c384e29b6..573d240b1ca4 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -740,20 +740,10 @@ export interface Pageable { // --------------------------------------------------- export namespace Plugin.__Host { export interface Host { - /** - * Control if the plugin is enabled or not. - * - * Note: This API currently is not in use. - * - * The "enabled/disabled" UI in the dashboard actually reflects to the "minimalMode" below. - */ - enabled: EnabledStatusReporter /** * Control if the plugin is in the minimal mode. * * If it is in the minimal mode, it will be omitted in some cases. - * - * Plugin can use */ minimalMode: EnabledStatusReporter addI18NResource(pluginID: string, resources: Plugin.Shared.I18NResource): void From 729c96d6dca044ae31978a7abe3062fa6f7ed35f Mon Sep 17 00:00:00 2001 From: Jack Works Date: Mon, 14 Feb 2022 18:41:11 +0800 Subject: [PATCH 2/2] fix: minimal mode has no notification when init --- packages/plugin-infra/src/manager/manage.ts | 27 +++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/plugin-infra/src/manager/manage.ts b/packages/plugin-infra/src/manager/manage.ts index 4c37cc0f84c0..f33eb326b7b6 100644 --- a/packages/plugin-infra/src/manager/manage.ts +++ b/packages/plugin-infra/src/manager/manage.ts @@ -1,3 +1,4 @@ +import { ObservableSet } from '@masknet/shared-base' import { Emitter } from '@servie/events' import { noop } from 'lodash-unified' import type { Plugin } from '../types' @@ -18,7 +19,15 @@ export function createManager< } const resolved = new Map() const activated = new Map() - const minimalModePluginIDs = new Set() + const minimalModePluginIDs = (() => { + const value = new ObservableSet() + value.event.on('add', (id) => id.forEach((id) => events.emit('minimalModeChanged', id, true))) + value.event.on('delete', (id) => events.emit('minimalModeChanged', id, false)) + value.clear = () => { + throw new TypeError('[@masknet/plugin-infra] Cannot clear minimal mode plugin IDs') + } + return value + })() let _host: Plugin.__Host.Host = undefined! const events = new Emitter<{ activateChanged: [id: string, enabled: boolean] @@ -41,24 +50,16 @@ export function createManager< } as Iterable, }, minimalMode: { - *[Symbol.iterator]() { - yield* minimalModePluginIDs - }, - }, + [Symbol.iterator]: () => minimalModePluginIDs.values(), + } as Iterable, events, } function startDaemon(host: Plugin.__Host.Host, extraCheck?: (id: string) => boolean) { _host = host const { signal, addI18NResource, minimalMode } = _host - const removeListener1 = minimalMode.events.on('enabled', (id) => { - minimalModePluginIDs.add(id) - events.emit('minimalModeChanged', id, true) - }) - const removeListener2 = minimalMode.events.on('disabled', (id) => { - minimalModePluginIDs.delete(id) - events.emit('minimalModeChanged', id, false) - }) + const removeListener1 = minimalMode.events.on('enabled', (id) => minimalModePluginIDs.add(id)) + const removeListener2 = minimalMode.events.on('disabled', (id) => minimalModePluginIDs.delete(id)) signal?.addEventListener('abort', () => [...activated.keys()].forEach(stopPlugin)) signal?.addEventListener('abort', () => void [removeListener1(), removeListener2()])