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..f33eb326b7b6 100644 --- a/packages/plugin-infra/src/manager/manage.ts +++ b/packages/plugin-infra/src/manager/manage.ts @@ -1,4 +1,5 @@ -import { Emitter, ALL_EVENTS } from '@servie/events' +import { ObservableSet } from '@masknet/shared-base' +import { Emitter } from '@servie/events' import { noop } from 'lodash-unified' import type { Plugin } from '../types' import { getPluginDefine, registeredPluginIDs, registeredPlugins } from './store' @@ -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,28 +50,19 @@ 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 { enabled, signal, addI18NResource, minimalMode } = _host - const removeListener1 = enabled.events.on(ALL_EVENTS, checkRequirementAndStartOrStop) - const removeListener2 = minimalMode.events.on('enabled', (id) => { - minimalModePluginIDs.add(id) - events.emit('minimalModeChanged', id, true) - }) - const removeListener3 = minimalMode.events.on('disabled', (id) => { - minimalModePluginIDs.delete(id) - events.emit('minimalModeChanged', id, false) - }) + const { signal, addI18NResource, minimalMode } = _host + 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(), removeListener3()]) + signal?.addEventListener('abort', () => void [removeListener1(), removeListener2()]) for (const plugin of registeredPlugins) { plugin.i18n && addI18NResource(plugin.ID, plugin.i18n) @@ -78,7 +78,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