From 2e53fb217a0e870359b48a1f2324f3f5cf30d7ec Mon Sep 17 00:00:00 2001 From: TrainDoctor Date: Sun, 29 Jan 2023 13:32:58 -0800 Subject: [PATCH 1/3] Add better handling for unloading of plugins --- backend/browser.py | 2 +- backend/plugin.py | 6 +++++- frontend/src/plugin-loader.tsx | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/browser.py b/backend/browser.py index f6cae5d3..40994b01 100644 --- a/backend/browser.py +++ b/backend/browser.py @@ -108,7 +108,7 @@ class PluginBrowser: try: logger.info("uninstalling " + name) logger.info(" at dir " + self.find_plugin_folder(name)) - logger.debug("unloading %s" % str(name)) + logger.debug("calling frontend unload for %s" % str(name)) await tab.evaluate_js(f"DeckyPluginLoader.unloadPlugin('{name}')") if self.plugins[name]: self.plugins[name].stop() diff --git a/backend/plugin.py b/backend/plugin.py index df0efe16..883f86f4 100644 --- a/backend/plugin.py +++ b/backend/plugin.py @@ -92,9 +92,12 @@ class PluginWrapper: async def _unload(self): try: - self.log.info("Attempting to unload " + self.name + "\n") + self.log.info("Attempting to unload with plugin " + self.name + "'s \"_unload function/\"" + "\n") if hasattr(self.Plugin, "_unload"): await self.Plugin._unload(self.Plugin) + self.log.info("Unloaded " + self.name + "\n") + else: + self.log.info("Could not find \"_unload\" in " + self.name + "'s main.py" + "\n") except: self.log.error("Failed to unload " + self.name + "!\n" + format_exc()) exit(0) @@ -118,6 +121,7 @@ class PluginWrapper: break data = loads(line.decode("utf-8")) if "stop" in data: + self.log.info("Calling Loader unload function.") await self._unload() get_event_loop().stop() while get_event_loop().is_running(): diff --git a/frontend/src/plugin-loader.tsx b/frontend/src/plugin-loader.tsx index 7215b49a..1a788a5b 100644 --- a/frontend/src/plugin-loader.tsx +++ b/frontend/src/plugin-loader.tsx @@ -335,7 +335,7 @@ class PluginLoader extends Logger { fetchNoCors(url: string, request: any = {}) { let args = { method: 'POST', headers: {} }; const req = { ...args, ...request, url, data: request.body }; - req?.body && delete req.body + req?.body && delete req.body; return this.callServerMethod('http_request', req); }, executeInTab(tab: string, runAsync: boolean, code: string) { From 994da868af407afb15ccd833c22591acb9a1f4d7 Mon Sep 17 00:00:00 2001 From: TrainDoctor Date: Sun, 29 Jan 2023 14:38:45 -0800 Subject: [PATCH 2/3] Add python logging to browser and plugin --- backend/browser.py | 8 ++++++++ backend/plugin.py | 2 +- frontend/src/plugin-loader.tsx | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/browser.py b/backend/browser.py index 40994b01..8062cc11 100644 --- a/backend/browser.py +++ b/backend/browser.py @@ -1,5 +1,7 @@ # Full imports import json +import pprint +from pprint import pformat # Partial imports from aiohttp import ClientSession, web @@ -110,9 +112,15 @@ class PluginBrowser: logger.info(" at dir " + self.find_plugin_folder(name)) logger.debug("calling frontend unload for %s" % str(name)) await tab.evaluate_js(f"DeckyPluginLoader.unloadPlugin('{name}')") + plugins_snapshot = self.plugins.copy() + snapshot_string = pformat(plugins_snapshot) + logger.debug("current plugins: %s", snapshot_string) if self.plugins[name]: + logger.debug("Plugin %s was found", name) self.plugins[name].stop() + logger.debug("Plugin %s was stopped", name) del self.plugins[name] + logger.debug("Plugin %s was removed from the dictionary", name) logger.debug("removing files %s" % str(name)) rmtree(self.find_plugin_folder(name)) except FileNotFoundError: diff --git a/backend/plugin.py b/backend/plugin.py index 883f86f4..efaeb322 100644 --- a/backend/plugin.py +++ b/backend/plugin.py @@ -92,7 +92,7 @@ class PluginWrapper: async def _unload(self): try: - self.log.info("Attempting to unload with plugin " + self.name + "'s \"_unload function/\"" + "\n") + self.log.info("Attempting to unload with plugin " + self.name + "'s \"_unload\" function.\n") if hasattr(self.Plugin, "_unload"): await self.Plugin._unload(self.Plugin) self.log.info("Unloaded " + self.name + "\n") diff --git a/frontend/src/plugin-loader.tsx b/frontend/src/plugin-loader.tsx index 1a788a5b..5b640758 100644 --- a/frontend/src/plugin-loader.tsx +++ b/frontend/src/plugin-loader.tsx @@ -180,6 +180,7 @@ class PluginLoader extends Logger { } public unloadPlugin(name: string) { + console.log('Plugin List: ', this.plugins); const plugin = this.plugins.find((plugin) => plugin.name === name || plugin.name === name.replace('$LEGACY_', '')); plugin?.onDismount?.(); this.plugins = this.plugins.filter((p) => p !== plugin); From 36cf85b08a15a8e55b6931894bf448b2977711e5 Mon Sep 17 00:00:00 2001 From: TrainDoctor Date: Sun, 29 Jan 2023 15:27:52 -0800 Subject: [PATCH 3/3] Comment out un-needed pprint usage --- backend/browser.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/browser.py b/backend/browser.py index 8062cc11..dbdf2d5f 100644 --- a/backend/browser.py +++ b/backend/browser.py @@ -1,7 +1,7 @@ # Full imports import json -import pprint -from pprint import pformat +# import pprint +# from pprint import pformat # Partial imports from aiohttp import ClientSession, web @@ -111,10 +111,11 @@ class PluginBrowser: logger.info("uninstalling " + name) logger.info(" at dir " + self.find_plugin_folder(name)) logger.debug("calling frontend unload for %s" % str(name)) - await tab.evaluate_js(f"DeckyPluginLoader.unloadPlugin('{name}')") - plugins_snapshot = self.plugins.copy() - snapshot_string = pformat(plugins_snapshot) - logger.debug("current plugins: %s", snapshot_string) + res = await tab.evaluate_js(f"DeckyPluginLoader.unloadPlugin('{name}')") + logger.debug("result of unload from UI: %s", res) + # plugins_snapshot = self.plugins.copy() + # snapshot_string = pformat(plugins_snapshot) + # logger.debug("current plugins: %s", snapshot_string) if self.plugins[name]: logger.debug("Plugin %s was found", name) self.plugins[name].stop()