fix: starting a plugin was deleting&adding the record instead of updating it

Massimo Melina committed May 1, 2022 at 10:48 UTC c3ff924eebb8194331582021e8fdd218c85d2890
1 file changed +15 -6
server/src/plugins.ts
+15 -6
@@ -83,7 +83,12 @@ export class Plugin {
83 catch(e){
84 console.debug('error unloading plugin', id, String(e))
85 }
86 - plugins[id] = this // track this
86 + // track this
87 + const wasStopped = availablePlugins[id]
88 + if (wasStopped)
89 + delete availablePlugins[id]
90 + plugins[id] = this
91 +
92 this.data = data = { ...data } // clone to make object modifiable. Objects coming from import are not.
93 // some validation
94 for (const k of ['frontend_css', 'frontend_js']) {
@@ -95,7 +100,7 @@ export class Plugin {
100 console.warn('invalid', k)
101 }
102 }
98 - events.emit(old || availablePlugins[id] ? 'pluginStarted' : 'pluginInstalled', this)
103 + events.emit(old || wasStopped ? 'pluginStarted' : 'pluginInstalled', this)
104 }
105 get middleware(): undefined | PluginMiddleware {
106 return this.data?.middleware
@@ -204,12 +209,16 @@ async function rescan() {
209 })
210 }
211 for (const id in foundDisabled)
207 - if (!availablePlugins[id] && !plugins[id])
208 - events.emit('pluginInstalled', foundDisabled[id])
212 + if (!availablePlugins[id]) {
213 + availablePlugins[id] = foundDisabled[id]
214 + if (!plugins[id])
215 + events.emit('pluginInstalled', foundDisabled[id])
216 + }
217 for (const id in availablePlugins)
210 - if (!foundDisabled[id] && !plugins[id])
218 + if (!foundDisabled[id] && !found.includes(id) && !plugins[id]) {
219 + delete availablePlugins[id]
220 events.emit('pluginUninstalled', id)
212 - availablePlugins = foundDisabled
221 + }
222 for (const id in plugins)
223 if (!found.includes(id))
224 plugins[id].unload()