From 16064aa876050f7aaa63129710e3082fd8a93820 Mon Sep 17 00:00:00 2001 From: tutman96 <11356668+tutman96@users.noreply.github.com> Date: Mon, 6 Jan 2025 18:56:29 +0000 Subject: [PATCH] Better handle install and re-install lifecycle. Also display all the juicy bits about the plugin --- internal/plugin/install.go | 17 +++--- internal/plugin/plugin.go | 5 +- ui/src/components/PluginConfigureDialog.tsx | 58 +++++++++++++++++---- ui/src/components/PluginList.tsx | 4 +- ui/src/components/UploadPluginDialog.tsx | 9 +++- ui/src/hooks/stores.ts | 4 +- 6 files changed, 70 insertions(+), 27 deletions(-) diff --git a/internal/plugin/install.go b/internal/plugin/install.go index 0f0bf01..dedf329 100644 --- a/internal/plugin/install.go +++ b/internal/plugin/install.go @@ -19,7 +19,7 @@ type PluginInstall struct { ExtractedVersions map[string]string `json:"extracted_versions"` manifest *PluginManifest - runningVersion *string + runningVersion string processManager *ProcessManager rpcServer *PluginRpcServer } @@ -84,10 +84,7 @@ func (p *PluginInstall) ReconcileSubprocess() error { return fmt.Errorf("failed to get plugin manifest: %v", err) } - versionRunning := "" - if p.runningVersion != nil { - versionRunning = *p.runningVersion - } + versionRunning := p.runningVersion versionShouldBeRunning := p.Version if !p.Enabled { @@ -105,7 +102,7 @@ func (p *PluginInstall) ReconcileSubprocess() error { log.Printf("Stopping plugin %s running version %s", manifest.Name, versionRunning) p.processManager.Disable() p.processManager = nil - p.runningVersion = nil + p.runningVersion = "" err = p.rpcServer.Stop() if err != nil { return fmt.Errorf("failed to stop rpc server: %v", err) @@ -146,7 +143,11 @@ func (p *PluginInstall) ReconcileSubprocess() error { }) p.processManager.StartMonitor() p.processManager.Enable() - p.runningVersion = &p.Version + p.runningVersion = p.Version + + // Clear out manifest so the new version gets pulled next time + p.manifest = nil + log.Printf("Started plugin %s version %s", manifest.Name, p.Version) return nil } @@ -155,7 +156,7 @@ func (p *PluginInstall) Shutdown() { if p.processManager != nil { p.processManager.Disable() p.processManager = nil - p.runningVersion = nil + p.runningVersion = "" } if p.rpcServer != nil { diff --git a/internal/plugin/plugin.go b/internal/plugin/plugin.go index 5aa0ccb..e72acdf 100644 --- a/internal/plugin/plugin.go +++ b/internal/plugin/plugin.go @@ -120,7 +120,6 @@ func RpcPluginExtract(filename string) (*PluginManifest, error) { } func RpcPluginInstall(name string, version string) error { - // TODO: find the plugin version in the plugins.json file pluginInstall, ok := pluginDatabase.Plugins[name] if !ok { return fmt.Errorf("plugin not found: %s", name) @@ -136,8 +135,6 @@ func RpcPluginInstall(name string, version string) error { return fmt.Errorf("plugin version not found: %s", version) } - // TODO: If there is a running plugin with the same name, stop it and start the new version - pluginInstall.Version = version pluginInstall.Enabled = true pluginDatabase.Plugins[name] = pluginInstall @@ -151,7 +148,7 @@ func RpcPluginInstall(name string, version string) error { return fmt.Errorf("failed to start plugin %s: %v", name, err) } - // TODO: Determine if the old version should be removed + // TODO: Determine if the old extract should be removed return nil } diff --git a/ui/src/components/PluginConfigureDialog.tsx b/ui/src/components/PluginConfigureDialog.tsx index 7eab951..cc1762e 100644 --- a/ui/src/components/PluginConfigureDialog.tsx +++ b/ui/src/components/PluginConfigureDialog.tsx @@ -1,4 +1,4 @@ -import { PluginStatus } from "@/hooks/stores"; +import { PluginStatus, usePluginStore } from "@/hooks/stores"; import Modal from "@components/Modal"; import AutoHeight from "@components/AutoHeight"; import Card, { GridCard } from "@components/Card"; @@ -33,6 +33,8 @@ function Dialog({ plugin, setOpen }: { plugin: PluginStatus | null, setOpen: (op const [loading, setLoading] = useState(false); const [error, setError] = useState(null); + const {setIsPluginUploadModalOpen} = usePluginStore(); + useEffect(() => { setLoading(false); }, [plugin]) @@ -73,6 +75,11 @@ function Dialog({ plugin, setOpen }: { plugin: PluginStatus | null, setOpen: (op }); }, [send, plugin, setOpen]) + const uploadPlugin = useCallback(() => { + setOpen(false); + setIsPluginUploadModalOpen(true); + }, [setIsPluginUploadModalOpen, setOpen]) + return (
@@ -118,6 +125,30 @@ function Dialog({ plugin, setOpen }: { plugin: PluginStatus | null, setOpen: (op
+
+ + Name + + {plugin?.name} + + + Active Version + + {plugin?.version} + + + Description + + {plugin?.description} + + + Homepage + + + {plugin?.homepage} + +
+
{error}

} {plugin?.message && ( <> -

- Plugin message: -

- - {plugin.message} - +

+ Plugin message: +

+ + {plugin.message} + )}

@@ -154,6 +185,13 @@ function Dialog({ plugin, setOpen }: { plugin: PluginStatus | null, setOpen: (op }} >

+