Skip to content

Commit

Permalink
Added optional evdev dependency
Browse files Browse the repository at this point in the history
(Pulled in by pynput on Linux anyway)
  • Loading branch information
Patrick Lenihan committed Feb 6, 2025
1 parent 72dfe89 commit f0c080a
Show file tree
Hide file tree
Showing 5 changed files with 490 additions and 371 deletions.
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
.PHONY: build test package clean

POETRY_EXTRAS =

ifeq ($(USE_EVDEV),true)
POETRY_EXTRAS := $(POETRY_EXTRAS) use_evdev
endif

build:
poetry install
poetry install --extras "$(POETRY_EXTRAS)"

test:
poetry run aw-watcher-afk --help # Ensures that it at least starts
Expand Down
3 changes: 0 additions & 3 deletions aw_watcher_afk/listeners.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ def next_event(self):
def has_new_event(self):
return self.keyboard.has_new_event() or self.mouse.has_new_event()

def env_true(envvar):
return os.getenv(envvar) == "true"

system = platform.system()

def use_evdev():
Expand Down
26 changes: 19 additions & 7 deletions aw_watcher_afk/listeners_evdev.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,29 @@ class DataListener(AsyncioListener, Generic[TData]):
def __init__(self) -> None:
self.data = self._init_data()

async def reconnect_wait(self):
await asyncio.sleep(2)

@abstractmethod
async def _read_loop(self, dev):
"""Read data from a device"""
raise NotImplementedError

async def _read_loop_reconnect(self, dev):

"""Update self.data by reading evdev events"""

while True:
try:
dev = InputDevice(dev)
logger.debug(f"Connected to {dev.name}")
await self._read_loop(dev)
except OSError as e:
logger.warning(f"Device {dev.path} disconnected: {e}")
await self.reconnect_wait()
except Exception as e:
logger.error(f"Unexpected error in event loop: {e}", exc_info=True)

@abstractmethod
def _init_data(self) -> TData:
raise NotImplementedError
Expand All @@ -85,7 +103,7 @@ def _create_tasks(self, loop):
devices = list(self._find_devices())
assert len(devices), "You may need to add your user to the 'input' group"
for dev in devices:
loop.create_task(self._read_loop(dev))
loop.create_task(self._read_loop_reconnect(dev))

def run(self):
loop = asyncio.new_event_loop()
Expand Down Expand Up @@ -135,10 +153,6 @@ def _find_devices(self) -> Iterable[str]:

async def _read_loop(self, dev):

"""Update self.data by reading evdev events"""

dev = InputDevice(dev)

async for event in dev.async_read_loop():
# logger.debug(f"Evdev event ({dev.name}): {evdev.categorize(event)}")
if event.type == ecodes.EV_KEY and event.value == 1:
Expand Down Expand Up @@ -186,8 +200,6 @@ async def _read_loop(self, dev):

"""Update self.data by reading evdev events"""

dev = InputDevice(dev)

old_x = None
old_y = None

Expand Down
Loading

0 comments on commit f0c080a

Please sign in to comment.