diff --git a/client/web/src/plugin/manager.ts b/client/web/src/plugin/manager.ts index 2a8e56d4..2991df7e 100644 --- a/client/web/src/plugin/manager.ts +++ b/client/web/src/plugin/manager.ts @@ -56,8 +56,33 @@ class PluginManager { /** * 获取所有插件列表 */ - async getRegistryPlugins(): Promise { - return await getCachedRegistryPlugins(); + getRegistryPlugins = _once(async (): Promise => { + const plugins = await getCachedRegistryPlugins(); + + this.updatePluginsInfo(plugins); + + return plugins; + }); + + /** + * 自动更新插件信息到最新版本 + */ + private async updatePluginsInfo(plugins: PluginManifest[]) { + const installPlugins = await this.getInstalledPlugins(); + + await this.saveInstalledPlugins( + installPlugins.map((item) => { + const latestPluginInfo = plugins.find((p) => p.name === item.name); + if (latestPluginInfo) { + return { + ...item, + ...latestPluginInfo, + }; + } else { + return item; + } + }) + ); } /** @@ -75,7 +100,7 @@ class PluginManager { plugins.push(manifest); } - await getStorage().save(PluginManager.STORE_KEY, plugins); + await this.saveInstalledPlugins(plugins); await loadSinglePlugin({ name: manifest.name, @@ -93,9 +118,16 @@ class PluginManager { const index = plugins.findIndex((plugin) => plugin.name === pluginName); if (index >= 0) { plugins.splice(index, 1); - await getStorage().save(PluginManager.STORE_KEY, plugins); + await this.saveInstalledPlugins(plugins); } } + + /** + * 记录已安装插件信息 + */ + private async saveInstalledPlugins(plugins: PluginManifest[]) { + await getStorage().save(PluginManager.STORE_KEY, plugins); + } } export const pluginManager = new PluginManager();