mirror of
https://github.com/SteamDeckHomebrew/decky-loader.git
synced 2026-06-17 08:47:49 +00:00
attempt to add plugin events to the plugin frontend api.
unable to test right now though
This commit is contained in:
committed by
PartyWumpus
parent
de9d2144a6
commit
f9ff518e6d
@@ -8,7 +8,6 @@ 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
|
||||
|
||||
@@ -66,12 +65,6 @@ 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
|
||||
@@ -149,10 +142,9 @@ class Loader:
|
||||
|
||||
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, 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("loader/plugin_event", event_data)
|
||||
async def plugin_emitted_event(event: str, args: Any):
|
||||
self.logger.debug(f"PLUGIN EMITTED EVENT: {event} with args {args}")
|
||||
await self.ws.emit(f"loader/plugin_event", {plugin:plugin.name, event:event, args:args})
|
||||
|
||||
plugin = PluginWrapper(file, plugin_directory, self.plugin_path, plugin_emitted_event)
|
||||
if plugin.name in self.plugins:
|
||||
|
||||
@@ -19,7 +19,7 @@ import subprocess
|
||||
import logging
|
||||
import time
|
||||
|
||||
from typing import TypeVar, Type
|
||||
from typing import Any
|
||||
|
||||
"""
|
||||
Constants
|
||||
@@ -213,9 +213,8 @@ logger.setLevel(logging.INFO)
|
||||
"""
|
||||
Event handling
|
||||
"""
|
||||
DataType = TypeVar("DataType")
|
||||
# TODO better docstring im lazy
|
||||
async def emit(event: str, data: DataType | None = None, data_type: Type[DataType] | None = None) -> None:
|
||||
async def emit(event: str, *args: Any) -> None:
|
||||
"""
|
||||
Send an event to the frontend.
|
||||
"""
|
||||
|
||||
@@ -16,7 +16,7 @@ __version__ = '0.1.0'
|
||||
|
||||
import logging
|
||||
|
||||
from typing import TypeVar, Type
|
||||
from typing import Any
|
||||
|
||||
"""
|
||||
Constants
|
||||
@@ -177,9 +177,8 @@ logger: logging.Logger
|
||||
"""
|
||||
Event handling
|
||||
"""
|
||||
DataType = TypeVar("DataType")
|
||||
# TODO better docstring im lazy
|
||||
async def emit(event: str, data: DataType | None = None, data_type: Type[DataType] | None = None) -> None:
|
||||
async def emit(event: str, *args: Any) -> None:
|
||||
"""
|
||||
Send an event to the frontend.
|
||||
"""
|
||||
@@ -59,7 +59,7 @@ class PluginWrapper:
|
||||
if line != None:
|
||||
res = loads(line)
|
||||
if res["type"] == SocketMessageType.EVENT.value:
|
||||
create_task(self.emitted_event_callback(res["event"], res["data"]))
|
||||
create_task(self.emitted_event_callback(res["event"], res["args"]))
|
||||
elif res["type"] == SocketMessageType.RESPONSE.value:
|
||||
self._method_call_requests.pop(res["id"]).set_result(res)
|
||||
except:
|
||||
|
||||
@@ -14,7 +14,7 @@ from ..localplatform.localplatform import setgid, setuid, get_username, get_home
|
||||
from ..enums import UserType
|
||||
from .. import helpers
|
||||
|
||||
from typing import List, TypeVar, Type
|
||||
from typing import List, TypeVar, Any
|
||||
|
||||
DataType = TypeVar("DataType")
|
||||
|
||||
@@ -83,11 +83,11 @@ class SandboxedPlugin:
|
||||
sysmodules[key.replace("decky_loader.", "")] = sysmodules[key]
|
||||
|
||||
from .imports import decky
|
||||
async def emit(event: str, data: DataType | None = None, data_type: Type[DataType] | None = None) -> None:
|
||||
async def emit(event: str, *args: Any) -> None:
|
||||
await self._socket.write_single_line_server(dumps({
|
||||
"type": SocketMessageType.EVENT,
|
||||
"event": event,
|
||||
"data": data
|
||||
"args": args
|
||||
}))
|
||||
# copy the docstring over so we don't have to duplicate it
|
||||
emit.__doc__ = decky.emit.__doc__
|
||||
|
||||
Reference in New Issue
Block a user