From 4daf028e7acb49932e274ad5c32cd98045c7474a Mon Sep 17 00:00:00 2001 From: botato <63275405+botatooo@users.noreply.github.com> Date: Fri, 1 Jul 2022 23:43:17 +0000 Subject: Uninstall functionality (#97) * feat: POC uninstallation feature * Fixes, placeholder * bugfix: wrong function call * add oncancel and change function called * clean up plugin uninstall code * bugfix, uninstall in store * Limit scope of feature branch * feat: PluginLoader.unloadPlugin * problematic logs --- frontend/src/plugin-loader.tsx | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'frontend/src/plugin-loader.tsx') diff --git a/frontend/src/plugin-loader.tsx b/frontend/src/plugin-loader.tsx index b3df0f28..fc48fdd9 100644 --- a/frontend/src/plugin-loader.tsx +++ b/frontend/src/plugin-loader.tsx @@ -47,6 +47,10 @@ class PluginLoader extends Logger { this.routerHook.addRoute('/decky/settings', () => ); } + public getPlugins() { + return this.plugins; + } + public addPluginInstallPrompt(artifact: string, version: string, request_id: string, hash: string) { showModal( { + const formData = new FormData(); + formData.append('name', name); + await fetch('http://localhost:1337/browser/uninstall_plugin', { + method: 'POST', + body: formData, + }); + }} + onCancel={() => { + // do nothing + }} + > +
+ Uninstall {name}? +
+
, + ); + } + public dismountAll() { for (const plugin of this.plugins) { this.log(`Dismounting ${plugin.name}`); @@ -78,6 +104,13 @@ class PluginLoader extends Logger { this.routerHook.removeRoute('/decky/settings'); } + public unloadPlugin(name: string) { + const plugin = this.plugins.find((plugin) => plugin.name === name || plugin.name === name.replace('$LEGACY_', '')); + plugin?.onDismount?.(); + this.plugins = this.plugins.filter((p) => p !== plugin); + this.deckyState.setPlugins(this.plugins); + } + public async importPlugin(name: string) { if (this.reloadLock) { this.log('Reload currently in progress, adding to queue', name); @@ -89,13 +122,7 @@ class PluginLoader extends Logger { this.reloadLock = true; this.log(`Trying to load ${name}`); - const oldPlugin = this.plugins.find( - (plugin) => plugin.name === name || plugin.name === name.replace('$LEGACY_', ''), - ); - if (oldPlugin) { - oldPlugin.onDismount?.(); - this.plugins = this.plugins.filter((plugin) => plugin !== oldPlugin); - } + this.unloadPlugin(name); if (name.startsWith('$LEGACY_')) { await this.importLegacyPlugin(name.replace('$LEGACY_', '')); -- cgit v1.2.3