diff options
| author | AAGaming <aagaming@riseup.net> | 2024-08-08 15:26:40 -0400 |
|---|---|---|
| committer | AAGaming <aagaming@riseup.net> | 2024-08-08 15:26:40 -0400 |
| commit | 93b3919325b328fe95674b35b6c0b5efa69243f0 (patch) | |
| tree | 7bc4c45f32b74ce9059bd11052448d28a154ed4e /frontend/src | |
| parent | 7a161a5b833b55a31329f9f80116e09498f38368 (diff) | |
| download | decky-loader-93b3919325b328fe95674b35b6c0b5efa69243f0.tar.gz decky-loader-93b3919325b328fe95674b35b6c0b5efa69243f0.zip | |
fix reloading pluginsv3.0.0-pre9
Diffstat (limited to 'frontend/src')
| -rw-r--r-- | frontend/src/components/settings/pages/plugin_list/index.tsx | 2 | ||||
| -rw-r--r-- | frontend/src/plugin-loader.tsx | 15 | ||||
| -rw-r--r-- | frontend/src/plugin.ts | 1 |
3 files changed, 10 insertions, 8 deletions
diff --git a/frontend/src/components/settings/pages/plugin_list/index.tsx b/frontend/src/components/settings/pages/plugin_list/index.tsx index ff6e49f7..9a7cb076 100644 --- a/frontend/src/components/settings/pages/plugin_list/index.tsx +++ b/frontend/src/components/settings/pages/plugin_list/index.tsx @@ -66,8 +66,6 @@ function PluginInteractables(props: { entry: ReorderableEntry<PluginTableData> } } catch (err) { console.error('Error Reloading Plugin Backend', err); } - - DeckyPluginLoader.importPlugin(name, version); }} > {t('PluginListIndex.reload')} diff --git a/frontend/src/plugin-loader.tsx b/frontend/src/plugin-loader.tsx index 4e0a01e9..1dc73372 100644 --- a/frontend/src/plugin-loader.tsx +++ b/frontend/src/plugin-loader.tsx @@ -79,7 +79,7 @@ class PluginLoader extends Logger { private reloadLock: boolean = false; // stores a list of plugin names which requested to be reloaded - private pluginReloadQueue: { name: string; version?: string }[] = []; + private pluginReloadQueue: { name: string; version?: string; loadType: PluginLoadType }[] = []; private loaderUpdateToast?: ToastNotification; private pluginUpdateToast?: ToastNotification; @@ -369,11 +369,11 @@ class PluginLoader extends Logger { this.errorBoundaryHook.deinit(); } - public unloadPlugin(name: string) { + public unloadPlugin(name: string, skipStateUpdate: boolean = false) { const plugin = this.plugins.find((plugin) => plugin.name === name); plugin?.onDismount?.(); this.plugins = this.plugins.filter((p) => p !== plugin); - this.deckyState.setPlugins(this.plugins); + if (!skipStateUpdate) this.deckyState.setPlugins(this.plugins); } public async importPlugin( @@ -384,7 +384,7 @@ class PluginLoader extends Logger { ) { if (useQueue && this.reloadLock) { this.log('Reload currently in progress, adding to queue', name); - this.pluginReloadQueue.push({ name, version: version }); + this.pluginReloadQueue.push({ name, version: version, loadType }); return; } @@ -392,7 +392,7 @@ class PluginLoader extends Logger { if (useQueue) this.reloadLock = true; this.log(`Trying to load ${name}`); - this.unloadPlugin(name); + this.unloadPlugin(name, true); const startTime = performance.now(); await this.importReactPlugin(name, version, loadType); const endTime = performance.now(); @@ -406,7 +406,7 @@ class PluginLoader extends Logger { this.reloadLock = false; const nextPlugin = this.pluginReloadQueue.shift(); if (nextPlugin) { - this.importPlugin(nextPlugin.name, nextPlugin.version); + this.importPlugin(nextPlugin.name, nextPlugin.version, loadType); } } } @@ -428,6 +428,7 @@ class PluginLoader extends Logger { ...plugin, name: name, version: version, + loadType, }); break; @@ -447,6 +448,7 @@ class PluginLoader extends Logger { ...plugin, name: name, version: version, + loadType, }); } else throw new Error(`${name} frontend_bundle not OK`); break; @@ -484,6 +486,7 @@ class PluginLoader extends Logger { version: version, content: <TheError />, icon: <FaExclamationCircle />, + loadType, }); this.toaster.toast({ title: ( diff --git a/frontend/src/plugin.ts b/frontend/src/plugin.ts index 92a0c625..0a6ae7aa 100644 --- a/frontend/src/plugin.ts +++ b/frontend/src/plugin.ts @@ -6,6 +6,7 @@ export enum PluginLoadType { export interface Plugin { name: string; version?: string; + loadType?: PluginLoadType; icon: JSX.Element; content?: JSX.Element; onDismount?(): void; |
