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": '',
+ }
+)
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("