]> git.basschouten.com Git - openhab-addons.git/commitdiff
[linuxinput] fixes to thing properties (#10634)
authorThomas Weißschuh <thomas@t-8ch.de>
Wed, 5 May 2021 20:22:18 +0000 (22:22 +0200)
committerGitHub <noreply@github.com>
Wed, 5 May 2021 20:22:18 +0000 (22:22 +0200)
* 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 <thomas@t-8ch.de>
bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java

index 2d0da6dad04fa86df5fd1d2bb99e8a77cfc98aae..365c39bb9647a0f9ba965f156dc9485a94d93ca6 100644 (file)
@@ -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;
     }