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()