feat: add stop() method to HotkeyListener protocol and PynputHotkeyListener
This commit is contained in:
@@ -37,6 +37,12 @@ class PynputHotkeyListener:
|
||||
self.on_release: AsyncCallback | None = None
|
||||
self._loop: asyncio.AbstractEventLoop | None = None
|
||||
self._pressed = False
|
||||
self._stop_event: asyncio.Event | None = None
|
||||
|
||||
def stop(self) -> None:
|
||||
"""Signalisiert dem listen()-Loop zu beenden."""
|
||||
if self._loop is not None and self._stop_event is not None:
|
||||
self._loop.call_soon_threadsafe(self._stop_event.set)
|
||||
|
||||
async def _handle_key_event(self, key_down: bool) -> None:
|
||||
"""Ruft den passenden Callback auf."""
|
||||
@@ -69,13 +75,13 @@ class PynputHotkeyListener:
|
||||
async def listen(self) -> None:
|
||||
"""Startet den pynput Keyboard-Listener und blockiert async."""
|
||||
self._loop = asyncio.get_running_loop()
|
||||
stop_event = asyncio.Event()
|
||||
self._stop_event = asyncio.Event()
|
||||
|
||||
listener = Listener(on_press=self._on_press, on_release=self._on_release)
|
||||
listener.start()
|
||||
logger.info("Lausche auf %s via pynput", self.key_name)
|
||||
|
||||
try:
|
||||
await stop_event.wait() # Blockiert bis zum Programmende
|
||||
await self._stop_event.wait()
|
||||
finally:
|
||||
listener.stop()
|
||||
|
||||
Reference in New Issue
Block a user