From 2b69e17d68f26af779bfc752a67f709909242fd2 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Wed, 13 Aug 2025 00:54:14 +0700 Subject: [PATCH] feat(plugins/settings): show `Reload required` dialog immediately after flag update --- lib/plugins/src/_internal/index.ts | 13 +++++++++++-- .../settings/definitions/RevengePluginsSetting.tsx | 4 +--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/plugins/src/_internal/index.ts b/lib/plugins/src/_internal/index.ts index 8fbd898..0c8f820 100644 --- a/lib/plugins/src/_internal/index.ts +++ b/lib/plugins/src/_internal/index.ts @@ -64,6 +64,7 @@ export interface InternalPluginMeta { dependents: AnyPlugin[] dependencies?: AnyPlugin[] options: PluginOptions + flags: number } export const pUnscopedApi = uapi @@ -76,6 +77,7 @@ export const pEmitter = new TypedEventEmitter<{ started: [AnyPlugin] stopped: [AnyPlugin] errored: [AnyPlugin, unknown] + flagUpdate: [AnyPlugin] }>() export const pList = new Map() @@ -94,7 +96,7 @@ export function registerPlugin( if (pList.has(manifest.id)) throw new Error(`Plugin with ID "${manifest.id}" already registered`) - const plugin: AnyPlugin = { + const plugin = { errors: [], manifest, lifecycles: { @@ -105,10 +107,16 @@ export function registerPlugin( }, SettingsComponent: options.SettingsComponent, status: 0, - flags, disable: () => disablePlugin(plugin), stop: () => stopPlugin(plugin), api: undefined, + set flags(flags: number) { + meta.flags = flags + pEmitter.emit('flagUpdate', this) + }, + get flags() { + return meta.flags + }, } const meta: InternalPluginMeta = { @@ -119,6 +127,7 @@ export function registerPlugin( dependents: [], handleError: e => handlePluginError(e, plugin), options, + flags, } pMetadata.set(plugin, meta) diff --git a/src/plugins/start/settings/definitions/RevengePluginsSetting.tsx b/src/plugins/start/settings/definitions/RevengePluginsSetting.tsx index 8ae55d6..489a56f 100644 --- a/src/plugins/start/settings/definitions/RevengePluginsSetting.tsx +++ b/src/plugins/start/settings/definitions/RevengePluginsSetting.tsx @@ -53,8 +53,7 @@ function useEnabledPluginCount() { const { AlertActionButton, AlertModal, Text } = Design -pEmitter.on('started', showReloadRequiredAlertIfNeeded) -pEmitter.on('stopped', showReloadRequiredAlertIfNeeded) +pEmitter.on('flagUpdate', showReloadRequiredAlertIfNeeded) function showReloadRequiredAlertIfNeeded(plugin: AnyPlugin) { if (plugin.flags & PluginFlags.ReloadRequired) { @@ -87,7 +86,6 @@ function PluginReloadRequiredAlert({ plugins }: { plugins: AnyPlugin[] }) { > {plugin.manifest.name} - {', '} ))}