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/components/settings/index.tsx | 6 ++++
.../src/components/settings/pages/PluginList.tsx | 32 +++++++++++++++++
frontend/src/plugin-loader.tsx | 41 ++++++++++++++++++----
3 files changed, 72 insertions(+), 7 deletions(-)
create mode 100644 frontend/src/components/settings/pages/PluginList.tsx
(limited to 'frontend')
diff --git a/frontend/src/components/settings/index.tsx b/frontend/src/components/settings/index.tsx
index d4799fa9..f9c84c7b 100644
--- a/frontend/src/components/settings/index.tsx
+++ b/frontend/src/components/settings/index.tsx
@@ -1,6 +1,7 @@
import { SidebarNavigation } from 'decky-frontend-lib';
import GeneralSettings from './pages/GeneralSettings';
+import PluginList from './pages/PluginList';
export default function SettingsPage() {
return (
@@ -13,6 +14,11 @@ export default function SettingsPage() {
content: ,
route: '/decky/settings/general',
},
+ {
+ title: 'Plugins',
+ content: ,
+ route: '/decky/settings/plugins',
+ },
]}
/>
);
diff --git a/frontend/src/components/settings/pages/PluginList.tsx b/frontend/src/components/settings/pages/PluginList.tsx
new file mode 100644
index 00000000..4fd2c063
--- /dev/null
+++ b/frontend/src/components/settings/pages/PluginList.tsx
@@ -0,0 +1,32 @@
+import { DialogButton, staticClasses } from 'decky-frontend-lib';
+import { FaTrash } from 'react-icons/fa';
+
+export default function PluginList() {
+ const plugins = window.DeckyPluginLoader?.getPlugins();
+
+ if (plugins.length === 0) {
+ return (
+
+ );
+ }
+
+ return (
+
+ );
+}
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