pikvm/pikvm#1536: kvmd: Added new API /hid/events/send_shortcut

This commit is contained in:
Maxim Devaev 2025-06-02 02:48:10 +03:00
parent 6df1e55ffc
commit 2c36d86075

View File

@ -23,6 +23,7 @@
import os
import stat
import functools
import itertools
import struct
from typing import Iterable
@ -47,6 +48,7 @@ from ....plugins.hid import BaseHid
from ....validators import raise_error
from ....validators.basic import valid_bool
from ....validators.basic import valid_int_f0
from ....validators.basic import valid_string_list
from ....validators.os import valid_printable_filename
from ....validators.hid import valid_hid_keyboard_output
from ....validators.hid import valid_hid_mouse_output
@ -256,6 +258,19 @@ class HidApi:
# =====
@exposed_http("POST", "/hid/events/send_shortcut")
async def __events_send_shortcut_handler(self, req: Request) -> Response:
shortcut = valid_string_list(req.query.get("keys"), subval=valid_hid_key)
if shortcut:
press = [WEB_TO_EVDEV[key] for key in shortcut]
release = list(reversed(press))
seq = [
*zip(press, itertools.repeat(True)),
*zip(release, itertools.repeat(False)),
]
await self.__hid.send_key_events(seq, no_ignore_keys=True, slow=True)
return make_json_response()
@exposed_http("POST", "/hid/events/send_key")
async def __events_send_key_handler(self, req: Request) -> Response:
key = WEB_TO_EVDEV[valid_hid_key(req.query.get("key"))]