From 67b1962054f3dde50147d14bdf726bc9fe402293 Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Wed, 3 May 2023 15:39:20 +0200 Subject: [PATCH] added handlers for api endpoints --- setup.py | 1 + streamdeckapi/server.py | 64 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 47692fe..707ba3e 100644 --- a/setup.py +++ b/setup.py @@ -27,6 +27,7 @@ setup( "websockets==11.0.2", "aiohttp==3.8.4", "human-readable-ids==0.1.3", + "jsonpickle==3.0.1", "streamdeck==0.9.3", "pillow>=9.4.0,<10.0.0", ], diff --git a/streamdeckapi/server.py b/streamdeckapi/server.py index 9ef05d8..44afd77 100644 --- a/streamdeckapi/server.py +++ b/streamdeckapi/server.py @@ -2,26 +2,82 @@ import aiohttp import asyncio -from aiohttp import web, WSCloseCode +import platform +from jsonpickle import encode +from aiohttp import web # from StreamDeck.DeviceManager import DeviceManager from streamdeckapi.const import PLUGIN_ICON, PLUGIN_INFO, PLUGIN_PORT +from streamdeckapi.types import SDApplication, SDButton, SDDevice + +application: SDApplication = SDApplication( + { + "font": "", + "language": "", + "platform": platform.system(), + "platformVersion": platform.version(), + "version": "0.0.1", + } +) +devices: list[SDDevice] = [] +buttons: dict[str, SDButton] = {} + +# Examples +devices.append( + SDDevice( + { + "id": "08B602C026FC8D1989FDF80EB8658612", + "name": "Stream Deck", + "size": {"columns": 5, "rows": 3}, + "type": 0, + } + ) +) +buttons["547686796543735"] = SDButton( + { + "uuid": "kind-sloth-97", + "device": "08B602C026FC8D1989FDF80EB8658612", + "position": {"x": 0, "y": 0}, + "svg": 'offPhilips Hue Huelight', + } +) async def api_info_handler(request: web.Request): - return web.Response(text="Info") + json_data = encode( + {"devices": devices, "application": application, "buttons": buttons}, + unpicklable=False, + ) + return web.Response(text=json_data, content_type="application/json") async def api_icon_get_handler(request: web.Request): btnId = request.match_info["btnId"] - return web.Response(text="Icon get") + for _, btn in buttons.items(): + if btn.uuid != btnId: + continue + return web.Response(text=btn.svg, content_type="image/svg+xml") + return web.Response(status=404, text="Button not found") async def api_icon_set_handler(request: web.Request): btnId = request.match_info["btnId"] + if not request.has_body: + return web.Response(status=422, text="No data in request") body = await request.text() print(body) - return web.Response(text="Icon set") + if not body.startswith("