summaryrefslogtreecommitdiff
path: root/frontend/src/plugin-loader.ts
diff options
context:
space:
mode:
authorJonas Dellinger <jonas@dellinger.dev>2022-05-26 09:29:49 +0200
committerJonas Dellinger <jonas@dellinger.dev>2022-05-26 09:29:49 +0200
commit39e56fed3de9129ff167a632ffbc12340fe665e9 (patch)
tree5014c945521b30a462fcd22af9ca86deb5da9315 /frontend/src/plugin-loader.ts
parentd23f1ac56c6749e214303c01adec20f2d4a2d0dd (diff)
downloaddecky-loader-39e56fed3de9129ff167a632ffbc12340fe665e9.tar.gz
decky-loader-39e56fed3de9129ff167a632ffbc12340fe665e9.zip
Switch to inotify, RegexMatchingEventHandler and use set for reloading plugins
Diffstat (limited to 'frontend/src/plugin-loader.ts')
-rw-r--r--frontend/src/plugin-loader.ts27
1 files changed, 14 insertions, 13 deletions
diff --git a/frontend/src/plugin-loader.ts b/frontend/src/plugin-loader.ts
index 9a72ea84..de4dd138 100644
--- a/frontend/src/plugin-loader.ts
+++ b/frontend/src/plugin-loader.ts
@@ -11,7 +11,7 @@ interface Plugin {
class PluginLoader extends Logger {
private pluginInstances: Record<string, Plugin> = {};
private tabsHook: TabsHook;
- private lock = 0;
+ private reloadSet = new Set();
constructor() {
super(PluginLoader.name);
@@ -35,14 +35,15 @@ class PluginLoader extends Logger {
return Promise.all(plugins.map((plugin) => this.loadPlugin(plugin.name)));
}
- async loadPlugin(name) {
+ async loadPlugin(name: string) {
this.log('Loading Plugin:', name);
try {
- while (this.lock === 1) {
- await new Promise((resolve) => setTimeout(resolve, 1000));
+ if (this.reloadSet.has(name)) {
+ this.log('Skipping loading of', name, "since it's already loading...");
+ return;
}
- this.lock = 1;
+ this.reloadSet.add(name);
if (this.pluginInstances[name]) {
this.dismountPlugin(name);
@@ -64,7 +65,7 @@ class PluginLoader extends Logger {
} catch (e) {
console.error(e);
} finally {
- this.lock = 0;
+ this.reloadSet.delete(name);
}
}
@@ -74,9 +75,9 @@ class PluginLoader extends Logger {
}
}
- static createPluginAPI(pluginName) {
+ static createPluginAPI(pluginName: string) {
return {
- async callServerMethod(methodName, args = {}) {
+ async callServerMethod(methodName: string, args = {}) {
const response = await fetch(`http://127.0.0.1:1337/methods/${methodName}`, {
method: 'POST',
headers: {
@@ -87,7 +88,7 @@ class PluginLoader extends Logger {
return response.json();
},
- async callPluginMethod(methodName, args = {}) {
+ async callPluginMethod(methodName: string, args = {}) {
const response = await fetch(`http://127.0.0.1:1337/plugins/${pluginName}/methods/${methodName}`, {
method: 'POST',
headers: {
@@ -100,25 +101,25 @@ class PluginLoader extends Logger {
return response.json();
},
- fetchNoCors(url, request: any = {}) {
+ fetchNoCors(url: string, request: any = {}) {
let args = { method: 'POST', headers: {}, body: '' };
const req = { ...args, ...request, url, data: request.body };
return this.callServerMethod('http_request', req);
},
- executeInTab(tab, runAsync, code) {
+ executeInTab(tab: string, runAsync: boolean, code: string) {
return this.callServerMethod('execute_in_tab', {
tab,
run_async: runAsync,
code,
});
},
- injectCssIntoTab(tab, style) {
+ injectCssIntoTab(tab: string, style: string) {
return this.callServerMethod('inject_css_into_tab', {
tab,
style,
});
},
- removeCssFromTab(tab, cssId) {
+ removeCssFromTab(tab: string, cssId: any) {
return this.callServerMethod('remove_css_from_tab', {
tab,
css_id: cssId,