summaryrefslogtreecommitdiff
path: root/backend/decky_loader/loader.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/decky_loader/loader.py')
-rw-r--r--backend/decky_loader/loader.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/backend/decky_loader/loader.py b/backend/decky_loader/loader.py
index 13e54289..f1a9488f 100644
--- a/backend/decky_loader/loader.py
+++ b/backend/decky_loader/loader.py
@@ -1,6 +1,5 @@
from __future__ import annotations
from asyncio import AbstractEventLoop, Queue, sleep
-from json.decoder import JSONDecodeError
from logging import getLogger
from os import listdir, path
from pathlib import Path
@@ -9,6 +8,7 @@ from typing import Any, Tuple, Dict
from aiohttp import web
from os.path import exists
+from attr import dataclass
from watchdog.events import RegexMatchingEventHandler, DirCreatedEvent, DirModifiedEvent, FileCreatedEvent, FileModifiedEvent # type: ignore
from watchdog.observers import Observer # type: ignore
@@ -23,10 +23,6 @@ from .wsrouter import WSRouter
Plugins = dict[str, PluginWrapper]
ReloadQueue = Queue[Tuple[str, str, bool | None] | Tuple[str, str]]
-#TODO: Remove placeholder method
-async def log_plugin_emitted_message(message: Any):
- getLogger().debug(f"EMITTED MESSAGE: " + str(message))
-
class FileChangeHandler(RegexMatchingEventHandler):
def __init__(self, queue: ReloadQueue, plugin_path: str) -> None:
super().__init__(regexes=[r'^.*?dist\/index\.js$', r'^.*?main\.py$']) # type: ignore
@@ -70,10 +66,17 @@ class FileChangeHandler(RegexMatchingEventHandler):
self.logger.debug(f"file modified: {src_path}")
self.maybe_reload(src_path)
+@dataclass
+class PluginEvent:
+ plugin_name: str
+ event: str
+ data: str
+
class Loader:
def __init__(self, server_instance: PluginManager, ws: WSRouter, plugin_path: str, loop: AbstractEventLoop, live_reload: bool = False) -> None:
self.loop = loop
self.logger = getLogger("Loader")
+ self.ws = ws
self.plugin_path = plugin_path
self.logger.info(f"plugin_path: {self.plugin_path}")
self.plugins: Plugins = {}
@@ -149,8 +152,14 @@ class Loader:
self.plugins.pop(plugin.name, None)
if plugin.passive:
self.logger.info(f"Plugin {plugin.name} is passive")
+
+ async def plugin_emitted_event(event: str, data: Any):
+ self.logger.debug(f"PLUGIN EMITTED EVENT: {str(event)} {data}")
+ event_data = PluginEvent(plugin_name=plugin.name, event=event, data=data)
+ await self.ws.emit("plugin_event", event_data)
+
+ self.plugins[plugin.name].set_emitted_event_callback(plugin_emitted_event)
self.plugins[plugin.name] = plugin.start()
- self.plugins[plugin.name].set_emitted_message_callback(log_plugin_emitted_message)
self.logger.info(f"Loaded {plugin.name}")
if not batch:
self.loop.create_task(self.dispatch_plugin(plugin.name, plugin.version))