summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/decky_loader/browser.py6
-rw-r--r--backend/decky_loader/loader.py10
-rw-r--r--backend/decky_loader/main.py2
-rw-r--r--backend/decky_loader/plugin/plugin.py12
4 files changed, 14 insertions, 16 deletions
diff --git a/backend/decky_loader/browser.py b/backend/decky_loader/browser.py
index 66e71117..28a591a0 100644
--- a/backend/decky_loader/browser.py
+++ b/backend/decky_loader/browser.py
@@ -135,7 +135,7 @@ class PluginBrowser:
# logger.debug("current plugins: %s", snapshot_string)
if name in self.plugins:
logger.debug("Plugin %s was found", name)
- self.plugins[name].stop(uninstall=True)
+ await self.plugins[name].stop(uninstall=True)
logger.debug("Plugin %s was stopped", name)
del self.plugins[name]
logger.debug("Plugin %s was removed from the dictionary", name)
@@ -249,7 +249,7 @@ class PluginBrowser:
if ret:
logger.info(f"Installed {name} (Version: {version})")
if name in self.loader.plugins:
- self.loader.plugins[name].stop()
+ await self.loader.plugins[name].stop()
self.loader.plugins.pop(name, None)
await sleep(1)
if not isInstalled:
@@ -257,7 +257,7 @@ class PluginBrowser:
current_plugin_order.append(name)
self.settings.setSetting("pluginOrder", current_plugin_order)
logger.debug("Plugin %s was added to the pluginOrder setting", name)
- self.loader.import_plugin(path.join(plugin_dir, "main.py"), plugin_folder)
+ await self.loader.import_plugin(path.join(plugin_dir, "main.py"), plugin_folder)
else:
logger.fatal(f"Failed Downloading Remote Binaries")
else:
diff --git a/backend/decky_loader/loader.py b/backend/decky_loader/loader.py
index 90c54211..7881e4b1 100644
--- a/backend/decky_loader/loader.py
+++ b/backend/decky_loader/loader.py
@@ -140,7 +140,7 @@ class Loader:
with open(path.join(self.plugin_path, plugin.plugin_directory, "dist/index.js"), "r", encoding="utf-8") as bundle:
return web.Response(text=bundle.read(), content_type="application/javascript")
- def import_plugin(self, file: str, plugin_directory: str, refresh: bool | None = False, batch: bool | None = False):
+ async def import_plugin(self, file: str, plugin_directory: str, refresh: bool | None = False, batch: bool | None = False):
try:
async def plugin_emitted_event(event: str, args: Any):
self.logger.debug(f"PLUGIN EMITTED EVENT: {event} with args {args}")
@@ -152,7 +152,7 @@ class Loader:
self.logger.info(f"Plugin {plugin.name} is already loaded and has requested to not be re-loaded")
return
else:
- self.plugins[plugin.name].stop()
+ await self.plugins[plugin.name].stop()
self.plugins.pop(plugin.name, None)
if plugin.passive:
self.logger.info(f"Plugin {plugin.name} is passive")
@@ -168,18 +168,18 @@ class Loader:
async def dispatch_plugin(self, name: str, version: str | None, load_type: int = PluginLoadType.ESMODULE_V1.value):
await self.ws.emit("loader/import_plugin", name, version, load_type)
- def import_plugins(self):
+ async def import_plugins(self):
self.logger.info(f"import plugins from {self.plugin_path}")
directories = [i for i in listdir(self.plugin_path) if path.isdir(path.join(self.plugin_path, i)) and path.isfile(path.join(self.plugin_path, i, "plugin.json"))]
for directory in directories:
self.logger.info(f"found plugin: {directory}")
- self.import_plugin(path.join(self.plugin_path, directory, "main.py"), directory, False, True)
+ await self.import_plugin(path.join(self.plugin_path, directory, "main.py"), directory, False, True)
async def handle_reloads(self):
while True:
args = await self.reload_queue.get()
- self.import_plugin(*args) # pyright: ignore [reportArgumentType]
+ await self.import_plugin(*args) # pyright: ignore [reportArgumentType]
async def handle_plugin_method_call_legacy(self, plugin_name: str, method_name: str, kwargs: Dict[Any, Any]):
res: Dict[Any, Any] = {}
diff --git a/backend/decky_loader/main.py b/backend/decky_loader/main.py
index d8479f1d..a1e683da 100644
--- a/backend/decky_loader/main.py
+++ b/backend/decky_loader/main.py
@@ -101,7 +101,7 @@ class PluginManager:
async def load_plugins(self):
# await self.wait_for_server()
logger.debug("Loading plugins")
- self.plugin_loader.import_plugins()
+ await self.plugin_loader.import_plugins()
if self.settings.getSetting("pluginOrder", None) == None:
self.settings.setSetting("pluginOrder", list(self.plugin_loader.plugins.keys()))
logger.debug("Did not find pluginOrder setting, set it to default")
diff --git a/backend/decky_loader/plugin/plugin.py b/backend/decky_loader/plugin/plugin.py
index 61b5ca4f..94e411bc 100644
--- a/backend/decky_loader/plugin/plugin.py
+++ b/backend/decky_loader/plugin/plugin.py
@@ -108,11 +108,9 @@ class PluginWrapper:
self._listener_task = create_task(self._response_listener())
return self
- def stop(self, uninstall: bool = False):
+ async def stop(self, uninstall: bool = False):
+ if hasattr(self, "_socket"):
+ await self._socket.write_single_line(dumps({ "stop": True, "uninstall": uninstall }, ensure_ascii=False))
+ await self._socket.close_socket_connection()
if hasattr(self, "_listener_task"):
- self._listener_task.cancel()
- async def _(self: PluginWrapper):
- if hasattr(self, "_socket"):
- await self._socket.write_single_line(dumps({ "stop": True, "uninstall": uninstall }, ensure_ascii=False))
- await self._socket.close_socket_connection()
- create_task(_(self)) \ No newline at end of file
+ self._listener_task.cancel() \ No newline at end of file