From e510244cb62e6f759fbb88cb9575d2d3fb3127f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Wed, 5 May 2021 22:22:18 +0200 Subject: [PATCH] [linuxinput] fixes to thing properties (#10634) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * Do not discover on ENTRY_MODIFY ENTRY_MODIFY is triggered on each keypress multiple times, so we should not trigger on it. The usecase for ENTRY_MODIFY triggers where detecting permission changes of the event nodes. Inotify does have a dedicate event ("ATTRIB") for that but Java WatchService normalizes this to a ENTRY_MODIFY event (See LinuxWatchService.java) After permission changes users now have to trigger a scan manually. * Use proper representation property * Show event node in label This makes it easier to figure out which thing is which device in the presence of symlinks or multiple identical devices. Signed-off-by: Thomas Weißschuh --- .../linuxinput/internal/LinuxInputDiscoveryService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java b/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java index 2d0da6dad0..365c39bb96 100644 --- a/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java +++ b/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java @@ -100,7 +100,7 @@ public class LinuxInputDiscoveryService extends AbstractDiscoveryService { return; } DiscoveryResultBuilder result = DiscoveryResultBuilder.create(new ThingUID(THING_TYPE_DEVICE, file.getName())) - .withProperty("path", file.getAbsolutePath()).withRepresentationProperty(file.getName()); + .withProperty("path", file.getAbsolutePath()).withRepresentationProperty("path"); if (ttl != null) { result = result.withTTL(ttl.getSeconds()); } @@ -122,7 +122,7 @@ public class LinuxInputDiscoveryService extends AbstractDiscoveryService { String labelFromDevice = device.getName(); boolean isKeyboard = device.has(EvdevLibrary.Type.KEY); if (labelFromDevice != null) { - label = labelFromDevice; + label = String.format("%s (%s)", labelFromDevice, inputDevice.getName()); } return isKeyboard; } finally { @@ -168,8 +168,10 @@ public class LinuxInputDiscoveryService extends AbstractDiscoveryService { private WatchService makeWatcher() throws IOException { WatchService watchService = FileSystems.getDefault().newWatchService(); + // FIXME also trigger on inotify "ATTRIB" events when WatchService supports this. + // Triggering on ENTRY_MODIFY will trigger multiple times on each keypress for *any* input device. DEVICE_DIRECTORY.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, - StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); + StandardWatchEventKinds.ENTRY_DELETE); return watchService; } -- 2.47.3