Revert "fix onDismount"

This reverts commit daca482ed8.
This commit is contained in:
Jonas Dellinger
2022-06-20 15:28:30 +02:00
parent daca482ed8
commit d9dd09c69b
+40 -12
View File
@@ -4,6 +4,7 @@ import { FaPlug } from 'react-icons/fa';
import { DeckyState, DeckyStateContextProvider } from './components/DeckyState'; import { DeckyState, DeckyStateContextProvider } from './components/DeckyState';
import LegacyPlugin from './components/LegacyPlugin'; import LegacyPlugin from './components/LegacyPlugin';
import PluginView from './components/PluginView'; import PluginView from './components/PluginView';
import StorePage from './components/store/Store';
import TitleView from './components/TitleView'; import TitleView from './components/TitleView';
import Logger from './logger'; import Logger from './logger';
import { Plugin } from './plugin'; import { Plugin } from './plugin';
@@ -21,6 +22,10 @@ class PluginLoader extends Logger {
private routerHook: RouterHook = new RouterHook(); private routerHook: RouterHook = new RouterHook();
private deckyState: DeckyState = new DeckyState(); private deckyState: DeckyState = new DeckyState();
private reloadLock: boolean = false;
// stores a list of plugin names which requested to be reloaded
private pluginReloadQueue: string[] = [];
constructor() { constructor() {
super(PluginLoader.name); super(PluginLoader.name);
this.log('Initialized'); this.log('Initialized');
@@ -39,6 +44,8 @@ class PluginLoader extends Logger {
), ),
icon: <FaPlug />, icon: <FaPlug />,
}); });
this.routerHook.addRoute('/decky/store', () => <StorePage />);
} }
public addPluginInstallPrompt(artifact: string, version: string, request_id: string) { public addPluginInstallPrompt(artifact: string, version: string, request_id: string) {
@@ -67,18 +74,38 @@ class PluginLoader extends Logger {
} }
} }
public async importPlugin(name: string) { public deinit() {
this.log(`Trying to load ${name}`); this.routerHook.removeRoute('/decky/store');
let find = this.plugins.find((x) => x.name == name); }
if (find) this.plugins.splice(this.plugins.indexOf(find), 1);
if (name.startsWith('$LEGACY_')) {
await this.importLegacyPlugin(name.replace('$LEGACY_', ''));
} else {
await this.importReactPlugin(name);
}
this.log(`Loaded ${name}`);
this.deckyState.setPlugins(this.plugins); public async importPlugin(name: string) {
try {
if (this.reloadLock) {
this.log('Reload currently in progress, adding to queue', name);
this.pluginReloadQueue.push(name);
return;
}
this.log(`Trying to load ${name}`);
let find = this.plugins.find((x) => x.name == name);
if (find) this.plugins.splice(this.plugins.indexOf(find), 1);
if (name.startsWith('$LEGACY_')) {
await this.importLegacyPlugin(name.replace('$LEGACY_', ''));
} else {
await this.importReactPlugin(name);
}
this.log(`Loaded ${name}`);
this.deckyState.setPlugins(this.plugins);
} catch (e) {
throw e;
} finally {
this.reloadLock = false;
const nextPlugin = this.pluginReloadQueue.shift();
if (nextPlugin) {
this.importPlugin(nextPlugin);
}
}
} }
private async importReactPlugin(name: string) { private async importReactPlugin(name: string) {
@@ -87,7 +114,8 @@ class PluginLoader extends Logger {
let content = await eval(await res.text())(this.createPluginAPI(name)); let content = await eval(await res.text())(this.createPluginAPI(name));
this.plugins.push({ this.plugins.push({
name: name, name: name,
...content, icon: content.icon,
content: content.content,
}); });
} else throw new Error(`${name} frontend_bundle not OK`); } else throw new Error(`${name} frontend_bundle not OK`);
} }