summaryrefslogtreecommitdiff
path: root/kvmd
diff options
context:
space:
mode:
authorMaxim Devaev <[email protected]>2024-12-11 21:09:49 +0200
committerMaxim Devaev <[email protected]>2024-12-11 21:09:49 +0200
commite014cbcedff6d7e96a1d5d6417ed5b9362d927c5 (patch)
treeff050e6b282eb65feebb4ee5cc9d92c9f36f2796 /kvmd
parentadbd4f242b4478dd1a67de1afb3ba799de57f2d5 (diff)
pikvm/pikvm#858, pikvm/pikvm#1249: Added slow typing mode for /api/hid/print
Diffstat (limited to 'kvmd')
-rw-r--r--kvmd/apps/kvmd/api/hid.py5
-rw-r--r--kvmd/apps/kvmd/snapshoter.py2
-rw-r--r--kvmd/plugins/hid/__init__.py10
3 files changed, 13 insertions, 4 deletions
diff --git a/kvmd/apps/kvmd/api/hid.py b/kvmd/apps/kvmd/api/hid.py
index 51b9dc00..5ba22abb 100644
--- a/kvmd/apps/kvmd/api/hid.py
+++ b/kvmd/apps/kvmd/api/hid.py
@@ -123,7 +123,8 @@ class HidApi:
if limit > 0:
text = text[:limit]
symmap = self.__ensure_symmap(req.query.get("keymap", self.__default_keymap_name))
- self.__hid.send_key_events(text_to_web_keys(text, symmap), no_ignore_keys=True)
+ slow = valid_bool(req.query.get("slow", False))
+ await self.__hid.send_key_events(text_to_web_keys(text, symmap), no_ignore_keys=True, slow=slow)
return make_json_response()
def __ensure_symmap(self, keymap_name: str) -> dict[int, dict[int, str]]:
@@ -250,7 +251,7 @@ class HidApi:
state = valid_bool(req.query["state"])
self.__hid.send_key_event(key, state)
else:
- self.__hid.send_key_events([(key, True), (key, False)])
+ await self.__hid.send_key_events([(key, True), (key, False)], slow=True)
return make_json_response()
@exposed_http("POST", "/hid/events/send_mouse_button")
diff --git a/kvmd/apps/kvmd/snapshoter.py b/kvmd/apps/kvmd/snapshoter.py
index 76885c90..e9391306 100644
--- a/kvmd/apps/kvmd/snapshoter.py
+++ b/kvmd/apps/kvmd/snapshoter.py
@@ -123,7 +123,7 @@ class Snapshoter: # pylint: disable=too-many-instance-attributes
if self.__wakeup_key:
logger.info("Waking up using key %r ...", self.__wakeup_key)
- self.__hid.send_key_events(
+ await self.__hid.send_key_events(
keys=[(self.__wakeup_key, True), (self.__wakeup_key, False)],
no_ignore_keys=True,
)
diff --git a/kvmd/plugins/hid/__init__.py b/kvmd/plugins/hid/__init__.py
index 73ff5d04..447b4d07 100644
--- a/kvmd/plugins/hid/__init__.py
+++ b/kvmd/plugins/hid/__init__.py
@@ -137,9 +137,17 @@ class BaseHid(BasePlugin): # pylint: disable=too-many-instance-attributes
# =====
- def send_key_events(self, keys: Iterable[tuple[str, bool]], no_ignore_keys: bool=False) -> None:
+ async def send_key_events(
+ self,
+ keys: Iterable[tuple[str, bool]],
+ no_ignore_keys: bool=False,
+ slow: bool=False,
+ ) -> None:
+
for (key, state) in keys:
if no_ignore_keys or key not in self.__ignore_keys:
+ if slow:
+ await asyncio.sleep(0.02)
self.send_key_event(key, state)
def send_key_event(self, key: str, state: bool) -> None: