Skip to content

Commit f0c080a

Browse files
committed
Added optional evdev dependency
(Pulled in by pynput on Linux anyway)
1 parent 72dfe89 commit f0c080a

File tree

5 files changed

+490
-371
lines changed

5 files changed

+490
-371
lines changed

Makefile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
.PHONY: build test package clean
22

3+
POETRY_EXTRAS =
4+
5+
ifeq ($(USE_EVDEV),true)
6+
POETRY_EXTRAS := $(POETRY_EXTRAS) use_evdev
7+
endif
8+
39
build:
4-
poetry install
10+
poetry install --extras "$(POETRY_EXTRAS)"
511

612
test:
713
poetry run aw-watcher-afk --help # Ensures that it at least starts

aw_watcher_afk/listeners.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ def next_event(self):
5959
def has_new_event(self):
6060
return self.keyboard.has_new_event() or self.mouse.has_new_event()
6161

62-
def env_true(envvar):
63-
return os.getenv(envvar) == "true"
64-
6562
system = platform.system()
6663

6764
def use_evdev():

aw_watcher_afk/listeners_evdev.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,29 @@ class DataListener(AsyncioListener, Generic[TData]):
6666
def __init__(self) -> None:
6767
self.data = self._init_data()
6868

69+
async def reconnect_wait(self):
70+
await asyncio.sleep(2)
71+
6972
@abstractmethod
7073
async def _read_loop(self, dev):
7174
"""Read data from a device"""
7275
raise NotImplementedError
7376

77+
async def _read_loop_reconnect(self, dev):
78+
79+
"""Update self.data by reading evdev events"""
80+
81+
while True:
82+
try:
83+
dev = InputDevice(dev)
84+
logger.debug(f"Connected to {dev.name}")
85+
await self._read_loop(dev)
86+
except OSError as e:
87+
logger.warning(f"Device {dev.path} disconnected: {e}")
88+
await self.reconnect_wait()
89+
except Exception as e:
90+
logger.error(f"Unexpected error in event loop: {e}", exc_info=True)
91+
7492
@abstractmethod
7593
def _init_data(self) -> TData:
7694
raise NotImplementedError
@@ -85,7 +103,7 @@ def _create_tasks(self, loop):
85103
devices = list(self._find_devices())
86104
assert len(devices), "You may need to add your user to the 'input' group"
87105
for dev in devices:
88-
loop.create_task(self._read_loop(dev))
106+
loop.create_task(self._read_loop_reconnect(dev))
89107

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

136154
async def _read_loop(self, dev):
137155

138-
"""Update self.data by reading evdev events"""
139-
140-
dev = InputDevice(dev)
141-
142156
async for event in dev.async_read_loop():
143157
# logger.debug(f"Evdev event ({dev.name}): {evdev.categorize(event)}")
144158
if event.type == ecodes.EV_KEY and event.value == 1:
@@ -186,8 +200,6 @@ async def _read_loop(self, dev):
186200

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

189-
dev = InputDevice(dev)
190-
191203
old_x = None
192204
old_y = None
193205

0 commit comments

Comments
 (0)