#66 limiting injected names to 80 chars

meta
sezanzeb 4 years ago
parent 24571d9995
commit de52a87ae2

@ -295,6 +295,15 @@ class Injector(multiprocessing.Process):
loop.stop()
return
def get_udef_name(self, name, prefix):
"""Make sure the generated name is not longer than 80 chars."""
max_len = 80 # based on error messages
suffix = 'key-mapper'
remaining_len = max_len - len(suffix) - len(prefix) - 2
middle = name[:remaining_len]
name = f'{suffix} {middle} {prefix}'
return name
def run(self):
"""The injection worker that keeps injecting until terminated.
@ -331,7 +340,7 @@ class Injector(multiprocessing.Process):
# where mapped events go to.
# See the Context docstring on why this is needed.
self.context.uinput = evdev.UInput(
name=f'{DEV_NAME} {self.device} mapped',
name=self.get_udef_name(self.device, 'mapped'),
phys=DEV_NAME,
events=self._construct_capabilities(group['gamepad'])
)
@ -349,7 +358,7 @@ class Injector(multiprocessing.Process):
# so don't merge all InputDevices into one UInput device.
gamepad = is_gamepad(source)
forward_to = evdev.UInput(
name=f'{DEV_NAME} {source.name} forwarded',
name=self.get_udef_name(source.name, 'forwarded'),
phys=DEV_NAME,
events=self._copy_capabilities(source)
)

@ -449,6 +449,23 @@ class TestInjector(unittest.TestCase):
# it can still debounce stuff though
self.assertIsNone(self.injector._event_producer.max_abs)
def test_get_udef_name(self):
self.injector = Injector('device 1', custom_mapping)
suffix = 'mapped'
prefix = 'key-mapper'
expected = f'{prefix} {"a" * (80 - len(suffix) - len(prefix) - 2)} {suffix}'
self.assertEqual(len(expected), 80)
self.assertEqual(
self.injector.get_udef_name('a' * 100, suffix),
expected
)
self.injector.device = 'abcd'
self.assertEqual(
self.injector.get_udef_name('abcd', 'forwarded'),
'key-mapper abcd forwarded'
)
def test_capabilities_and_uinput_presence(self):
custom_mapping.change(Key(EV_KEY, KEY_A, 1), 'c')
custom_mapping.change(Key(EV_REL, REL_HWHEEL, 1), 'k(b)')

Loading…
Cancel
Save